Es besteht auch die Möglichkeit, RETURNS TABLE(...)
zu verwenden (wie beschrieben in der PostgreSQL-Handbuch
), was ich persönlich bevorzuge:
CREATE OR REPLACE FUNCTION get_countries()
RETURNS TABLE(
country_code text,
country_name text
)
AS $$
SELECT country_code, country_name FROM country_codes
$$ LANGUAGE sql;
Dies ist praktisch dasselbe wie die Verwendung von SETOF tablename
, deklariert jedoch die Tabellenstruktur inline, anstatt auf ein vorhandenes Objekt zu verweisen, sodass Joins und dergleichen weiterhin funktionieren.