我需要将 max(id) 与从一个表到另一个表的 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 对mytable
中的每一行进行查找a_really_big_table
?
我正在使用 PostgreSQL 9.4.1