【问题标题】:Porting Oracle SQL to PostgreSQL - MERGE INTO将 Oracle SQL 移植到 PostgreSQL - MERGE INTO
【发布时间】:2013-06-19 12:41:30
【问题描述】:

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

【问题讨论】:

  • 没有简单的合并替换。出于原因和可能的解决方案,请查看blogpost
  • 4) connect by --> 递归公用表表达式:postgresql.org/docs/current/static/queries-with.html
  • 老问题,但我不赞成,因为没有解释 MERGE INTO 的作用,以及 OP 想要如何使用它,因此很难得出有意义的答案。跨度>
  • 赞成,因为 MERGE 是 Oracle SQL 中使用非常广泛的命令,这是一个有效的问题,出现了很多。

标签: postgresql


【解决方案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);

【讨论】:

    猜你喜欢
    • 2011-01-17
    • 1970-01-01
    • 2022-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-12
    相关资源
    最近更新 更多