Задать вопрос
@ksvdon

Как обойти ошибку ERROR: duplicate key value violates unique constraint?

Делаю update времени:
update sometable set ts = ts + $Date_dif

в таблице sometable есть поле ts:
Column | Type | Modifiers | Storage | Description
---------------------------+-----------------------+-----------+----------+-------------
ts | integer | not null | plain |

оно же помечено как PRIMARY KEY (и не только оно)

в ts записано время в формате unix_time. Я прибавляю ко всем значениям поля ts некую разницу в формате unix_time и таким образом обновляю время в БД будто данные были записаны недавно.

Первый раз у меня всё вышло. Когда я пробовал обновить время ещё раз - выдавало ошибку:
ERROR: duplicate key value violates unique constraint

Как можно обойти это? (аналогичная проблема с и БД MySQL, выдает что-то вроде: ERROR 1062 (23000) at line 1: Duplicate entry '1439933444-stat-localhost' for key 'PRIMARY' )

Как обойти? Есть варианты? Мне надо иметь возможность обновлять данные столько раз сколько потребуется.
  • Вопрос задан
  • 23689 просмотров
Подписаться 1 Оценить Комментировать
Ответ пользователя Андрей Поляков К ответам на вопрос (4)
magnitudo
@magnitudo
Архитектор, программист, предприниматель...
Я думаю, что проблема в том, что при обновлении записей в какой-то момент времени появляются дубликаты (т.е. было поле 3 и 6, делаем +3 и сначала нам попадает поле 3, т.е. там будет 6, что конфликтует с уже имеющейся 6).
Вам нужно либо изменить PRIMARY KEY на DEFERRABLE (чтобы проверка выполнялась при завершении транзакции), либо обновлять данные в отсортированном виде, т.е. сначала прибавлять к самым новым записям в таблице.
Ответ написан
Комментировать