0

最近私が主に行っていることは、Oracle SQL データベースを PostgreSQL (9.1.6) データベースに変換することです。

私が遭遇する傾向がある最も一般的な問題は次のとおりです。

1. decode --> case when
2. nvl --> coalesce
3. (+) --> outer join
4. connect by prior --> connectby function with tablefunc contrib module.
5. merge into --> ???
etc...

私は現在、PostgreSQL のマニュアルをざっと読んでいますが、おかしなことに、MERGE INTOステートメント (またはその直接の置換) がないようです。

PL/pgSQL を代替手段として使用できることは承知していますが、それは私にとって多くの余分な作業負荷を意味します。これについて私が見逃しているものはありますか?

4

1 に答える 1

1

単純な代替品はなく、9.1 の場合もありません。

最善の選択肢は、9.2 にアップグレードして、書き込み可能な CTE を確認することです。これらにより、同様の方法で多段階の書き込み操作が可能になります。たとえば、次のことができます。

WITH up (UPDATE foo set bar = 'baz' where id > 1000
         returning id)
INSERT INTO foo(id, bar) 
SELECT s, 'baz'
  FROM generate_sequence(1001, 10000) s
 WHERE s NOT IN (select id from up);
于 2013-10-26T15:15:15.967 に答える