En supposant que vous savez qu'il s'agit d'une fonction de déclenchement (c'est-à-dire RETURNS TRIGGER
), ceci devrait le faire :
SELECT tgname, tgrelid::regclass
FROM pg_trigger
WHERE tgfoid = 'func1'::regproc
Si func1
est surchargé, vous devrez utiliser par ex. tgfoid = 'func1(text,text)'::regprocedure
.
Mais en général, il peut également apparaître dans pg_aggregate
, ou pg_cast
, ou dans une définition de vue, ou une contrainte de vérification, ou une douzaine d'autres endroits, et vous ne voulez pas avoir à les vérifier tous.
Vous pouvez aller au fond de cela via pg_depend
, qui suit toutes les dépendances d'objets dans la base de données. Par exemple :
SELECT classid::regclass
FROM pg_depend
WHERE refobjid = 'func1'::regproc
Si cela revient par ex. pg_attrdef
, alors vous savez qu'il est utilisé dans une colonne par défaut. Les autres champs de pg_depend
vous dira exactement de quelle table/colonne il s'agit. Notez qu'un appel d'une autre fonction n'est pas considéré comme une dépendance, vous devez donc toujours vérifier pg_proc.prosrc
.
Mais il existe un moyen plus simple de retrouver la majorité des dépendances :
BEGIN;
DROP FUNCTION func1();
ROLLBACK;
Si func1
est utilisé, le DROP
échouera (probablement), et l'erreur vous dira exactement où.
Encore plus simple, si vous avez un shell à portée de main :juste pour exécuter pg_dump --schema-only
et voir où func1
apparaît.