локальный postgres db продолжает выдавать ошибку дублирующее значение ключа нарушает уникальное ограничение - PullRequest
4 голосов
/ 17 марта 2012

Я не понимаю, почему postgres повышает:

duplicate key value violates unique constraint

Я пошел, чтобы проверить таблицу в pgadmin, чтобы увидеть, действительно ли в таблице есть дубликат, и посмотреть:

ВыполнениеВАКУУМ рекомендуется

Расчетное количество строк в таблице значительно отличается от фактического количества строк.

Почему это происходит?К счастью, этого не происходит в производстве героев.Это приложение rails.

Обновление:

Вот журнал sql:

SQL (2.6ms) ВСТАВИТЬ В "Избранное"("artist_id", "author_id", "creation_at", "post_id", "updated_at") ЗНАЧЕНИЯ ($ 1, $ 2, $ 3, $ 4, $ 5) RETURNING "id" [["artist_id", 17], ["author_id", nil], ["creat_at", вс, 18 марта 2012 г. 03:48:37 UTC + 00: 00], ["post_id", 62], ["updated_at", вс, 18 марта 2012 г. 03:48:37 UTC+00: 00]] PG :: Ошибка: ОШИБКА: двойное значение ключа нарушает ограничение уникальностиВ фактической таблице нет такой записи с artist_id = 17 и post_id = 62. Но Postgres считает, что есть.

Ответы [ 5 ]

8 голосов
/ 17 марта 2012

Вам нужно запустить ANALYZE, чтобы получить количество строк в синхронизации. В pgAdmin щелкните правой кнопкой мыши по таблице и выберите «Обслуживание» для этого. Затем нажмите F5 на столе.

Не имеет ничего общего с нарушением уникального ключа. Это означает, что значение, которое вы пытаетесь ввести в столбец с ограничением UNIQUE или PRIMARY KEY, уже присутствует в другой строке.

3 голосов
/ 02 июня 2014

В случае сообщений об ошибках нарушения уникального ключа PostgreSQL, ActiveRecord::Base.connection.reset_pk_sequence!('table_name') может помочь восстановить ключ в синхронизации.

2 голосов
/ 18 марта 2012

Распространенной причиной этого является то, что вы помещаете данные в таблицу с первичным ключом, который обычно предоставляется последовательным типом, но последовательность по умолчанию () не синхронизируется с таблицей.

0 голосов
/ 19 сентября 2016

Я столкнулся с этой проблемой в моей среде разработки . Это сработало для меня phppgadmin->admin->reindex. Мое решение опасно в некоторых ситуациях, поскольку оно обновляет всю базу данных. Я предлагаю также искать другие решения при работе в производственной среде. Тем не менее, Analyse - хороший способ начать, как предлагает @Erwin Brandstetter

0 голосов
/ 18 марта 2012

на самом деле я думаю, что проблема вообще не связана с postgres. Это была комбинация одновременных дублированных вызовов ajax, создающих дублирующую запись, тогда ни одна из них не вставляется.

...