【发布时间】:2010-10-15 01:11:32
【问题描述】:
我在我们的数据库中遇到了一种情况,我需要将多条记录的时间戳移动一天,但是我有一个唯一约束,要求 id 字段和时间戳字段是唯一的。
这是表格说明。
表“public.eedata”
专栏 |类型 |修饰符
-------------+--------------------------------+--- -------------------------------------------------- --------
eedata_id |大整数 |不为空默认 nextval('eedata_eedata_id_seq'::regclass)
用户 ID |整数 |
eeupload_id |大整数 |
eetimestamp |没有时区的时间戳(0)|
索引:
“pk_eedata”主键,btree (eedata_id)
"eedata_user_id_key" 唯一,btree (user_id, eetimestamp)
“fki_eeuploadid” btree (eeupload_id)
外键约束:
"fk_eeupload_id" 外键 (eeupload_id) 参考 eeupload(eeupload_id) ON UPDATE CASCADE ON DELETE CASCADE
"fk_user_id" FOREIGN KEY (user_id) REFERENCES users(user_id) ON UPDATE CASCADE ON DELETE CASCADE
这种情况下的问题是由 eedata_user_id_key 约束引起的。我可以使用成功减去一天,
更新 eedata 集 eetimestamp = eetimestamp - 间隔 '1 天' where eeupload_id = xxx;
因为它应用更新的顺序可以防止任何冲突,但是当我尝试时
更新eedata set eetimestamp = eetimestamp + 间隔'1天' where eeupload_id = xxx;
我明白了
错误:重复键违反唯一约束“eedata_user_id_key”
我需要做的是指定应用更新的顺序(实际上是更新语句的顺序)或暂停单个更新语句的约束的能力。
如果这很重要,我正在使用 Postgres 8.1.11。
【问题讨论】:
标签: database postgresql