postgresql - jooq - 识别 postgres UNIQUE 约束的问题
问题描述
我正在尝试:
context.insertInto(table(ERROR_TABLE))
.set(valuesMap)
.onConflictOnConstraint(constraint(name("push_def_rec_error_idx"))
.doUpdate()
.set(field(name(fieldname)), value)
.execute();
我收到一个错误告诉我:
错误:表“push_error”的约束“push_def_rec_error_idx”不存在
表定义(通过\d+ table_name
):
...
Indexes:
"push_record_error_pkey" PRIMARY KEY, btree (push_record_error_id)
"push_def_rec_error_idx" UNIQUE, btree (push_definition_id, rec_id)
我究竟做错了什么?
这是针对SQLDialect.POSTGRES_10
解决方案
您命名索引的方式,我假设您对这些列没有约束,但是UNIQUE INDEX
:
CREATE TABLE T (a INT PRIMARY KEY, b INT, c INT);
CREATE UNIQUE INDEX u ON t(b);
INSERT INTO T (a, b, c)
VALUES (1, 2, 3)
ON CONFLICT ON CONSTRAINT u
DO UPDATE SET c = 4
RETURNING *;
以上产生:
[42704]: ERROR: constraint "u" for table "t" does not exist
但是,将索引变成约束:
DROP INDEX u;
ALTER TABLE t ADD CONSTRAINT u UNIQUE (b);
该INSERT
声明现在有效。
请参阅此处有关唯一约束和唯一索引之间区别的说明。这与 jOOQ 并没有真正的关系
推荐阅读
- ruby-on-rails - Activeadmin - 显示页面内的表单仅显示提交按钮
- amazon-web-services - 亚马逊无服务器图像处理程序,CORS 问题
- python - 将 Excel 行从一个工作簿复制到另一个工作簿
- monitoring - 如何以毫秒分辨率而不是分钟分辨率存储从 Zabbix 代理收集的数据指标
- node.js - 如何使用 nodemailer 发送 html 文件
- ios - 设置委托时出现无效的选择器错误:Xcode 10 swift 4
- google-apps-script - Google 表格中的预测
- swift - 如何从 Firestore 中提取自定义对象?
- mysql - Laravel:如何将此 Sql 语句转换为 Eloquent 或 Query Builder?
- json - PostgreSQL 选择成 JSON 数组