Supondo que você saiba que é uma função de gatilho (ou seja,
RETURNS TRIGGER
), Isso deve servir:SELECT tgname, tgrelid::regclass
FROM pg_trigger
WHERE tgfoid = 'func1'::regproc
Se
func1
está sobrecarregado, você precisaria usar, por exemplo, tgfoid = 'func1(text,text)'::regprocedure
. Mas, em geral, também pode aparecer em
pg_aggregate
, ou pg_cast
, ou em uma definição de exibição, ou uma restrição de verificação, ou uma dúzia de outros lugares, e você não quer ter que verificar todos eles. Você pode chegar ao fundo disso em
pg_depend
, que rastreia todas as dependências de objetos no banco de dados. Por exemplo:SELECT classid::regclass
FROM pg_depend
WHERE refobjid = 'func1'::regproc
Se isso retornar, por exemplo
pg_attrdef
, então você sabe que é usado em um padrão de coluna. Os outros campos em pg_depend
irá dizer-lhe exatamente qual é a tabela/coluna. Observe que uma chamada de outra função não é considerada uma dependência, portanto, você ainda precisa verificar pg_proc.prosrc
. Mas há uma maneira mais simples de rastrear a maioria das dependências:
BEGIN;
DROP FUNCTION func1();
ROLLBACK;
Se
func1
está sendo usado, o DROP
irá (provavelmente) falhar, e o erro lhe dirá exatamente onde. Ainda mais fácil, se você tiver um shell à mão:apenas para executar
pg_dump --schema-only
e veja onde func1
aparece.