当前位置: 首页 > 知识库问答 >
问题:

POSTGRES-处理多个冲突约束/索引

景辰钊
2023-03-14

在表格中列出以下内容:

CONSTRAINT unique_position UNIQUE (id,city,type)

CREATE UNIQUE INDEX unique_position_sat_null ON public."position" (id,city) where type is null

关于插入冲突,目前有:

ON CONFLICT ON CONSTRAINT unique_position DO UPDATE SET
        .....

我如何将unique_position和unique_position_sat_null纳入《关于冲突的约束》

尝试:

ON CONFLICT ON CONSTRAINT unique_position DO UPDATE SET
            .....,
ON CONFLICT ON CONSTRAINT unique_position_sat_null DO UPDATE SET
            .....,

ON CONFLICT ON CONSTRAINT unique_position and unique_position_sat_null  DO UPDATE SET
            .....,

非常感谢。

共有1个答案

邴和雅
2023-03-14

不幸的是,在Postgres中,唯一索引和唯一约束不是一回事。

定义唯一索引而不是约束时,Postgres不会创建具有相同名称的约束(在插入过程中发生冲突的情况下,它会在提到索引名称时产生错误“唯一约束冲突”,但这是一个小错误,请参阅)https://www.postgresql.org/message-id/flat/CAH2-Wzn-uXcLgC5uFbqe2rUfmJWP9AxKnMKAEgqU26hbURxk5A@邮件。gmail。com#CAH2 Wzn-uXcLgC5uFbqe2rUfmJWP9AxKnMKAEgqU26hbURxk5A@mail.gmail.com)

因此,不能像使用约束名称一样使用索引名称。

您可以执行ALTER TABLE... ADD CONSTRAINT... UniQUE,但它不能是唯一的。

所以这可以被认为是Postgres中尚未实现的一个特性——要么“ON CONFLICT”子句需要学习如何使用索引名,要么修改表。。添加约束。。需要对UNIQUE进行修补,以允许部分约束。

我建议在pgsql-hacker@邮件列表中讨论它(例如,如果你回答上面提到的线程,解释你的问题,这将是真棒)。

 类似资料:
  • 我想用插页。。请务必更新。。对两列具有唯一约束的表的语法。这可能吗? mytable对col1和col2有单独的唯一约束。 我可以写: 然而,这不起作用: 错误:冲突时,更新是否需要推理规范或约束名称 这也不起作用: 错误:不存在与冲突规范匹配的唯一或排除约束 这种语法似乎是为两列上的单一复合唯一约束而设计的,而不是两个约束。 如果违反了其中一个唯一约束,有没有办法进行条件更新?这个问题是如何在博

  • 我有一个Spring MVC应用程序,它使用Spring Data JPA作为我的JPA提供者来持久化Hibernate。我有一个数据库表,在列上有一个唯一的约束,因此为什么保存相应的实体可能会导致唯一的约束冲突。我想检测这是否发生在我的服务层中,以便我可以向用户呈现有意义的错误消息。以下是我的服务方法。 我的Spring Data JPA存储库看起来像这样: 现在,当发生唯一的约束冲突时,我得到

  • 我的桌子有两个独特的列: 我想写保存或更新方法 My jooq code: 但我遇到了异常: “错误:没有唯一或排除约束匹配ON CONFLICT规范” 请帮助。

  • 我有一个用户创建屏幕,它记录了各种用户详细信息以及名字和手机号码。我有一个对应的用户表,其中名字和手机号码构成一个复合唯一键。此表中还定义了其他完整性约束。 当在创建用户屏幕上输入违反此约束的用户数据时,需要向用户显示“用户友好”错误消息。 当这种违反发生时,我从MySQL数据库中得到的异常是: 有两个选项可以显示有意义的消息(例如:“错误:给定手机号码的用户名已存在,请更改其中一个”)。 选项1

  • 我见过其他的链接错误,但没有一个能说明如何使用罐子。当我在Jboss中部署我的应用程序时,它可以正常工作,但当我将应用程序部署到websphere时,我遇到了这种链接错误。在这里可以找到一个类似的问题:调用webservice方法时出现LinkageError,但不确定如何修复它 它主要是从和加载的,带有共享类 我所拥有的是jsp调用Web服务。从消息中,我看到的唯一jars来自axis.jar,

  • 我在WebSphereApplicationServer(8.5.5.14)中遇到了LinkageError。这里也发现了类似的问题LinkageError 原因:java。lang.LinkageError:解析方法“javax/xml/soap/SOAPElement.getElementQName()Ljavax/xml/namespace/QName;”时加载约束冲突:loader“com