将来自不同 table 的最大 ID 添加到 PostgreSQL 中的查询

Adding max id from a different table to a query in PostgreSQL

我需要将 max(id) 与从一个 table 到另一个 table 的 bigint(和主键)连接起来。因此,如果最大 ID 为 1234567890,那么我希望结果为:

name, max_id
'foo', 1234567890
'bar', 1234567890
'noo', 1234567890
'boo', 1234567890
'zoo', 1234567890

我的第一个想法就是编写一个函数并将其作为 STABLE

推销
CREATE OR REPLACE FUNCTION get_max_id() RETURNS bigint AS
$$
DECLARE
    result bigint;
BEGIN
    RAISE NOTICE 'entering get_max_id';
    SELECT INTO result max(id) FROM mytable;
    RETURN result;
END;
$$
LANGUAGE plpgsql STABLE;

然后我通过 SQL 语句调用它,例如:

SELECT name, get_max_id() FROM a_really_big_table;

但是,从我的 raise notice 来看,这似乎是针对 a_really_big_table 中的每条记录调用的。

写这篇文章的最佳方式是什么,这样我就可以避免 PostgreSQL 对 a_really_big_table 中的每一行查找 mytable

我正在使用 PostgreSQL 9.4.1

有解决办法吗?

=# SELECT name AS name,
          (SELECT MAX(id) FROM your_table) AS max_id
   FROM really_big_table;

       name       │ max_id
──────────────────┼─────────
 44e5f8fc1f75fad2 │ 5307021
 97fc0aa3a5e3da98 │ 5307021
 ccb83afb938ad758 │ 5307021
 523bf25914e5c9c0 │ 5307021
 d2362badeb2eb7ea │ 5307021
 b6e0b87df6d41523 │ 5307021
 da754db1fa226453 │ 5307021
 865d0e177cb0a3e8 │ 5307021
 5904a07a273d8cba │ 5307021
 952c75ef37d47dab │ 5307021
(10 rows)