Para esclarecer o problema que estou tendo, estou escrevendo testes de unidade pgtap no banco de dados e uma das minhas funções retorna uma tabela. No entanto, a função pgtap function_returns
não possui uma definição para verificação de tabela e suas colunas (nomes e tipos de dados).
Estas são todas as sobrecargas da função:
SELECT function_returns( :schema, :function, :args, :type, :description );
SELECT function_returns( :schema, :function, :args, :type );
SELECT function_returns( :schema, :function, :type, :description );
SELECT function_returns( :schema, :function, :type );
SELECT function_returns( :function, :args, :type, :description );
SELECT function_returns( :function, :args, :type );
SELECT function_returns( :function, :type, :description );
SELECT function_returns( :function, :type );
Você pode ler a definição completa e o que cada parâmetro representa na documentação oficial
Basicamente, o problema é que :type
não funciona para table
.
Então eu estou querendo saber onde essas funções definidas pelo usuário são salvas no Postgres (tentando escrever minha própria versão e espero contribuir para o projeto pgtap).
Depois de cavar no código-fonte , encontrei a função usada em segundo plano para verificar isso, é chamada_func_compare
CREATE OR REPLACE FUNCTION _func_compare( NAME, NAME, NAME[], anyelement, anyelement, TEXT)
RETURNS TEXT AS $$
SELECT CASE WHEN $4 IS NULL
THEN ok( FALSE, $6 ) || _nosuch($1, $2, $3)
ELSE is( $4, $5, $6 )
END;
$$ LANGUAGE SQL;
E não consigo descobrir como o autor estava verificando a definição de retorno válida da função.
Você pode obter a definição de uma função no
pg_proc
catálogo do sistema.Se
prorettype
is contém orecord
tipo especial, os tipos de retorno reais são os elementos em que a entradaproallargtypes
correspondente é , ou .proargmodes
t
o
b
Esta consulta deve fornecer todas as funções
test
junto com o ID do objeto, os tipos de entrada e os tipos de resultado: