了解PostgreSQL选择运算符

时间:2015-04-07 12:49:26

标签: sql postgresql

我正在编写以下存储过程:

CREATE OR REPLACE FUNCTION getid() RETURNS table(id integer) AS $$
DECLARE
rec RECORD;
BEGIN
    select id into rec from player where id = 3;
END $$
LANGUAGE plpgsql;

select * from getid();

当我尝试执行该脚本时,我收到了错误:

column reference "id" is ambiguous

为什么呢?我认为返回表的id列不参与select运算符...

问题是它适用于PostgreSQL 8.4但不适用于PosgtreSQL 9.4。你无法解释PostgreSQL 9.4中实际添加的内容,所以它不起作用吗?

2 个答案:

答案 0 :(得分:3)

对参数和列使用相同的名称时,Postgres会感到困惑...考虑使用带有一些前缀的约定来表示所有输入参数 - 例如p_id 我会写:

CREATE OR REPLACE FUNCTION getid() RETURNS table(p_id integer) AS $$
DECLARE
rec RECORD;
BEGIN
    SELECT INTO rec id FROM player WHERE id = 3;
END $$
LANGUAGE plpgsql;

答案 1 :(得分:2)

要解决该特定问题,请在选择中执行此操作:

SELECT player.id INTO rec FROM player WHERE player.id = 3;