我有两个表在postgresdaily_report
和summary_songs
。
用于创建表的Sql文件如下:https://nofile.io/f/Ef94rMFRh6C/file.sql
我想在每天结束时更新summary_songs
,条件如下:
userid
已经不存在,那么从daily_report
的记录需要插入到summary_songs
userid
存在,那么summary_songs.countid=summary_songs.countiddaily_report.countid
。我使用下面的查询来更新歌曲摘要:
insert into summary_songs
(select * from daily_report as B)
on conflict (userid, songd)
do update set countid = countid+excluded.countid ;
我得到以下错误:
错误:不存在与冲突规范匹配的唯一或排除约束
要在冲突中使用,
您需要在摘要_歌曲
表中强制使用唯一(userid,songd)
:
SQL小提琴
PostgreSQL 9.6架构设置:
CREATE TABLE summary_songs (
date_time date NOT NULL,
userid integer NOT NULL,
songd integer NOT NULL,
countid integer NOT NULL,
unique(userid, songd)
);
CREATE TABLE daily_report(
date_time date NOT NULL,
userid integer NOT NULL,
songd integer NOT NULL,
countid integer NOT NULL
);
insert into daily_report (date_time, userid, songd, countid) values
(to_date('2017-12-31','YYYY-MM-DD'), 1 , 1 , 5),
(to_date('2017-12-31','YYYY-MM-DD'), 2 , 1 , 10),
(to_date('2017-12-31','YYYY-MM-DD'), 4 , 1 , 7);
insert into summary_songs (date_time, userid, songd, countid) values
(to_date('2017-12-30', 'YYYY-MM-DD'),1, 1, 80),
(to_date('2017-12-30', 'YYYY-MM-DD'),2, 1, 51),
(to_date('2017-12-30', 'YYYY-MM-DD'),3, 1, 66);
问题1:
select * from daily_report
结果:
| date_time | userid | songd | countid |
|------------|--------|-------|---------|
| 2017-12-31 | 1 | 1 | 5 |
| 2017-12-31 | 2 | 1 | 10 |
| 2017-12-31 | 4 | 1 | 7 |
问题2:
select * from summary_songs
结果:
| date_time | userid | songd | countid |
|------------|--------|-------|---------|
| 2017-12-30 | 1 | 1 | 80 |
| 2017-12-30 | 2 | 1 | 51 |
| 2017-12-30 | 3 | 1 | 66 |
问题3:
insert into summary_songs (date_time, userid, songd, countid)
select date_time, userid, songd, countid from daily_report
on conflict (userid, songd)
do update set
countid = summary_songs.countid + excluded.countid ,
date_time = excluded.date_time
问题四:
select * from summary_songs
结果:
| date_time | userid | songd | countid |
|------------|--------|-------|---------|
| 2017-12-30 | 3 | 1 | 66 |
| 2017-12-31 | 1 | 1 | 85 |
| 2017-12-31 | 2 | 1 | 61 |
| 2017-12-31 | 4 | 1 | 7 |
当执行以下类型的插入时,我得到以下错误: 查询: 错误: SQL执行失败(原因:错误:没有与冲突规范匹配的唯一或排除约束) 我也有一个独特的索引: 问题是它有时有效,但不是每次都有效。我随机得到这个例外,这真的很奇怪。它似乎无法访问该索引,或者不知道它存在。 有什么建议吗? 我使用的是PostgreSQL 9.5.5。 执行试图查找或创建帐户的代码时的示例: 在这种情况下,我确信该帐户不存在。此外
错误:没有唯一或排除约束匹配ON CONFLICT规范SQL状态:42P10 查询:
我试图对一个名为feature_to_model的表执行upsert。但是,我得到了以下错误: 以下是我的桌子规格: 我使用Gorm来查询数据库,这是我的函数调用: 我错过了什么?我不能对任何索引(training_job_id、feature_name、feature_set_name索引)使用唯一约束,因为它们都不是唯一的
典型票务系统的PostgreSQL数据库问题。为什么我的upsert不更新现有票证? 门票表: 代码中开发的约束(不是db枚举类型的一部分): 只能是以下值之一:,或。 之前的门票: 运行此SQL以尝试向上插入第一个失败: 带有错误消息: 错误:不存在与冲突规范匹配的唯一或排除约束 我试着把它改成: 在之前移动子句以触发部分索引查询,但没有效果。 我只想更新“未完成”票证的、和(根据该表中定义的部
我想用插页。。请务必更新。。对两列具有唯一约束的表的语法。这可能吗? mytable对col1和col2有单独的唯一约束。 我可以写: 然而,这不起作用: 错误:冲突时,更新是否需要推理规范或约束名称 这也不起作用: 错误:不存在与冲突规范匹配的唯一或排除约束 这种语法似乎是为两列上的单一复合唯一约束而设计的,而不是两个约束。 如果违反了其中一个唯一约束,有没有办法进行条件更新?这个问题是如何在博
我正在尝试实现一个用户身份验证表。我正在进行用户注册,我的控制台打印出来: org.h2.jdbc.唯一索引或主键冲突:"PUBLIC.USERS_USERNAME_UINDEXPUBLIC.USERS(USERNAME)VALUES 1";SQL语句: INSERT INTO USERS(FIRST_NAME,LAST_NAME, USERNAME, PASSWORD)VALUES(?,?,?,