Há também a opção de usar
RETURNS TABLE(...)
(conforme descrito no Manual do PostgreSQL
), que eu pessoalmente prefiro: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;
Isso é efetivamente o mesmo que usar
SETOF tablename
, mas declara a estrutura da tabela inline em vez de referenciar um objeto existente, portanto, as junções e tal ainda funcionarão.