ОБНОВЛЕНИЕ PostgreSQL ПО КОНФЛИКТУ только при некоторых условиях - PullRequest
2 голосов
/ 17 апреля 2019

У меня есть такая таблица

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

Помогите мне, пожалуйста, внести изменения в мой скрипт вставки, чтобы онне будет обновлять значения, если уже есть 'CMN.00001' в messagetype с тем же initialenvelopeid.

1 Ответ

4 голосов
/ 17 апреля 2019

Вы можете добавить предложение WHERE к ON CONFLICT:

ON CONFLICT DO UPDATE ...
   WHERE incominglog.messagetype <> 'CMN.00001'
...