我有這樣的一個表: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子句的用途或用法?