Förutsatt att du vet att det är en triggerfunktion (dvs. RETURNS TRIGGER
), borde detta göra det:
SELECT tgname, tgrelid::regclass
FROM pg_trigger
WHERE tgfoid = 'func1'::regproc
Om func1
är överbelastad skulle du behöva använda t.ex. tgfoid = 'func1(text,text)'::regprocedure
.
Men i allmänhet kan det också visas i pg_aggregate
, eller pg_cast
, eller i en vydefinition, eller en kontrollbegränsning, eller ett dussin andra platser, och du vill inte behöva kontrollera dem alla.
Du kan komma till botten med detta via pg_depend
, som spårar alla objektberoenden i databasen. Till exempel:
SELECT classid::regclass
FROM pg_depend
WHERE refobjid = 'func1'::regproc
Om detta returnerar t.ex. pg_attrdef
, då vet du att den används i en kolumnstandard. De andra fälten i pg_depend
kommer att berätta exakt vilken tabell/kolumn det är. Observera att ett anrop från en annan funktion inte anses vara ett beroende, så du måste fortfarande kontrollera pg_proc.prosrc
.
Men det finns ett enklare sätt att spåra de flesta beroenden:
BEGIN;
DROP FUNCTION func1();
ROLLBACK;
Om func1
används, DROP
kommer (förmodligen) att misslyckas, och felet kommer att berätta exakt var.
Ännu enklare, om du har ett skal till hands:Bara för att köra pg_dump --schema-only
och se var func1
dyker upp.