Angenommen, Sie wissen, dass es sich um eine Triggerfunktion handelt (z. B. RETURNS TRIGGER
), das sollte es tun:
SELECT tgname, tgrelid::regclass
FROM pg_trigger
WHERE tgfoid = 'func1'::regproc
Wenn func1
überlastet ist, müssten Sie z.B. tgfoid = 'func1(text,text)'::regprocedure
.
Aber im Allgemeinen kann es auch in pg_aggregate
erscheinen , oder pg_cast
, oder in einer Ansichtsdefinition, einer Check-Einschränkung oder einem Dutzend anderer Stellen, und Sie möchten sie nicht alle überprüfen müssen.
Sie können dem über pg_depend
, die alle Objektabhängigkeiten in der Datenbank verfolgt. Zum Beispiel:
SELECT classid::regclass
FROM pg_depend
WHERE refobjid = 'func1'::regproc
Wenn dies z.B. pg_attrdef
, dann wissen Sie, dass es in einem Spaltenstandard verwendet wird. Die anderen Felder in pg_depend
wird Ihnen genau sagen, um welche Tabelle/Spalte es sich handelt. Beachten Sie, dass ein Aufruf von einer anderen Funktion nicht als Abhängigkeit betrachtet wird, daher müssen Sie trotzdem pg_proc.prosrc
überprüfen .
Aber es gibt einen einfacheren Weg, die meisten Abhängigkeiten aufzuspüren:
BEGIN;
DROP FUNCTION func1();
ROLLBACK;
Wenn func1
verwendet wird, der DROP
wird (wahrscheinlich) fehlschlagen, und der Fehler wird Ihnen genau sagen, wo.
Noch einfacher, wenn Sie eine Shell zur Hand haben:Einfach pg_dump --schema-only
ausführen und sehen Sie, wo func1
auftaucht.