我想知道当其中一列(column1 或 column2)为空时是否可以进行 upsert,我只需要部分更新,当然,我试图避免SELECT
验证记录是否已经存在。
这是我正在努力实现的一个例子。
CREATE TABLE test(
column1 timestamp NOT NULL,
column2 uuid,
status integer NOT NULL,
id uuid NOT NULL,
CONSTRAINT upsert_conflict UNIQUE (id, status)
);
我有这样的事情:
INSERT INTO test(column1, status, id)
VALUES(now(), 0, <any uuid>)
ON CONFLICT ON CONSTRAINT upsert_conflict
DO UPDATE SET column1= now()
这个按预期工作,但我也有这样的事情:
INSERT INTO test(column2, status, id)
VALUES(gen_random_uuid (), 0, <existing uuid>)
ON CONFLICT ON CONSTRAINT upsert_conflict
DO UPDATE SET column2= gen_random_uuid ()
我知道这INSERT
是错误的,因为我们无法将 NULL 值设置为 column1,但假设我已经有一条具有该 id 和状态的记录,我想这样做UPDATE
,而不是那样,我得到一个错误:...violates not-null constraint.
因为缺少的列。
我正在根据用户传递给我的内容动态创建这些查询。有时我会有类似第一个示例的内容,有时会有类似第二个示例的内容,而且我不知道哪一列不能为空。
我希望你能帮助我。