PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come verificare quale funzione utilizza un tipo?

Puoi trovare tutte le dipendenze nel catalogo di sistema pg_depend .

Questo restituisce tutte le funzioni a seconda del tipo . Cioè. non solo quelli con il tipo in RETURNS clausola, ma anche quelli con il tipo come parametro di funzione:

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

Funziona anche per le funzioni tabella:

...
RETURNS TABLE (foo my_type, bar int)

Utilizzo di funzioni di informazione del catalogo di sistema .

Potrebbero esserci altre dipendenze (non alle funzioni). Rimuovi l'ultimo WHERE condizione dalla mia query per testare (e adattare il SELECT lista, ovviamente).

E c'è ancora la possibilità che il tipo venga utilizzato in modo esplicito (ad esempio in un cast) nelle query nel corpo della funzione o nell'SQL dinamico. È possibile identificare tali casi d'uso solo analizzando il testo del corpo della funzione. Non ci sono dipendenze esplicite registrate nel sistema.

Correlati: