0

私の PostgreSQL 9.1 データベースには、複数のテーブルと 1 つのトリガー関数があります。

現在、そのトリガー関数を使用して、各テーブルのトリガーを作成しています。

この方法論はうまく機能しています。上司から、そのトリガー関数を再利用してトリガーを共通に (1 回だけ) 作成するように依頼されました。その 1 つのトリガー関数が、データベース内のすべてのテーブルで使用されるはずです。

4

2 に答える 2

2

PL/PgSQL を使用して動的 SQL でトリガーを作成する例は、PostgreSQL の監査トリガーサンプルにあります。同じアプローチは、他の DDL でも機能します。

andの機能audit.audit_tableと使用法を参照formatしてくださいEXECUTE

とは言っても、手続き的にテーブルを作成する必要があるということは、スキーマ設計に問題がある兆候である可能性があります (常にそうとは限りません)。

テーブルを作成する動的 SQL の簡単な例:

CREATE OR REPLACE FUNCTION demo_dynamic_table(tablename text) RETURNS void AS $$                                                                                      
BEGIN                                                                                                                                                                          
    EXECUTE format('CREATE TABLE %I (id serial primary key);', tablename);
END;
$$ LANGUAGE plpgsql;

トリガーの作成などでも同じアプローチが機能します。

于 2013-03-22T10:15:25.563 に答える
0

テーブル作成用の PL/pgSQL プロシージャを作成し、その中にトリガー作成コードを移動できます

于 2013-03-22T10:04:58.063 に答える