Сброс последовательностей (счётчиков) в PostgreSQL¶
Назначение¶
Команда reset_sequences исправляет автоинкрементные счётчики (sequences) в таблицах PostgreSQL после операций, которые могли нарушить их состояние.
Когда использовать¶
Используйте команду в случаях:
- После массового импорта данных через
COPYилиpg_restore - После использования
bulk_create()в Django - Когда новые записи получают ID с 1, хотя в таблице уже есть данные
- При ошибках дублирования первичных ключей
Использование¶
Базовый синтаксис¶
python manage.py reset_sequences [таблицы...] [--exclude таблицы...]
Примеры команд¶
- Сбросить все последовательности:
python manage.py reset_sequences
- Сбросить конкретные таблицы:
python manage.py reset_sequences auth_user products_orders
- Исключить таблицы из обработки:
python manage.py reset_sequences --exclude django_migrations sessions
- Комбинированный пример:
python manage.py reset_sequences users orders --exclude users_logs
Параметры¶
| Параметр | Описание |
|---|---|
| таблицы | Список таблиц для обработки (опционально) |
| --exclude | Список таблиц для исключения |
| --verbosity | Уровень детализации вывода (0-2) |
Как это работает¶
- Находит таблицы с последовательностями
- Устанавливает значение последовательности в
MAX(id) + 1для каждой таблицы - Поддерживает фильтрацию по таблицам
Важные примечания¶
- Работает только с PostgreSQL
- Не изменяет существующие данные - только счётчики
- Рекомендуется выполнять перед переходом в production после массовых операций
- Для больших таблиц может потребоваться время
Пример вывода¶
$ python manage.py reset_sequences auth_user --verbosity 2
Сброшена последовательность для auth_user.id (новое значение: 1257)