首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Postgres 10中的分区表中插入带有onConflict子句的多行

问在Postgres 10中的分区表中插入带有onConflict子句的多行
EN

Stack Overflow用户
提问于 2019-02-06 20:11:06
回答 1查看 1.3K关注 0票数 0

我在Postgres 10中有如下声明:

代码语言:javascript
复制
INSERT INTO my_table(A, B)
       VALUES (val_A1, val_B1),
              ...
              (val_A99, val_B99)
       ON CONFLICT DO NOTHING;

它运行得很好,但后来我对我的表进行了分区,然后这个语句开始失败:

代码语言:javascript
复制
org.postgresql.util.PSQLException: ERROR: 
ON CONFLICT clause is not supported with partitioned tables

As Postgres 10 不支持分区表上的冲突子句

在分区表中使用ON冲突子句将导致错误,因为只有在单个分区上才能创建唯一或排除约束。不支持在整个分区层次结构中强制执行唯一性(或排除约束)。

如果我插入一个行,我可以尝试插入并控制错误,如果记录已经在那里,可以尝试捕捉。

但是,既然我要插入多个值,除了这个值,我还有什么选择:

代码语言:javascript
复制
INSERT INTO my_table
       SELECT T.A, T.B
       FROM (VALUES(val_A1, val_B1), 
                   ...,
                   (val_A99, val_B99)) AS T(A, B),
       WHERE NOT EXISTS (
           SELECT 1 FROM my_table AS T2
                    WHERE T2.A = T.A
                      AND T2.B = T.B
       );
EN

回答 1

Stack Overflow用户

发布于 2019-02-06 20:31:40

您的最佳选择是升级到PostgreSQL v11,这将在那里工作。

PostgreSQL v11支持分区表上的PRIMARY KEY和UNIQUE约束(如果分区键是索引的一部分),这是INSERT ... ON CONFLICT的必要条件。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54561783

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档