with t as (SELECT * FROM (VALUES
(1, 'Убытие из пункта выезда с территории РФ', false, null, 'departure_from_control_point')
,(3, 'Перевозка прекращена', false, null, 'terminated_transportation')
,(2, 'Нарушение перевозки', false, null, 'violation_transportation')
,(4, 'В КП выезда зафиксировано нарушение пломб', false, null, 'violation_in_control_point')
,(5, 'Установка недействительности талона', false, null, 'cancelled')
)AS t
(id, name, is_deleted, shortname, code)),
upd AS (
UPDATE deactivation_reasons
SET name=
t.name, is_deleted=t.is_deleted, shortname=t.shortname, code=t.code, updated_at=now()
FROM t
WHERE not exists(select name from t where deactivation_reasons.code=t.code)
and deactivation_reasons.name =
t.name RETURNING deactivation_reasons.code
),ins as (
INSERT INTO deactivation_reasons(name, is_deleted, shortname, code,created_at)
SELECT
t.name,t.is_deleted,t.shortname, t.code, now() as created_at
FROM t
WHERE not exists(select code from upd where t.code=upd.code))
UPDATE deactivation_reasons d
SET is_deleted=True, updated_at=now()
WHERE not exists(select code from t where d.code=t.code)