我有一个类似于这个的PostgreSQL表:
mytable的:
id
col2
col3
import_ts TIMESTAMP(0) WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
因此,当我执行插入操作时,我不必为此列指定任何值,并且会自动插入当前时间戳。
但是,使用如下所示的查询时:
INSERT INTO mytable (id, col2, col3) VALUES (%s, %s, %s)
ON CONFLICT (id) DO UPDATE
SET col2 = %s, col3 = %s;
结果是,在INSERT
的情况下,import_ts会自动插入,如预期的那样;但如果UPDATE
,则import_ts
列将不会更新。
为了更新import_ts,我正在使用python
和psycopg2
,我可以添加SET
import_ts = %s
并传递当前时间。但是,它似乎并不优雅和一致,在一种情况下,时间戳是自动添加的,而在另一种情况下我必须添加它。我希望它总是由PostgreSQL自动完成。这可能吗?
答案 0 :(得分:3)
当然,只需使用now()
function:
INSERT INTO mytable (id, col2, col3) VALUES (%s, %s, %s)
ON CONFLICT (id) DO UPDATE
SET col2 = %s, col3 = %s, import_ts = now();