我有下表:
create workers (
id SERIAL PRIMARY KEY,
name STRING
);
create works_zones (
id SERIAL PRIMARY KEY,
area_name String,
work_from TIME WITHOUT TIMEZONE,
work_until TIME WITHOUT TIMEZONE
)
create table shifts (
id SERIAL PRIMARY KEY,
worker_id INT,
day_of_week INT,
work_zone INT,
CONSTRAINT fk_worker FOREIGN KEY(worker_id) REFERENCES workers(id) ON DELETE CASCADE,
CONSTRAINT fk_work_zone FOREIGN KEY(work_zone) REFERENCES works_zones(id) ON DELETE CASCADE
)
在我的班次中,我有以下记录:
ID | worker_id | 星期几 | 工作区 |
---|---|---|---|
1个 | 1个 | 1个 | 1个 |
2个 | 1个 | 1个 | 1个 |
3个 | 2个 | 2个 | 1个 |
3个 | 2个 | 2个 | 1个 |
worker_id
在我的例子中,我想在 columns , day_of_week
, work_zone
at table上应用一个唯一索引shifts
:
CREATE UNIQUE INDEX CONCURRENTLY unique_day_zone_worker ON shifts (worker_id,work_zone,"day_of_week");
但是根据我的记录会失败。因此,我想检测重复的记录,以便我可以手动修复它们。任何想法我该怎么做?
在其他 wqords 中,我想检测shift.id
在列worker_id
、day_of_week
、处有重复记录的work_zone
。
答案如下:https://stackoverflow.com/a/32265524/4706711
在您的情况下,您需要运行:
您需要手动删除并使用更新和选择查询相应地更新记录。然后你需要创建唯一索引:
我建议对更新、删除和唯一索引都使用单一事务,这样可以避免任何意外。