/ / Understanding PostgreSQL wählen Sie den Operator - sql, postgresql

Grundlegendes zum PostgreSQL-Auswahloperator - sql, postgresql

Ich schreibe die folgende gespeicherte Prozedur:

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();

Und wenn ich versuche, das Skript auszuführen, habe ich den Fehler:

column reference "id" is ambiguous

Warum? Ich dachte, dass id Spalte der zurückgegebenen Tabelle ist nicht am Auswahloperator beteiligt ...

Das Problem ist, dass es funktioniert hat PostgreSQL 8.4 aber arbeitet nicht weiter PosgtreSQL 9.4. Könnten Sie nicht erklären, was tatsächlich in der PostgreSQL 9.4 also funktioniert es nicht?

Antworten:

3 für die Antwort № 1

Postgres ist verwirrt, wenn Sie die gleichen Namen für Argumente und Spalten verwenden ... Erwägen Sie die Verwendung einer Konvention mit einem Präfix für alle Eingabeparameter - zum Beispiel p_id Ich würde schreiben:

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 für die Antwort № 2

Um dieses spezielle Problem zu lösen, würden Sie dies in Ihrer Auswahl tun:

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