Ако приемем, че знаете, че това е задействаща функция (т.е. RETURNS TRIGGER
), това трябва да го направи:
SELECT tgname, tgrelid::regclass
FROM pg_trigger
WHERE tgfoid = 'func1'::regproc
Ако func1
е претоварен, ще трябва да използвате напр. tgfoid = 'func1(text,text)'::regprocedure
.
Но като цяло може да се появи и в pg_aggregate
, или pg_cast
, или в дефиниция на изглед, или ограничение за проверка, или дузина други места и не искате да трябва да ги проверявате всички.
Можете да стигнете до дъното на това чрез pg_depend
, който проследява всички зависимости на обекти в базата данни. Например:
SELECT classid::regclass
FROM pg_depend
WHERE refobjid = 'func1'::regproc
Ако това се върне напр. pg_attrdef
, тогава знаете, че се използва в колона по подразбиране. Другите полета в pg_depend
ще ви каже точно коя таблица/колона е. Обърнете внимание, че извикването от друга функция не се счита за зависимост, така че все пак трябва да проверите pg_proc.prosrc
.
Но има по-лесен начин за проследяване на повечето зависимости:
BEGIN;
DROP FUNCTION func1();
ROLLBACK;
Ако func1
се използва, DROP
(вероятно) ще се провали и грешката ще ви каже точно къде.
Дори по-лесно, ако имате подръка обвивка:Само за да стартирате pg_dump --schema-only
и вижте къде func1
се появява.