将Oracle SQL移植到PostgreSQL-合并到

将Oracle SQL移植到PostgreSQL-合并到,postgresql,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... 我目前

这些天我主要做的是将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手册,有趣的是,似乎没有任何
合并到
语句中(或直接替换它)


我知道PL/pgSQL可以作为一种替代方法,但这对我来说意味着额外的工作量。这方面我有什么遗漏吗?

没有简单的替代品,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);

没有简单的合并替换。出于原因和可能的解决方案,请检查此项。4)
connectby
-->递归公共表表达式:可能与旧问题重复,但我投反对票,因为没有解释
合并到
中的功能以及OP希望如何使用它,因此很难给出有意义的答案。向上投票,因为MERGE是oraclesql中使用非常广泛的命令,这是一个经常出现的有效问题。