Я провел рефакторинг своего приложения для создания закладок Davemarks, чтобы оно работало по моему вкусу. Вчера я загрузил около 1000 закладок, скомпилированных в формате CSV из разных источников. Когда я попытался добавить новые закладки после импорта, я не смог их сохранить. Я продолжал получать сообщение duplicate key violates unique constraint
, что означает, что база данных пытается сохранить записи с ключами (id), которые уже использовались. то есть (я собирался сохранить новую запись с идентификатором 1, на самом деле она должна была использовать идентификатор 1025). Это происходит, когда ваша база данных не синхронизируется.
Большой объем импорта (мы можем назвать его большим объемом в 1000 строк) обычно приводит к этой ошибке. Я просмотрел онлайн и нашел эти ссылки 1 и 2 на stackoverflow, которые помогли мне решить проблему.
Это то, что я сделал:
1. заходим в свой терминал или консоль pgsql
2. Проверьте, каким было мое самое высокое используемое значение идентификатора для моей таблицы (закладок) (с помощью SQL)
SELECT MAX(id) FROM bookmarks;
# returned 1025
3. Проверьте, каков будет мой следующий идентификатор
SELECT nextval('bookmarks_id_seq');
# returned 1
4. Очевидно, что здесь нет никакой синхронности (1025 > 1). Итак, я установил свой самый высокий используемый идентификатор в качестве отправной точки для добавления следующего идентификатора (начальная точка 1025 -> следующий используемый идентификатор — 1026).
SELECT setval('bookmarks_id_seq', (SELECT MAX(id) FROM bookmarks));
SELECT setval(pg_get_serial_sequence('bookmarks', 'id'), MAX(id)) FROM bookmarks;