INSERT перестал получать новый ID, хотя строк в таблице намного меньше предела integer
INSERT перестал получать новый ID, хотя строк в таблице намного меньше предела integer Проверьте не только: SELECT max(id) ... а связанную sequence. Sequence выдаёт значения, а не считает сохранённые строки. Значение может быть потрачено при: — rollback после nextval(); — конфликтующей вставке; — прямом nextval(); — кэшировании; — другом потребителе sequence. Поэтому: MAX(id) ≠ last_value ≠ count(*) И важная оговорка: last_value не всегда означает следующий ID. При CACHE он может отражать уже зарезервированные значения. Проверьте: — тип ID-колонки; — связанную sequence; — data_type; — last_value; — max_value; — increment_by; — cycle; — фактический MAX(id); — скорость расходования диапазона. При NO CYCLE после достижения предела sequence больше не сможет выдать следующее значение. CYCLE для PK — не универсальное решение: sequence может вернуться к уже существующим идентификаторам и получить конфликт уникальности. Важно сопоставлять диапазон колонки и самой sequence. Изменение только одного из них может не решить проблему. Сохраните проверку, которую стоит добавить для старых таблиц с постоянно растущим ID. #УЦФОРС #PostgreSQL #DBA #SQL #ЭксплуатацияБД