それがトリガー関数であることがわかっていると仮定します(つまり、RETURNS TRIGGER
)、これでうまくいくはずです:
SELECT tgname, tgrelid::regclass
FROM pg_trigger
WHERE tgfoid = 'func1'::regproc
func1
の場合 が過負荷の場合、たとえばを使用する必要があります。 tgfoid = 'func1(text,text)'::regprocedure
。
ただし、一般的には、pg_aggregate
にも表示される場合があります。 、またはpg_cast
、またはビュー定義、チェック制約、またはその他の12の場所で、それらすべてをチェックする必要はありません。
pg_depend
、データベース内のすべてのオブジェクトの依存関係を追跡します。例:
SELECT classid::regclass
FROM pg_depend
WHERE refobjid = 'func1'::regproc
これが戻った場合、例えば pg_attrdef
、そしてあなたはそれが列のデフォルトで使用されていることを知っています。 pg_depend
の他のフィールド それがどのテーブル/列であるかを正確に教えてくれます。別の関数からの呼び出しは依存関係とは見なされないため、pg_proc.prosrc
を確認する必要があることに注意してください。 。
しかし、依存関係の大部分を追跡する簡単な方法があります:
BEGIN;
DROP FUNCTION func1();
ROLLBACK;
func1
の場合 使用されている場合、DROP
(おそらく)失敗し、エラーによって正確な場所がわかります。
シェルが手元にあれば、さらに簡単です。pg_dump --schema-only
を実行するだけです。 func1
の場所を確認してください 現れます。