Il est également possible d'utiliser RETURNS TABLE(...)
(comme décrit dans le Manuel PostgreSQL
), que je préfère personnellement :
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;
C'est effectivement la même chose que d'utiliser SETOF tablename
, mais déclare la structure de la table en ligne au lieu de faire référence à un objet existant, donc les jointures et autres fonctionneront toujours.