Forudsat at du ved, at det er en udløserfunktion (dvs. RETURNS TRIGGER ), burde dette gøre det:
SELECT tgname, tgrelid::regclass
FROM pg_trigger
WHERE tgfoid = 'func1'::regproc
Hvis func1 er overbelastet, skal du bruge f.eks. tgfoid = 'func1(text,text)'::regprocedure .
Men generelt kan det også forekomme i pg_aggregate eller pg_cast , eller i en visningsdefinition, eller en kontrolbegrænsning eller et dusin andre steder, og du ønsker ikke at skulle tjekke dem alle sammen.
Du kan komme til bunden af dette via pg_depend
, som sporer alle objektafhængigheder i databasen. For eksempel:
SELECT classid::regclass
FROM pg_depend
WHERE refobjid = 'func1'::regproc
Hvis dette returnerer f.eks. pg_attrdef
, så ved du, at det bruges i en kolonnestandard. De andre felter i pg_depend vil fortælle dig præcis hvilken tabel/kolonne det er. Bemærk, at et opkald fra en anden funktion ikke anses for at være en afhængighed, så du skal stadig tjekke pg_proc.prosrc .
Men der er en enklere måde at spore de fleste afhængigheder på:
BEGIN;
DROP FUNCTION func1();
ROLLBACK;
Hvis func1 bliver brugt, DROP vil (sandsynligvis) mislykkes, og fejlen vil fortælle dig præcis hvor.
Endnu nemmere, hvis du har en skal ved hånden:Bare for at køre pg_dump --schema-only og se hvor func1 dukker op.