@nakem

Как продублировать несколько полей одним запросом?

У меня есть запрос, который нормально работает
INSERT INTO assignments (id, task_id, item_id, started, completed, result, status, marker_id) 
SELECT $1, task_id, item_id, NULL, completed, result, 'QUEUE', NULL
FROM assignments
WHERE assignments.id = $2
RETURNING id;

Он дублирует одно поле в таблице. С некоторыми изменениями.

Теперь мне понадобилось дублировать несколько полей. Я написал что-то вроде этого.
INSERT INTO assignments (id, task_id, item_id, started, completed, result, status, marker_id) 
SELECT UNNEST($1::uuid[]), task_id, item_id, NULL, completed, result, 'QUEUE', NULL
FROM assignments
WHERE assignments.id = ANY ($2::uuid[]);

Но это возвращает ошибку
duplicate key value violates unique constraint "assignment_pk"

Хотя я не отправляю дубликаты.
Я предполагаю, что это связано с тем, что между $1 и $2 нет связи.

Из возможных решений я думаю можно сначала взять данные нужных нам записей, а потом заинсертить их, но было бы приятней запросом сделать.
  • Вопрос задан
  • 193 просмотра
Пригласить эксперта
Ответы на вопрос 1
mayton2019
@mayton2019
Bigdata Engineer
Судя по тексту ошибки - это нарушение констрейнта первичного ключа "assignment_pk".

Когда ты вставляешь что-то в таблицу с primary key то должен всегда проверять что ID уникален.

В данном случае этот запрос неверен. Выдает неуникальный сет IDs.
SELECT $1, task_id, item_id, NULL, completed, result, 'QUEUE', NULL
FROM assignments
WHERE assignments.id = $2
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы