Eu estou escrevendo o seguinte procedimento armazenado:
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();
E quando estou tentando executar esse script, recebi o erro:
column reference "id" is ambiguous
Por quê? Eu pensei que id
coluna da tabela retornada não participa do operador select ...
A questão é que funcionou PostgreSQL 8.4
mas não funciona PosgtreSQL 9.4
. Você não pode explicar o que realmente foi adicionado no PostgreSQL 9.4
então não funciona?
Respostas:
3 para resposta № 1O Postgres é confuso quando você usa os mesmos nomes para argumentos e colunas ... Considere o uso de uma convenção com algum prefixo para todos os parâmetros de entrada - por exemplo, p_id Eu escreveria:
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;
2 para resposta № 2
Para resolver esse problema específico, você faria isso no seu select:
SELECT player.id INTO rec FROM player WHERE player.id = 3;