Suponiendo que sepa que es una función de activación (es decir, RETURNS TRIGGER
), esto debería hacerlo:
SELECT tgname, tgrelid::regclass
FROM pg_trigger
WHERE tgfoid = 'func1'::regproc
Si func1
está sobrecargado, necesitaría usar p. tgfoid = 'func1(text,text)'::regprocedure
.
Pero, en general, también puede aparecer en pg_aggregate
o pg_cast
, o en una definición de vista, o en una restricción de verificación, o en una docena de otros lugares, y no desea tener que verificarlos todos.
Puede llegar al fondo de esto a través de pg_depend
, que rastrea todas las dependencias de objetos en la base de datos. Por ejemplo:
SELECT classid::regclass
FROM pg_depend
WHERE refobjid = 'func1'::regproc
Si esto vuelve, p. pg_attrdef
, entonces sabe que se usa en una columna predeterminada. Los otros campos en pg_depend
le dirá exactamente qué tabla/columna es. Tenga en cuenta que una llamada desde otra función no se considera una dependencia, por lo que aún debe verificar pg_proc.prosrc
.
Pero hay una forma más sencilla de rastrear la mayoría de las dependencias:
BEGIN;
DROP FUNCTION func1();
ROLLBACK;
Si func1
se está utilizando, el DROP
(probablemente) fallará, y el error le dirá exactamente dónde.
Aún más fácil, si tiene un shell a mano:solo para ejecutar pg_dump --schema-only
y ver donde func1
aparece.