Ervan uitgaande dat u weet dat het een triggerfunctie is (d.w.z. RETURNS TRIGGER ), zou dit het moeten doen:
SELECT tgname, tgrelid::regclass
FROM pg_trigger
WHERE tgfoid = 'func1'::regproc
Als func1 overbelast is, zou u b.v. tgfoid = 'func1(text,text)'::regprocedure .
Maar over het algemeen kan het ook voorkomen in pg_aggregate , of pg_cast , of in een weergavedefinitie, of een controlebeperking, of een tiental andere plaatsen, en je wilt ze niet allemaal moeten controleren.
U kunt dit tot op de bodem uitzoeken via pg_depend
, die alle objectafhankelijkheden in de database bijhoudt. Bijvoorbeeld:
SELECT classid::regclass
FROM pg_depend
WHERE refobjid = 'func1'::regproc
Als dit b.v. pg_attrdef
, dan weet je dat het wordt gebruikt in een standaardkolom. De andere velden in pg_depend zal u precies vertellen welke tabel/kolom het is. Merk op dat een aanroep van een andere functie niet als een afhankelijkheid wordt beschouwd, dus u moet nog steeds pg_proc.prosrc controleren .
Maar er is een eenvoudigere manier om de meeste afhankelijkheden op te sporen:
BEGIN;
DROP FUNCTION func1();
ROLLBACK;
Als func1 wordt gebruikt, de DROP zal (waarschijnlijk) mislukken, en de fout zal u precies vertellen waar.
Nog makkelijker, als je een shell bij de hand hebt:gewoon om pg_dump --schema-only uit te voeren en kijk waar func1 verschijnt.