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

Postgers:当使用主键和唯一列时,没有唯一或排除约束匹配CONFLICT规范

巢嘉志
2023-03-14

这是图式

CREATE TABLE instagram_posts (
post_id serial PRIMARY KEY,
user_id int REFERENCES instagram_users ON DELETE RESTRICT,
link TEXT UNIQUE,
caption TEXT, 
num_likes int,
num_comments int,
exsits BOOLEAN NOT NULL DEFAULT TRUE); 

我会尝试调用命令:

INSERT INTO instagram_posts (link,num_likes,user_id) VALUES (%s,%s,(SELECT user_id from instagram_users WHERE user_account=%s)) ON CONFLICT (post_id, link) DO UPDATE SET num_likes=EXCLUDED.num_likes,user_id=EXCLUDED.user_id;

这给了我一个错误:没有唯一或排除约束匹配ON CONFLICT规范

如果我仅将post_id作为约束或仅将链接作为约束(即关于冲突(post_id)或关于冲突(link))而不是两者都包括,则查询可以工作。我想不出这是什么原因。有人知道为什么吗?

共有1个答案

阙星渊
2023-03-14

正是因为它告诉你的原因——你对(post_id,link)没有一个唯一的约束来支持冲突子句。您可以创建这样的约束,但当组成复合键的两个键已经各自唯一时,这似乎毫无意义。可能冲突(链接)正是你想要的,但还不完全清楚你想要实现什么。

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

  • 当执行以下类型的插入时,我得到以下错误: 查询: 错误: SQL执行失败(原因:错误:没有与冲突规范匹配的唯一或排除约束) 我也有一个独特的索引: 问题是它有时有效,但不是每次都有效。我随机得到这个例外,这真的很奇怪。它似乎无法访问该索引,或者不知道它存在。 有什么建议吗? 我使用的是PostgreSQL 9.5.5。 执行试图查找或创建帐户的代码时的示例: 在这种情况下,我确信该帐户不存在。此外

  • 我有一个如下表(字段已编辑为相关部分): 如您所见,我有以下对我的应用程序非常重要的索引。 我想做的是,当我遇到重复错误时,将插入到另一个表中。然而,当我执行sql语句时,我无法克服这个小障碍(如下)。 然而,当我尝试运行这个时,我得到了以下结果: 我读过一些关于这个话题的堆栈溢出问题,但我似乎无法根据需要调整答案。这里的链接是我能找到的最接近的链接 Postgers:当使用主键和唯一列时,没有唯

  • 错误:没有唯一或排除约束匹配ON CONFLICT规范SQL状态:42P10 查询:

  • 问题内容: 我有一个表定义: 我正在尝试创建失败的表 错误是: 我不确定如何解决此问题。 问题答案: 我认为您正在寻找两个单独的外键:

  • 我正试图为注册系统建立一个数据库。然而,我遇到了一个问题,我没有一个特定表的唯一键。我不能制作人工密钥,因为这会破坏数据库的完整性(在弱实体中使用人工密钥不是最佳做法)。如何修复“Sections”表中的此错误,以使“ClassEvents”中的行唯一?