sql >> データベース >  >> RDS >> PostgreSQL

関数が使用されている場所を見つける方法

    それがトリガー関数であることがわかっていると仮定します(つまり、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の場所を確認してください 現れます。



    1. 列でグループ化された単一のテーブルからのセット

    2. 増分番号で条件を満たすレコードを更新します

    3. チェックボックスデータをmysqlに挿入します

    4. MySQLクエリから返されたPHPの配列をループする