Postgresql устанавливает следующий идентификатор для записи в
Я недавно перенес базу данных из mysql в pgsql 9.
Но теперь, когда я пытаюсь создать новый объект (в django admin), он говорит мне, что идентификатор, который я пытаюсь использовать (начинался с единицы и увеличивался при каждой попытке), уже используется.
Я предполагаю, что есть указатель или индекс, который должен быть установлен в последний использованный идентификатор. Я прав?
2 ответа
Когда вы определяете свою таблицу, PostgreSQL эквивалентен 'auto_increment':
CREATE TABLE foo (
id SERIAL,
...
);
Если ваша таблица уже создана (как я подозреваю), вы можете добавить это вручную:
CREATE SEQUENCE foo_id_seq;
ALTER TABLE foo ALTER COLUMN id SET DEFAULT nextval('foo_id_seq');
Обратите внимание, что если вы хотите придерживаться имени по умолчанию, которое дал бы Pg , используйте следующий формат для вашего имени последовательности:
<table name>_<column name>_seq
Таким образом, в моем примере foo_id_seq
,
Если таблица была перенесена и использует последовательный интерфейс для замены столбца автоинкремента mysql, ваши данные, вероятно, были перенесены без увеличения последовательной последовательности. Посмотрите на postgresql setval
Функция для установки вашей последовательности на значение выше самого высокого существующего ключа в вашей таблице.