web-dev-qa-db-ja.com

複数のテーブルに1つのトリガー

postgreSql 9.1に、いくつかのテーブルの挿入時に起動したいトリガーがあります。これらすべてのテーブルのトリガーを作成する代わりに、これらすべてのテーブルに影響を与えることは可能ですか?トリガー関数を呼び出しているのと同じ挿入トリガーを使用したい58のテーブルがあるので、

create trigger tuweke 
after insert on product 
for each row execute procedure tuwekeAdjustextract(); 
create trigger tuweke 
after insert on caneweightment 
for each row execute procedure tuwekeAdjustextract(); 
...

これらすべてのテーブルに対してこれを行うと、複数のスキーマが存在するため、ワークロードが多くなり、これを1つのクエリで実行できますか次に、そのスキーマのすべてのテーブルまたはデータベース全体に影響を与えますか?

5
indago

そのようなオプションはありません。トリガーはテーブルに属し、それはそれです。ただし、すべてのトリガーが同じ手順を使用している場合は、すべてのCREATE TRIGGERステートメントを使用して、Niceテキスト出力を簡単に生成できます。必要なのは、目的のテーブル名を収集してから、必要な部分を先頭に追加して追加することだけです。

次のようなクエリを使用して、特定のスキーマからすべてのテーブル名を取得できます。

SELECT p.tablename
FROM pg_tables p
WHERE p.schemaname = 'public'
;

ここで選択した場合

'CREATE TRIGGER tuweke 
AFTER INSERT ON ' || p.tablename || '
FOR EACH ROW EXECUTE PROCEDURE tuwekeAdjustextract();
'

p.tablenameの代わりに準備が整いました。出力をコピーして実行します。

8
dezso