SQL проблема: повторяющееся значение ключа нарушает уникальное ограничение - PullRequest
1 голос
/ 16 января 2020

Я использую Postgres10 на PGAdmin4

Чтобы проверить, не синхронизирована ли моя база данных c, я проверяю последовательность первичного ключа и первичного ключа.

Я выполняю этот запрос для проверки первичного ключа:

  • MAX(sid) FROM schema_name.table_name; Возвращает 1032

    • sid является основным ключ

    • имя_схемы - это схема, в которой находится моя таблица

    • имя_таблицы - это имя таблицы, в которой нарушается уникальное ограничение

Я выполняю этот запрос для проверки последовательности первичного ключа:

  • SELECT nextval(pg_get_serial_sequence('schema_name.table_name', 'sid')); возвращает 1042 (текущее значение 1041).

Ссылка на это SO: Я ссылаюсь на переполнение стека: postgresql дубликат ключа нарушает уникальное ограничение

Но посту 9 лет и только решение проверяет, больше ли максимальное значение первичного ключа, чем следующее значение последовательности (чего в моем случае нет).

1 Ответ

0 голосов
/ 17 января 2020

У меня возникли проблемы с несоответствующим ключом c с последовательностью, когда пользовательская программа вставляет записи записей в таблицу и принимает last_key_value + 1, в то время как другая программа использует последовательность nextval для вставки в ту же таблицу.

Это может создать проблемы с дублирующимися ключами.

Я бы проверил, чтобы убедиться, что у вас нет программ с этим конфликтом.

Лучший способ Чтобы полностью обойти проблему такого типа, используйте столбец типа IDENTITY. Хотя я не знаю, поддерживает ли Postgres этот тип данных.

...