Zakładając, że wiesz, że jest to funkcja wyzwalacza (np. RETURNS TRIGGER
), to powinno wystarczyć:
SELECT tgname, tgrelid::regclass
FROM pg_trigger
WHERE tgfoid = 'func1'::regproc
Jeśli func1
jest przeciążony, trzeba by użyć m.in. tgfoid = 'func1(text,text)'::regprocedure
.
Ale ogólnie może również pojawić się w pg_aggregate
lub pg_cast
, lub w definicji widoku, lub w ograniczeniu sprawdzającym, lub w kilkunastu innych miejscach, a nie chcesz sprawdzać ich wszystkich.
Możesz przejść do sedna tego poprzez pg_depend
, który śledzi wszystkie zależności obiektów w bazie danych. Na przykład:
SELECT classid::regclass
FROM pg_depend
WHERE refobjid = 'func1'::regproc
Jeśli to zwróci np. pg_attrdef
, wiesz, że jest używany w domyślnej kolumnie. Pozostałe pola w pg_depend
powie dokładnie, która to tabela/kolumna. Zauważ, że wywołanie z innej funkcji nie jest uważane za zależność, więc nadal musisz sprawdzić pg_proc.prosrc
.
Istnieje jednak prostszy sposób na wyśledzenie większości zależności:
BEGIN;
DROP FUNCTION func1();
ROLLBACK;
Jeśli func1
jest używany, DROP
(prawdopodobnie) się nie powiedzie, a błąd powie dokładnie, gdzie.
Jeszcze łatwiej, jeśli masz pod ręką powłokę:wystarczy uruchomić pg_dump --schema-only
i zobacz gdzie func1
pojawia się.