Supponendo che tu sappia che è una funzione di attivazione (ad esempio RETURNS TRIGGER
), questo dovrebbe farlo:
SELECT tgname, tgrelid::regclass
FROM pg_trigger
WHERE tgfoid = 'func1'::regproc
Se func1
è sovraccarico, dovresti usare ad es. tgfoid = 'func1(text,text)'::regprocedure
.
Ma in generale, potrebbe anche apparire in pg_aggregate
o pg_cast
, o in una definizione di vista, o in un vincolo di controllo o in una dozzina di altri posti e non vuoi doverli controllare tutti.
Puoi andare fino in fondo tramite pg_depend
, che tiene traccia di tutte le dipendenze degli oggetti nel database. Ad esempio:
SELECT classid::regclass
FROM pg_depend
WHERE refobjid = 'func1'::regproc
Se questo ritorna ad es. pg_attrdef
, allora sai che è usato in una colonna predefinita. Gli altri campi in pg_depend
ti dirà esattamente quale tabella/colonna è. Nota che una chiamata da un'altra funzione non è considerata una dipendenza, quindi devi comunque controllare pg_proc.prosrc
.
Ma c'è un modo più semplice per rintracciare la maggior parte delle dipendenze:
BEGIN;
DROP FUNCTION func1();
ROLLBACK;
Se func1
viene utilizzato, il DROP
(probabilmente) fallirà e l'errore ti dirà esattamente dove.
Ancora più semplice, se hai una shell a portata di mano:solo per eseguire pg_dump --schema-only
e guarda dove func1
si presenta.