ページの先頭行へ戻る
Enterprise Postgres 17 リリース情報

2.3.154 ALTER TABLE ONLY ... ENABLE/DISABLE TRIGGERが子テーブルを再帰的に処理しないように変更

非互換

FUJITSU Enterprise Postgres 13では、ALTER TABLE ONLY ... ENABLE/DISABLE TRIGGER が子テーブルを再帰的に処理しないように変更しました。

FUJITSU Enterprise Postgres 12以前の場合

「ONLY」が無視されて、子テーブルまで再帰的に処理されます。

[例]

=# create table parent (a int) partition by list (a);
=# create table child1 partition of parent for values in (1);
=# create trigger tg after insert on parent
-#   for each row execute procedure trig_nothing();
=# select tgrelid::regclass, tgname, tgenabled from pg_trigger
-#   where tgrelid in ('parent'::regclass, 'child1'::regclass)
-#  order by tgrelid::regclass::text;
 tgrelid | tgname | tgenabled 
---------+--------+-----------
 child1  | tg     | O
 parent  | tg     | O
(2 row)
=# alter table only parent enable always trigger tg;
=# select tgrelid::regclass, tgname, tgenabled from pg_trigger
-#  where tgrelid in ('parent'::regclass, 'child1'::regclass)
-#  order by tgrelid::regclass::text;
 tgrelid | tgname | tgenabled 
---------+--------+-----------
 child1  | tg     | A
 parent  | tg     | A
(2 row)
FUJITSU Enterprise Postgres 13の場合

子テーブルを再帰的に処理しません。

[例]

=# create table parent (a int) partition by list (a);
=# create table child1 partition of parent for values in (1);
=# create trigger tg after insert on parent
-#   for each row execute procedure trig_nothing();
=# select tgrelid::regclass, tgname, tgenabled from pg_trigger
-#   where tgrelid in ('parent'::regclass, 'child1'::regclass)
-#  order by tgrelid::regclass::text;
 tgrelid | tgname | tgenabled 
---------+--------+-----------
 child1  | tg     | O
 parent  | tg     | O
(2 row)
=# alter table only parent enable always trigger tg;
=# select tgrelid::regclass, tgname, tgenabled from pg_trigger
-#  where tgrelid in ('parent'::regclass, 'child1'::regclass)
-#  order by tgrelid::regclass::text;
 tgrelid | tgname | tgenabled 
---------+--------+-----------
 child1  | tg     | O
 parent  | tg     | A
(2 rows)

対処方法

必要に応じて、「only」を削除してください。