Я не совсем понимаю, что вы там пытаетесь сделать, вы неправильно смешали так много элементов синтаксиса, что это действительно трудно понять.
Два CTE (WITH ...
) кажутся совершенно неактуальными.Если вы просто хотите указать некоторые значения и выполнить обновление, если ключ UNIQUE нарушен, базовый синтаксис:
insert into the_table (col_1, col_2, col_3, col_4)
values (1,2,3,4)
on conflict (col_1,col_2) do update
set col_3 = excluded.col_3,
col_4 = excluded.col_4;
Специальное ключевое слово excluded
используется для ссылки на значение столбца, указанное в VALUES
предложение строки, которая вызвала нарушение уникального ограничения.
Ваш CTE предоставляет параметр eventTime
, который затем никогда не используется ниже.Предполагая, что это должно быть event_number
, тогда, возможно, вы ищете что-то вроде этого:
INSERT INTO alarm
-- specify all columns for which you provide a value
(alarm_id, fault_id, external_key,summary, event_sequence_number, event_number)
VALUES
-- provide a value for each column
(nextval('seq_alrm_instnc_alrm_instnc_id'), ?, ?, ?, ?, ? )
-- define the columns of the unique constraint you want to "catch"
ON CONFLICT (fault_id, external_key)
DO UPDATE SET
-- "excluded.summary" refers to the corresponding value from the VALUES clause
summary = excluded.summary,
system_last_update_time = default,
-- excluded.event_number refers to the corresponding value from the VALUES clause
event_sequence_number = CASE
WHEN excluded.event_number > alarm.event_number THEN excluded.event_number
ELSE alarm.event_number
END