非互換
継承テーブルに対しUPDATE、DELETE、MERGEコマンドを実行した際に、更新処理の対象から親テーブルが除外される場合でも、メインの処理対象テーブルが親テーブルに変更されます。
Fujitsu Enterprise Postgres 15以前では子テーブルがメインの処理対象とされ、意図しないトリガーなどが起動する場合がありました。
postgres=# CREATE TABLE some_tab (f1 int, f2 int, f3 int, check (f1 < 10) NO INHERIT); CREATE TABLE postgres=# CREATE TABLE some_tab_child () INHERITS(some_tab); CREATE TABLE postgres=# INSERT INTO some_tab_child select i, i+1, 0 from generate_series(1,1000) i; INSERT 0 1000 postgres=# CREATE INDEX ON some_tab_child(f1, f2); CREATE INDEX postgres=# CREATE FUNCTION some_tab_stmt_trig_func() returns trigger as postgres-# $$begin RAISE NOTICE 'updating some_tab'; return NULL; end;$$ postgres-# language plpgsql; CREATE FUNCTION postgres=# CREATE TRIGGER some_tab_stmt_trig postgres-# BEFORE UPDATE ON some_tab EXECUTE FUNCTION some_tab_stmt_trig_func(); CREATE TRIGGER postgres=# UPDATE some_tab set f3 = 11 WHERE f1 = 12 and f2 = 13; UPDATE 1
postgres=# CREATE TABLE some_tab (f1 int, f2 int, f3 int, check (f1 < 10) NO INHERIT); CREATE TABLE postgres=# CREATE TABLE some_tab_child () INHERITS(some_tab); CREATE TABLE postgres=# INSERT INTO some_tab_child select i, i+1, 0 from generate_series(1,1000) i; INSERT 0 1000 postgres=# CREATE INDEX ON some_tab_child(f1, f2); CREATE INDEX postgres=# CREATE FUNCTION some_tab_stmt_trig_func() returns trigger as postgres-# $$begin RAISE NOTICE 'updating some_tab'; return NULL; end;$$ postgres-# language plpgsql; CREATE FUNCTION postgres=# CREATE TRIGGER some_tab_stmt_trig postgres-# BEFORE UPDATE ON some_tab EXECUTE FUNCTION some_tab_stmt_trig_func(); CREATE TRIGGER postgres=# UPDATE some_tab set f3 = 11 WHERE f1 = 12 and f2 = 13; NOTICE: updating some_tab UPDATE 1
対処方法
ありません。