web-dev-qa-db-fra.com

Réinitialiser la clé primaire PostgreSQL sur 1

Est-il possible de réinitialiser la clé primaire d'une table PostgreSQL pour qu'elle recommence à 1 sur une table remplie?

À l'heure actuelle, il génère des nombres à partir de 1000000 et plus. Je veux tout réinitialiser et commencer à 1, en conservant intactes toutes mes données existantes.

53
David

Les clés primaires auto-incrémentées (c'est-à-dire les colonnes de type de données serial primary key) sont associées à un sequence . Vous pouvez définir la valeur suivante pour n’importe quelle séquence en utilisant la fonction setval(<seqname>, <next_value>). Notez que pour exécuter la fonction elle-même, vous devez utiliser SELECT , comme ceci: SELECT setval(<seqname>, <next_value>)

Le nom des séquences créées automatiquement lors de l’utilisation de la série est <table>_<column>_seq

27
Vinko Vrsalovic

Le meilleur moyen de réinitialiser une séquence pour recommencer avec le numéro 1 est d'exécuter les tâches suivantes:

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

Ainsi, par exemple, pour la table users, ce serait:

ALTER SEQUENCE users_id_seq RESTART WITH 1
129
Paweł Gościcki

En réalité, @bluish insère un nouvel enregistrement à l'aide d'une clé primaire auto-incrémentée, c'est comme utiliser explicitement une séquence de la manière suivante:

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

Donc, si vous voulez que le premier identifiant soit 1, vous devez définir votre séquence sur 0. Mais il n’est pas possible, vous devez donc utiliser l’instruction ALTER SEQUECE . Donc, si vous avez un champ de série nommé numéro dans votre menu de table, par exemple:

ALTER SEQUENCE menu_number_seq RESTART

fera le travail parfaitement.

0