date
,pollutant_code
,source_id
和time
只能存在一个唯一值,因此我定义了一个唯一约束{ {1}}。
和upsert查询一样
source_code_time_uq
当所有字段都可用时,upsert方法正常工作,但当我将INSERT INTO aqi(source_id, source_type, pollutant_code, "date", "time", aqi_value)
VALUES (4, 1 ,'PM2.5','2018-05-28',8, 789)
ON CONFLICT ON CONSTRAINT source_code_time_uq
DO UPDATE SET
aqi_value = 789
放入NULL
列时(试图使该行代表一整天的AQI数据),{ {1}}约束没有被调用,它仍然插入一个新行。
那么如何在也可以time
的字段上添加唯一约束检查,是否需要更新我的upsert查询?
答案 0 :(得分:1)
您可以使用已过滤的唯一索引:
create unique index unq_aqi_4 on (date, pollutant_code, source_id, time)
where time is not null;
然后,您可能还希望每天只保证一行NULL
行,所以:
create unique index unq_aqi_4 on (date, pollutant_code, source_id)
where time is null;
当然,也要删除unique
约束。
答案 1 :(得分:0)
唯一约束的问题是它将允许一个null,因此我们可能必须将列定义为非null。希望这有帮助