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.