Qual é a maneira mais fácil de retornar um conjunto de registros de um procedimento armazenado do PostgreSQL?

Eu simplesmente tenho uma tabela que contém uma lista de países e seus códigos de país ISO. Estou envolvendo a consulta em um procedimento armazenado (também conhecido como function) como:

CREATE OR REPLACE FUNCTION get_countries(
                    ) RETURNS setof record AS $
        SELECT country_code, country_name FROM country_codes
$ LANGUAGE sql;

O erro que estou recebendo é:

ERROR:  a column definition list is required for functions returning "record"

Eu sei que eu posso definir um tipo e, em seguida, percorrer o conjunto de registros como um cursor, mas IIRC há uma maneira melhor de fazer isso em versões mais recentes do PostgreSQL (estou usando 8.4.3), mas estou puxando meu cabelo para fora tentando lembrar.

Editar:

Isso funciona:

CREATE OR REPLACE FUNCTION get_countries(
                    ) RETURNS setof country_codes AS $
        SELECT country_code, country_name FROM country_codes
$ LANGUAGE sql;

Observe o "RETURNS setof [nome da tabela]". Mas não parece ser o mais flexível. Ele se desfaz se eu tentar retornar uma junção de várias tabelas.

questionAnswers(2)

yourAnswerToTheQuestion