Перейти к содержанию

Сброс последовательностей (счётчиков) в PostgreSQL

Назначение

Команда reset_sequences исправляет автоинкрементные счётчики (sequences) в таблицах PostgreSQL после операций, которые могли нарушить их состояние.

Когда использовать

Используйте команду в случаях:

  1. После массового импорта данных через COPY или pg_restore
  2. После использования bulk_create() в Django
  3. Когда новые записи получают ID с 1, хотя в таблице уже есть данные
  4. При ошибках дублирования первичных ключей

Использование

Базовый синтаксис

python manage.py reset_sequences [таблицы...] [--exclude таблицы...]

Примеры команд

  1. Сбросить все последовательности:
python manage.py reset_sequences
  1. Сбросить конкретные таблицы:
python manage.py reset_sequences auth_user products_orders
  1. Исключить таблицы из обработки:
python manage.py reset_sequences --exclude django_migrations sessions
  1. Комбинированный пример:
python manage.py reset_sequences users orders --exclude users_logs

Параметры

Параметр Описание
таблицы Список таблиц для обработки (опционально)
--exclude Список таблиц для исключения
--verbosity Уровень детализации вывода (0-2)

Как это работает

  1. Находит таблицы с последовательностями
  2. Устанавливает значение последовательности в MAX(id) + 1 для каждой таблицы
  3. Поддерживает фильтрацию по таблицам

Важные примечания

  1. Работает только с PostgreSQL
  2. Не изменяет существующие данные - только счётчики
  3. Рекомендуется выполнять перед переходом в production после массовых операций
  4. Для больших таблиц может потребоваться время

Пример вывода

$ python manage.py reset_sequences auth_user --verbosity 2
Сброшена последовательность для auth_user.id (новое значение: 1257)