Небольшая проблема с INSERT INTO ON CONFLICT DO UPDATE SET в PostgreSQL

У меня есть следующий запрос, формирующий две таблицы с тестовыми данными:

CREATE TABLE IF NOT EXISTS dim_collect_projects_1 (
            project_id BIGINT NOT NULL UNIQUE,
            project_number BIGINT,
            project_name VARCHAR(300) NOT NULL,
            connect_project_id BIGINT NOT NULL,
            project_desc VARCHAR(5000) NOT NULL,
            project_type VARCHAR(50) NOT NULL,
            project_status VARCHAR(100),
            project_path VARCHAR(32768),
            language_code VARCHAR(10),
            country_code VARCHAR(10),
            timezone VARCHAR(10),
            project_created_at TIMESTAMP WITHOUT TIME ZONE,
            project_modified_at TIMESTAMP WITHOUT TIME ZONE,
            date_created TIMESTAMP WITHOUT TIME ZONE NOT NULL DEFAULT NOW(),
            date_updated TIMESTAMP WITHOUT TIME ZONE NOT NULL DEFAULT NOW()
        );
        
CREATE TABLE IF NOT EXISTS dim_collect_projects_2 (
            id BIGINT NOT NULL UNIQUE,
            number BIGINT,
            name VARCHAR(300) NOT NULL,
            connect_project_id BIGINT NOT NULL,
            description VARCHAR(5000) NOT NULL,
            type VARCHAR(50) NOT NULL,
            status VARCHAR(100),
            path VARCHAR(32768),
            language VARCHAR(10),
            country VARCHAR(10),
            timezone VARCHAR(10),
            created TIMESTAMP WITHOUT TIME ZONE NOT NULL DEFAULT NOW(),
            modified TIMESTAMP WITHOUT TIME ZONE NOT NULL DEFAULT NOW()
        );
        
INSERT INTO dim_collect_projects_2 (id, number, name, connect_project_id, description,
        type, status, path, language,
        country, timezone)
        VALUES
            (1, 111, 'KAZ', 111, 'Kazakhstan', 'Country', 'Live', 'Asia', 'KZ', 'KZ', '+1'),
            (2, 112, 'TSE', 112, 'Kazakhstan', 'Country', 'Live', 'Asia', 'KZ', 'KZ', '+1'),
            (3, 113, 'PDX', 113, 'USA', 'Country', 'Live', 'Asia', 'KZ', 'KZ', '+1');

Мне необходимо скопировать из второй данные в первую. Я делаю это так:

INSERT INTO dim_collect_projects_1
        SELECT s.id, s.number, s.name, s.connect_project_id, s.description,
        s.type, s.status, s.path, s.language, s.country, s.timezone, s.created,
        s.modified
        FROM dim_collect_projects_2 AS s
        ON CONFLICT (project_id)
        DO UPDATE SET
        (project_number, project_name, connect_project_id, project_desc,
        project_type, project_status, project_path, language_code,
        country_code, timezone, project_created_at, project_modified_at,
        date_created, date_updated) = (EXCLUDED.project_number, EXCLUDED.project_name, EXCLUDED.connect_project_id,
         EXCLUDED.project_desc, EXCLUDED.project_type, EXCLUDED.project_status,
         EXCLUDED.project_path, EXCLUDED.language_code, EXCLUDED.country_code,
         EXCLUDED.timezone, EXCLUDED.project_created_at, EXCLUDED.project_modified_at, EXCLUDED.date_created, NOW());

Далее после того как во второй таблице данные обновятся, мне их нужно снова скопировать в первую, при этом нужно сохранить значения в колонках project_created_at и project_modified_at такими, как они были во второй колонке на момент копирования, в колонке date_created сохранить значение, которое было на момент добавления записи (но при этом при если ранее запись уже была (находим по project_id), то значение в колонке date_created не должно обновиться на момент обновления, а должно сохраниться базовое значение. А вот в колонке date_updated данные должны обновиться после обновления записи на время обновления.

Но сейчас как-то так получается, что значение в поле date_updated и date_created меняются на текущее на момент обновления при копировании. Хотя при этом project_created_at и project_modified_at сохраняются нормально и соответствуют уже ранее записанным в эти колонки значения.

Можете подсказать где ошибся при формировании запроса?


Ответы (0 шт):