OracleのMERGE文をPostgreSQLに変更する方法

postgresqlのmergeinto書き方 postgreSQL

OracleではMERGE文が利用できますが、PostgreSQLではMERGE文は存在しません。
Oracleで開発したMERGE文をPostgreSQLに変更するとき、以下の変更方法で実現できます。

OracleのMERGE INTO

MERGE INTO tb_test e
USING tb_test_tmp u ON (e.user_id = u.user_id)
  WHEN MATCHED THEN
    UPDATE SET e.user_name = u.user_name, e.age = u.age
  WHEN NOT MATCHED THEN
    INSERT VALUES ( u.user_id, u.user_name, u.age);

PostgreSQLの書き方(パーティションなし)

INSERT INTO tb_test
SELECT * FROM tb_test_tmp
ON CONFLICT (キー)
DO  UPDATE SET user_name = excluded.user_name,age = excluded.age;

PostgreSQLの書き方(パーティションあり)

WHEN insrt AS (SELECT * FROM tb_test_tmp),
     updt AS (UPDATE tb_test
           SET user_name = insrt.user_name,age = insrt.age
           FROM  insrt  WHERE tb_test.user_id=insrt.user_id RETURNING tb_test.user_id)
INSERT INTO tb_test
(SELECT * FROM insrt WHERE user_id NOT IN (SELECT user_id FROM updt));
タイトルとURLをコピーしました