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.