非互換
Fujitsu Enterprise Postgres 17 SP1では、WHEN NOT MATCHED BY SOURCEを指定したMERGEの結果を変更します。
postgres=# CREATE TABLE src (a int, b text); CREATE TABLE tgt (a int, b text); postgres=# INSERT INTO src VALUES (1, 'src row'); INSERT 0 1 postgres=# CREATE TABLE tgt (a int, b text); CREATE TABLE postgres=# INSERT INTO tgt VALUES (NULL, 'tgt row'); INSERT 0 1 postgres=# MERGE INTO tgt USING src ON tgt.a IS NOT DISTINCT FROM src.a postgres-# WHEN MATCHED THEN UPDATE SET a = src.a, b = src.b postgres-# WHEN NOT MATCHED BY SOURCE THEN DELETE postgres-# RETURNING merge_action(), src.*, tgt.*; merge_action | a | b | a | b --------------+---+---+---+--- UPDATE | | | | (1 row) MERGE 1 postgres=# SELECT * FROM tgt; a | b ---+--- | (1 row)
postgres=# MERGE INTO tgt USING src ON tgt.a IS NOT DISTINCT FROM src.a postgres-# WHEN MATCHED THEN UPDATE SET a = src.a, b = src.b postgres-# WHEN NOT MATCHED BY SOURCE THEN DELETE postgres-# RETURNING merge_action(), src.*, tgt.*; merge_action | a | b | a | b --------------+---+---+---+--------- DELETE | | | | tgt row (1 row) MERGE 1 postgres=# SELECT * FROM tgt; a | b ---+--- (0 rows)
対処方法
ありません。