Intereting Posts
Oracle – лучший оператор SELECT для получения разницы в минутах между двумя столбцами DateTime? Карта категории родительский идентификатор сама привязка структуры таблицы к основному объекту EF Случай с несколькими условиями в SQL Server 2014 MySQL – Получить номер строки на выбранном TypeError: объект 'int' не поддерживает индексирование Как удалить дубликат с определенным условием выберите последние 2 записи каждого идентификатора продукта в отдельной таблице Что делает Include () в LINQ? C # Неверная попытка вызова Чтение, когда читатель закрыт передача значения combobox в sql-запрос MS ACCESS Запах кода SQL ORA-01830: изображение формата даты заканчивается перед преобразованием всей строки ввода Как порядок order by действует, если два значения равны? Как вставить INSERT в таблицу, которая использует последовательные GUID в качестве первичного ключа? Ошибка Oracle Query

Postgresql неверный автоинкремент для последовательного

У меня проблема с postgresql, которая, я думаю, есть ошибка в postgresql, я неправильно что-то реализую.

Существует таблица, включающая colmn1(primary key) , colmn2(unique) , colmn3 , …

После вставки строки, если я попробую другую вставку с существующим значением colmn2 я получаю ошибку повторяющегося значения, как я ожидал. Но после этой неудачной попытки, следующее значение colmn1 увеличивается на 1, хотя вставки нет, поэтому я получаю строки с идентификационными последовательностями, такими как 1,2,4,6,9.(3,5,6,7,8 идет на неудачные испытания).

Мне нужна помощь тех, кто может объяснить это странное поведение.

Эта информация может быть полезна: я использовал « create unique index on tableName (lower(column1)) » для установки уникального ограничения.

См. Частоту PostgreSQL :

Последовательности предназначены для генерации уникальных идентификаторов – не обязательно идентификаторов, которые являются строго последовательными. Если два клиента одновременной базы данных попытаются получить значение из последовательности (используя nextval ()), каждый клиент получит другое значение последовательности. Если один из этих клиентов впоследствии прервет свою транзакцию, значение последовательности, которое было создано для этого клиента, будет не использовано, создавая разрыв в последовательности.

Это невозможно легко устранить без существенного снижения производительности. Для получения дополнительной информации см. «Бесполезные последовательности для первичных ключей » Элеина Мустеина в бюллетене «Общие биты».

Из руководства :

Важно: поскольку последовательности не являются транзакционными, изменения, сделанные setval, не отменены, если транзакция откат.

Другими словами, нормально иметь пробелы. Если вы не хотите пробелов, не используйте последовательность.