PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como verificar qual função usa um tipo?


Você pode encontrar todas as dependências no catálogo do sistema pg_depend .

Isso retorna todas as funções dependendo do tipo . Ou seja não apenas aqueles com o tipo no RETURNS cláusula, mas também aqueles com o tipo como parâmetro de função:
SELECT objid::regproc                            AS function_name
     , pg_get_functiondef(objid)                 AS function_definition
     , pg_get_function_identity_arguments(objid) AS function_args
     , pg_get_function_result(objid)             AS function_returns
FROM   pg_depend
WHERE  refclassid = 'pg_type'::regclass
AND    refobjid   = 'my_type'::regtype    -- insert your type name here
AND    classid    = 'pg_proc'::regclass;  -- only find functions

Isso também funciona para funções de tabela:
...
RETURNS TABLE (foo my_type, bar int)

Usando funções de informações do catálogo do sistema .

Pode haver outras dependências (não para funções). Remova o último WHERE condição da minha consulta para testar (e adaptar o SELECT lista, obviamente).

E ainda existe a possibilidade do tipo ser usado explicitamente (em um cast por exemplo) em consultas no corpo da função ou em SQL dinâmico. Você só pode identificar esses casos de uso analisando o texto do corpo da função. Não há dependências explícitas registradas no sistema.

Relacionado: