PostgreSQL проблема с CONSTRAINT при копировании данных из двух таблиц
У меня есть исходная таблица в PostgreSQL:
CREATE TABLE source_redshift.staticprompts (
id INT,
projectid BIGINT,
scriptid INT,
promptnum INT,
prompttype VARCHAR(20),
inputs VARCHAR(2000),
attributes VARCHAR(2000),
text VARCHAR(2000),
corpuscode VARCHAR(2000),
comment VARCHAR(2000),
created TIMESTAMP,
modified TIMESTAMP
);
В inputs данные хранятся в виде JSON. Мне нужно распарсить данный JSON и каждую запись из ключа name покласть отдельной строкой в новую таблицу PostgreSQL. Ее структура такова:
CREATE TABLE target_redshift.dim_collect_user_inp_configs (
collect_project_id BIGINT NOT NULL UNIQUE,
prompt_type VARCHAR(20),
prompt_input_desc VARCHAR(300),
prompt_input_name VARCHAR(100),
no_of_prompt_count BIGINT,
prompt_input_value VARCHAR(100) UNIQUE,
prompt_input_value_id BIGSERIAL PRIMARY KEY,
script_id BIGINT,
corpuscode VARCHAR(20),
min_recordings VARCHAR(2000),
max_recordings VARCHAR(2000),
recordings_count VARCHAR(2000),
lease_duration VARCHAR(2000),
date_created TIMESTAMP WITHOUT TIME ZONE NOT NULL DEFAULT NOW(),
date_updated TIMESTAMP WITHOUT TIME ZONE
CONSTRAINT must_be_unique UNIQUE (prompt_input_value,collect_project_id)
);
По условиям задачи, у меня
Primary Key : prompt_input_value_id
Unique Values : collect_project_id, prompt_input_value
И мне нужно сделать так с колонками prompt_input_value (Generate unique sequence number for the combination of each prompt_input_value and collect_project_id), prompt_input_value_id (Inputs.value is stored in the inputs column as JSON text. Create a unique record for each inputs.value. Look at the example below this table).
Я делаю следующий запрос:
INSERT INTO target_redshift.dim_collect_user_inp_configs AS t (
collect_project_id,
prompt_type,
prompt_input_desc,
prompt_input_name,
prompt_input_value,
script_id,
corpuscode)
SELECT
s.projectid,
s.prompttype,
el.inputs->>'name' AS name,
el.inputs->>'desc' AS desc,
jsonb_array_elements(el.inputs->'values') AS value,
s.scriptid,
s.corpuscode
FROM source_redshift.staticprompts AS s,
jsonb_array_elements(s.inputs::jsonb) el(inputs);
ON CONFLICT (collect_project_id)
DO NOTHING;
Но получаю ошибку
[23505] ERROR: duplicate key value violates unique constraint "dim_collect_user_inp_configs_collect_project_id_key" Подробности: Key (collect_project_id)=(74) already exists.
Не могу понять как исправить запрос.