我有一个用户在其中回答问题的表。规则是用户可以回答许多问题,或者许多用户可以回答一个问题,但用户只能回答一次特定问题。如果用户再次回答该问题,则只需替换旧的问题即可。通常,当我们处理唯一列时,on冲突确实会更新。在这种情况下,列person_id
和question_id
不能唯一。但是,两者的结合始终是唯一的。如何实现在冲突时会更新的插入语句?
CREATE TABLE "answer" (
"person_id" integer NOT NULL REFERENCES person(id),
"question_id" integer NOT NULL REFERENCES question(id) ON DELETE CASCADE, /* INDEXED */
"answer" character varying (1200) NULL,
PRIMARY KEY (person_id, question_id)
);
只需将两个键放在ON CONFLICT
子句中:
INSERT INTO answer VALUES (1,1,'q1')
ON CONFLICT (person_id,question_id)
DO UPDATE SET answer = EXCLUDED.answer;
例子:
INSERT INTO answer VALUES (1,1,'q1')
ON CONFLICT (person_id,question_id)
DO UPDATE SET answer = EXCLUDED.answer;
SELECT * FROM answer;
person_id | question_id | answer
-----------+-------------+--------
1 | 1 | q1
(1 Zeile)
INSERT INTO answer VALUES (1,1,'q1-UPDATED')
ON CONFLICT (person_id,question_id)
DO UPDATE SET answer = EXCLUDED.answer;
SELECT * FROM answer;
person_id | question_id | answer
-----------+-------------+------------
1 | 1 | q1-UPDATED
(1 Zeile)
我想更新表中几行的主键。如果所有行都已更新,则键将再次是唯一的,但第一行的更新会导致与第二行的键发生临时冲突。有没有优雅的方法来解决这个问题? 例子: 错误:重复的键值违反了唯一约束“pk_erichtest”
问题内容: 您能否建议我在发布者和订阅者之间合并期间自动解决主键冲突的方法。看来Sql Server并没有开箱即用:(。 冲突查看器向我显示了下一条消息: 无法将“ publisher_server”上的行插入传播到“ subscriber_server”。此失败可能是由于违反约束引起的。违反主键约束’PK_ PartPlan FD9D7F927172C0B5’。无法在对象“ _table_nam
我遇到了一个罕见的,但令人沮丧的问题,Postgres似乎错过了我的主键冲突,并抛出一个错误的唯一索引,我没有把我的ON冲突。 例如: 表: 列: 有时这运行得很好,但有时它告诉我 我肯定我错过了什么,但我不知道是什么。我需要从集合中删除唯一列吗?为什么这不总是抛出一个错误?
问题内容: 我试图将我的SQL数据库中表的主键从现有键更改为复合键,其中不包括现有列。由于出现以下错误消息,因此以下代码无法正常工作: 删除主键: PRIMARY附近的语法不正确。预期为COLUMN,CONSTRAINT,ID或QUOTED_ID 添加主键: PRIMARY附近的语法不正确。 期望ID T-SQL代码: 编辑 我可以通过使用以下两个查询语句来完成此操作 我没有要求SQL“ DROP
Postgres 10和11的插入说明: 关于冲突[冲突目标]冲突行动 我有一张桌子: 而我想做的 但是我得到一个错误: ON CONFLICT DO UPDATE需要推理规范或约束名称提示:例如,ON CONFLICT(column_name) 为什么我必须提供一个确定的目标?如何提供主键或其他列集?
每当我的应用程序启动时,我总是得到以下错误消息: 将data.sql更改为: 生成以下错误消息: