/ / Comprendere l'operatore di selezione PostgreSQL - sql, postgresql

Comprendere l'operatore di selezione PostgreSQL - sql, postgresql

Sto scrivendo la seguente stored procedure:

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 sto cercando di eseguire quello script ho ricevuto l'errore:

column reference "id" is ambiguous

Perché? Pensavo che id la colonna della tabella restituita non partecipa all'operatore di selezione ...

Il problema è che ha funzionato PostgreSQL 8.4 ma non funziona PosgtreSQL 9.4. Non potresti spiegare cosa sia stato effettivamente aggiunto nel PostgreSQL 9.4 quindi non funziona?

risposte:

3 per risposta № 1

Postgres è confuso quando usi gli stessi nomi per argomenti e colonne ... Considera l'uso di una convenzione con un certo prefisso per tutti i parametri di input, ad esempio p_id Vorrei scrivere:

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 per risposta № 2

Per risolvere quel problema specifico lo farebbe nella selezione:

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