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.

Не могу понять как исправить запрос.


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