/ / Entender o operador de seleção do PostgreSQL - sql, postgresql

Entendendo o operador de seleção do PostgreSQL - sql, postgresql

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 № 1

O 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;