Сбросить первичный ключ PostgreSQL к 1 - PullRequest
61 голосов
/ 29 сентября 2010

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

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

Ответы [ 3 ]

145 голосов
/ 11 марта 2011

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

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

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

ALTER SEQUENCE users_id_seq RESTART WITH 1
29 голосов
/ 29 сентября 2010

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

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

0 голосов
/ 09 января 2018

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

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

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

ALTER SEQUENCE menu_number_seq RESTART

отлично выполнит работу.

...