PostgreSQL UPDATE ON CONFLICT 仅在某些情况下
PostgreSQL UPDATE ON CONFLICT only under some condition
我有一个table这样的
create table public.incominglog
(
envelopeid varchar(36) default ''::character varying not null,
messagetype text default NULL::character varying,
initialenvelopeid varchar(36) default NULL::character varying,
processid varchar(36) default NULL::character varying,
logtimestamp timestamp,
customscode varchar(8),
exchtypeid integer
);
create unique index incominglog_envelopeid_uindex
on public.incominglog (envelopeid);
create unique index incominglog_initialenvelopeid_uindex
on public.incominglog (initialenvelopeid);
我正在尝试插入这样的值
INSERT INTO
incominglog (
envelopeid,
messagetype,
initialenvelopeid,
processid,
logtimestamp,
customscode,
exchtypeid
)
VALUES
(
'ae2a2b46-ae4f-42a1-ada3-1f8f0aff7361',
'CMN.00001',
'aad06a96-667f-42c9-9196-8e0fec103d8b',
'4fed3854-e1de-42eb-b2c7-3ad714b58a9e',
'2019-04-17 14:57:54.195588',
'10210130',
'19200'
)
ON CONFLICT (initialenvelopeid)
DO update set
envelopeid = excluded.envelopeid,
messagetype = excluded.messagetype,
logtimestamp = excluded.logtimestamp
请帮助我,请更改我的插入脚本,如果 messagetype
中已经有 'CMN.00001'
具有相同的 initialenvelopeid
,它不会更新值。
您可以将 WHERE
子句添加到 ON CONFLICT
:
ON CONFLICT DO UPDATE ...
WHERE incominglog.messagetype <> 'CMN.00001'
我有一个table这样的
create table public.incominglog
(
envelopeid varchar(36) default ''::character varying not null,
messagetype text default NULL::character varying,
initialenvelopeid varchar(36) default NULL::character varying,
processid varchar(36) default NULL::character varying,
logtimestamp timestamp,
customscode varchar(8),
exchtypeid integer
);
create unique index incominglog_envelopeid_uindex
on public.incominglog (envelopeid);
create unique index incominglog_initialenvelopeid_uindex
on public.incominglog (initialenvelopeid);
我正在尝试插入这样的值
INSERT INTO
incominglog (
envelopeid,
messagetype,
initialenvelopeid,
processid,
logtimestamp,
customscode,
exchtypeid
)
VALUES
(
'ae2a2b46-ae4f-42a1-ada3-1f8f0aff7361',
'CMN.00001',
'aad06a96-667f-42c9-9196-8e0fec103d8b',
'4fed3854-e1de-42eb-b2c7-3ad714b58a9e',
'2019-04-17 14:57:54.195588',
'10210130',
'19200'
)
ON CONFLICT (initialenvelopeid)
DO update set
envelopeid = excluded.envelopeid,
messagetype = excluded.messagetype,
logtimestamp = excluded.logtimestamp
请帮助我,请更改我的插入脚本,如果 messagetype
中已经有 'CMN.00001'
具有相同的 initialenvelopeid
,它不会更新值。
您可以将 WHERE
子句添加到 ON CONFLICT
:
ON CONFLICT DO UPDATE ...
WHERE incominglog.messagetype <> 'CMN.00001'