我有这样的一个表:PostgreSQL的INSERT ... ON冲突......哪里都不触发
CREATE TABLE import_files (
id SERIAL PRIMARY KEY,
file TEXT NOT NULL,
volume TEXT NOT NULL,
lastimport DATE DEFAULT CURRENT_DATE,
UNIQUE (file,volume)
)
我试图将数据导入到表中,这样如果file
和volume
组合在表中不存在的情况下,应添加新行,否则如果存在行,则应更新该行,以便 lastimport
是今天的日期。
但是,我不想做任何更新,如果该行已经是今天的日期( 相同的行可能会提交一天多次)。
我试图使用PostgreSQL 9.6的这个新ON CONFLICT
子句,如下所示:
INSERT INTO import_files(file,volume)
VALUES('MyFile1', 'VolA')
ON CONFLICT (file,volume) DO
UPDATE SET lastimport = CURRENT_DATE
WHERE EXCLUDED.lastimport < CURRENT_DATE
RETURNING id
,但它似乎并没有为我工作。最初的导入工作正常,但对于 更新情况下,它似乎并没有更新即使在WHERE子句是真实的:
t1=> select * from import_files;
id | file | volume | lastimport
----+---------+--------+------------
1 | MyFile1 | VolA | 2017-05-07
(1 row)
t1=> INSERT INTO import_files(file,volume)
VALUES('MyFile1', 'VolA')
ON CONFLICT (file,volume) DO
UPDATE SET lastimport = CURRENT_DATE
WHERE EXCLUDED.lastimport < CURRENT_DATE
RETURNING id
;
id
----
(0 rows)
INSERT 0 0
由于今天是2017年5月8日我本来预计要更新该行。
我是否误解了在此上下文中WHERE子句的用途或用法?