Django запускает первичный ключ с 1, когда в базе данных уже есть данные

У меня есть база данных pg, созданная migrate с Django, все таблицы были созданы успешно и пусты в начале.

Теперь мне нужно заполнить одну из таблиц из резервной копии базы данных, созданной с помощью pgdump. В этой базе данных есть таблица transactions, которая содержит данные (считайте, что FK нет, и схема таблицы та же), поэтому, используя pgrestore, я восстановил только эту таблицу транзакций из резервной копии базы данных. Все восстановилось и данные также отображаются в веб-приложении Django.

Но Теперь, когда я создаю новую запись в этой таблице с помощью веб-приложения django, django начинает присваивать первичный ключ 1 вновь созданной записи, но поскольку таблица восстановлена из резервной копии базы данных, этот id уже существует, если я попробую снова, django попытается присвоить PK 2, затем 3 и так далее. Но эти операции уже были восстановлены из резервной копии БД

Как сообщить Django идентификатор последней транзакции, чтобы он мог начать присваивать его оттуда?

Django не решает, как генерируются первичные ключи для AutoField [Django- doc] (или BigAutoField [Djang-doc] или SmallAutoField [Django-doc]): именно база данных присваивает им значения.

В PostgreSQL база данных использует последовательности, и каждый раз, когда ей нужно определить значение, она обновляет последовательность, так что в следующий раз будет дано другое значение. Таким образом, вам необходимо обновить эту последовательность.

Как вы сами выяснили, это можно сделать с помощью:

ALTER SEQUENCE public.modelname_id_seq RESTART some_value
Вернуться на верх