Подтвердить что ты не робот

Reset Первичный ключ PostgreSQL для 1

Есть ли способ reset первичный ключ таблицы PostgreSQL, чтобы начать с 1 снова в заполненной таблице?

Сейчас он генерирует числа от 1000000 и выше. Я хочу все это reset и начинаю 1, сохраняя все мои существующие данные.

4b9b3361

Ответ 1

Первичные ключи, для которых выполняется автоинкремент (т.е. столбцы с типом данных serial primary key), связаны с последовательностью. Вы можете установить следующее значение для любой последовательности, используя функцию setval(<seqname>, <next_value>). Обратите внимание, что для фактического выполнения функции вам нужно использовать SELECT, например: SELECT setval(<seqname>, <next_value>)

Имя автоматически созданных последовательностей при использовании последовательных имен <table>_<column>_seq

Ответ 2

Лучший способ reset выполнить последовательность, начинающуюся с номера 1, - выполнить следующее:

ALTER SEQUENCE <tablename>_<id>_seq RESTART WITH 1

Итак, например, для таблицы users это будет:

ALTER SEQUENCE users_id_seq RESTART WITH 1

Ответ 3

@bluish фактически вставляет новую запись, используя первичный ключ с автоинкрементом, все равно, что использовать последовательность явно следующим образом:

INSERT INTO MyTable (id, col1, ...) VALUES (MySeq.nextval(), val1, ...)

Итак, если вы хотите, чтобы первый идентификатор был 1, вам нужно установить вашу последовательность равной 0. Но она выходит за пределы, поэтому вы должны использовать инструкцию ALTER SEQUECE. Итак, если у вас есть последовательное поле с именем number в меню таблицы, например:

ALTER SEQUENCE menu_number_seq RESTART

сделает работу отлично.