1

更新トリガーで構成されたテーブルが何百もあります。より良いアプローチは何でしょうか
。1。トリガーコード(ロジックはすべてのテーブルで同じ)がテーブルに固有であるテーブルごとのトリガー関数を作成します。
2.動的SQLステートメントを作成してすべてのテーブルを処理することを認識しているグローバル関数を作成し、それをすべてのテーブルのトリガー関数として構成します。

グローバル関数は各呼び出しでテーブル名によって動的にsqlステートメントを作成する必要がある一方で、pgsqlはプリコンパイルして関数を再利用できるため、テーブルごとの関数がより高速に動作するかどうか疑問に思いました。
より明確にするために、テーブルごとの関数でTableAに記述できます。

insert into log_table values('TableA', x, y, z)    

グローバルなものでは、私はそれを次のように書く必要があります:

EXECUTE 'insert into log_table values(' || current_table || ', x, y, z)'
4

1 に答える 1

1

実行プランのキャッシュのため、動的SQLを使用しない方がよい場合があります。

こちらの「39.10.2。プランキャッシング」のセクションを参照してください

ただし、実際のテストでのみ、パフォーマンスの違いが示されます。

于 2012-12-08T12:48:15.337 に答える