Czy istnieje sposób na zresetowanie klucza podstawowego tabeli PostgreSQL, aby ponownie zaczynał od 1 w tabeli zapełnionej?
W tej chwili generuje liczby od 1000000 wzwyż. Chcę, żeby wszystko się zresetowało i zaczęło do 1, zachowując wszystkie moje istniejące dane nienaruszone.
źródło
SELECT setval('table_id_seq', 10000)
SELECT setval('table_id_seq', 1)
, to po wstawieniu nowego rekordu id przyjmuje wartość 2, zamiast 1. Rozwiązanie Pawła Gościckiego działa. (PostgreSQL 9.3)Najlepszym sposobem na zresetowanie sekwencji, aby rozpocząć od numeru 1, jest wykonanie następujących czynności:
ALTER SEQUENCE <tablename>_<id>_seq RESTART WITH 1
Na przykład dla
users
tabeli byłoby to:ALTER SEQUENCE users_id_seq RESTART WITH 1
źródło
WITH 1
Parametr jest redundantnych i może być, pominięteseq
, można bypk
etc.) ... Ale to jest łatwe przez na psql przez\d my_table_name
. Lub sprawdź przez SQL,SELECT * FROM pg_indexes WHERE tablename like '%my_table_name%'
@bluish faktycznie wstawiając nowy rekord przy użyciu automatycznie zwiększanego klucza podstawowego, przypomina użycie sekwencji jawnie w ten sposób:
INSERT INTO MyTable (id, col1, ...) VALUES (MySeq.nextval(), val1, ...)
Tak więc, jeśli chcesz, aby pierwszy id miał wartość 1, powinieneś ustawić sekwencję na 0. Ale to jest poza granicami, więc musisz użyć instrukcji ALTER SEQUECE. Tak więc, jeśli masz pole seryjne o nazwie numer w menu tabeli, na przykład:
ALTER SEQUENCE menu_number_seq RESTART
doskonale wykonają pracę.
źródło