【发布时间】:2019-07-10 13:49:50
【问题描述】:
我正在使用 pgsql upsert 查询基于三列组合的冲突。这里一列可以为空或不为空,其他两列将始终包含该值。当所有三列都有值时,如果另一列可以为 null 的列没有值,则 Upsert 查询工作(更新值),因此它正在插入记录而不是更新。
CREATE TABLE "public"."plan_line_items" (
"plan_id" int4 NOT NULL
"module_id" int4 NOT NULL,
"sub_module_id" int4,
"created_date" timestamptz(6) NOT NULL DEFAULT now(),
"modified_date" timestamptz(6) NOT NULL DEFAULT now(),
"created_by" int4 NOT NULL,
"modified_by" int4 NOT NULL,
"is_active" bool NOT NULL DEFAULT true,
);
INSERT INTO plan_line_items1 ( plan_id,module_id, sub_module_id, created_by, modified_by, modified_date )
VALUES ( '1', '1', '1', '36', '36', 'now()' ),
( '1', '2', null, '36', '36', 'now()' ) ON CONFLICT (
plan_id,module_id,sub_module_id ) DO UPDATE SET modified_by = EXCLUDED.modified_by,
modified_date = EXCLUDED.modified_date
当我第一次尝试这个查询时,它的插入记录。之后,当我第二次尝试时,它只更新所有 plan_id、module_id、sub_module_id 为 1 的记录。不更新已经插入第三个空值的记录('1'、'2'、null、' 36','36','现在()')。我尝试了很多东西,但没有找到任何方法来做到这一点。我想在第二次执行此查询而不是插入时更新该记录。 如果有人有解决方案,请帮忙。
【问题讨论】:
标签: sql postgresql upsert