No PostgreSQL, a RETURNS
palavra-chave exige que você especifique o tipo exato que a função retorna. Isso pode ser um incômodo quando esse tipo é o resultado de uma consulta com vários JOINs, pois você acaba tendo que criar manualmente um TABLE
tipo com cada coluna de cada tabela JOIN-ed. Se você se juntou employees
com profiles
and jobs
, agora você tem que listar todas as três colunas da tabela:
RETURNS TABLE(
-- employees field #1
-- employees field #2
-- employees field etc.
-- ... profiles fields
-- ... jobs fields
)
Existe algum tipo de atalho para evitar isso e apenas dizer ao PostgreSQL "retorne o que a consulta retornar; não se preocupe com o tipo"? Eu descobri que o PostgreSQL tem um any
tipo ... mas ele não parece deixar você usá-lo em uma RETURNS
cláusula.
Caso contrário, existe alguma maneira de criar tipos combinando outros tipos (por exemplo, o JOIN_TABLE(employees, profiles, jobs)
tipo) ou criar tipos a partir de tabelas existentes (por exemplo, TABLE(...employees, integer job_id)
)?
Não, não há atalho aqui. Você tem que enumerar os tipos de dados na
RETURNS
cláusula (ou na definição de um tipo de dado composto que você usa emRETURNS
).Você pode usar os nomes das tabelas como tipos compostos e colocar ambos em um único arquivo
RETURNS TABLE
.Por exemplo:
Você acessa assim (observe os colchetes)
db<>violino