将Oracle SQL移植到PostgreSQL - MERGE INTO

时间:2013-06-19 12:41:31

标签: postgresql

这些天我最常做的是将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作为替代方案,但这对我来说意味着很多额外的工作量。我有什么遗漏吗?

1 个答案:

答案 0 :(得分: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);