Ако приемем, че знаете, че това е задействаща функция (т.е. 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 се появява.