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.