Есть ли способ сбросить первичный ключ таблицы PostgreSQL, чтобы снова начать с 1 в заполненной таблице?
Сейчас он генерирует числа от 1000000 и выше. Я хочу, чтобы все было сброшено и началось с 1, сохранив все мои существующие данные нетронутыми.
источник
SELECT setval('table_id_seq', 10000)
SELECT setval('table_id_seq', 1)
, то при вставке новой записи id принимает значение 2 вместо 1. Решение Paweł Gościcki работает. (PostgreSQL 9.3)Лучший способ сбросить последовательность, чтобы начать с номера 1, - выполнить следующее:
ALTER SEQUENCE <tablename>_<id>_seq RESTART WITH 1
Так, например, для
users
таблицы это будет:ALTER SEQUENCE users_id_seq RESTART WITH 1
источник
WITH 1
Параметр redundand и он может быть опущенseq
, не может иpk
т.д.) . ... Но это легко, на PSQL по\d my_table_name
. Или проверьте с помощью SQL,SELECT * FROM pg_indexes WHERE tablename like '%my_table_name%'
@bluish на самом деле вставляет новую запись с использованием автоматически увеличивающегося первичного ключа, точно так же, как использование последовательности явно таким образом:
INSERT INTO MyTable (id, col1, ...) VALUES (MySeq.nextval(), val1, ...)
Итак, если вы хотите, чтобы первый идентификатор был равен 1, вам следует установить для своей последовательности значение 0. Но это выходит за рамки, поэтому вы должны использовать оператор ALTER SEQUECE. Итак, если у вас есть серийное поле с именем number в меню таблицы, например:
ALTER SEQUENCE menu_number_seq RESTART
сделает работу отлично.
источник