Ошибка в SQL запросе для PostgreSQL для INSERT INTO ON CONFLICT
Всем привет.
Есть у меня такие две таблицы в двух схемах в одной БД:
CREATE TABLE IF NOT EXISTS target_redshift.dim_collect_projects (
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,
date_updated TIMESTAMP WITHOUT TIME ZONE
);
CREATE TABLE IF NOT EXISTS source_redshift.dim_collect_projects (
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,
modified TIMESTAMP WITHOUT TIME ZONE
Мне нужно скопировать данные из второй таблицы в первую таким образом, чтобы в случае, если id из второй есть в project_id в первой, то применялся ON CONFLICT DO...
Я сделал такой запрос:
INSERT INTO target_redshift.dim_collect_projects
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 source_redshift.dim_collect_projects AS s
ON CONFLICT (s.id = 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) = (EXCLUDED.number, EXCLUDED.name, EXCLUDED.connect_project_id,
EXCLUDED.description, EXCLUDED.type, EXCLUDED.status,
EXCLUDED.path, EXCLUDED.language, EXCLUDED.country,
EXCLUDED.timezone, EXCLUDED.created, EXCLUDED.modified)
Но я не уверен относительно того, правильно ли я делаю здесь ON CONFLICT (s.id = project_id).
И еще мне нужно сделать так, чтобы при копировании из второй в первую или обновлении при ON CONFLICT в колонках в первой таблице date_created и date_updated данные просто добавлялись для date_created из системного времени сервера когда данные были добавлены а для date_updated из системного времени когда данные были обновлены (в случае, если IN CONFLICT).
Вот тут у меня немного недопонимание как это сделать. Можете подсказать как поправить мой запрос, чтобы он выполнял условия?
Спасибо.