C'è anche la possibilità di usare RETURNS TABLE(...)
(come descritto nel Manuale di PostgreSQL
), che personalmente preferisco:
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;
Questo è effettivamente lo stesso che usare SETOF tablename
, ma dichiara la struttura della tabella inline invece di fare riferimento a un oggetto esistente, quindi i join e simili continueranno a funzionare.