web-dev-qa-db-fra.com

Réinitialiser le compteur d'incrémentation automatique en postgres

Je voudrais forcer le champ d'incrémentation automatique d'une table à une valeur, j'ai essayé avec ceci:

ALTER TABLE product AUTO_INCREMENT = 1453

ET

ALTER SEQUENCE product  RESTART WITH 1453;
ERROR:  relation "your_sequence_name" does not exist

Je suis nouveau sur postgres :(

J'ai une table product avec le champ Id et name

186
Rad

Si vous avez créé la table product avec une colonne id, la séquence n'est pas simplement appelée product, mais plutôt product_id_seq (c'est-à-dire ${table}_${column}_seq).

Voici la commande ALTER SEQUENCE dont vous avez besoin:

ALTER SEQUENCE product_id_seq RESTART WITH 1453

Vous pouvez voir les séquences dans votre base de données à l'aide de la commande \ds dans psql. Si vous faites \d product et que vous regardez la contrainte par défaut pour votre colonne, l'appel nextval(...) spécifiera également le nom de la séquence.

238
araqnid

Voici la commande que vous recherchez, en supposant que votre séquence pour la table product est product_id_seq:

ALTER SEQUENCE product_id_seq RESTART WITH 1453;

140
matt snider

La commande suivante le fait automatiquement pour vous: Ceci supprimera également toutes les données de la table. Soyez donc prudent.

TRUNCATE TABLE someTable RESTART IDENTITY;
111
Loolooii

Pour définir le compteur de séquence:

setval('product_id_seq', 1453);

Si vous ne connaissez pas le nom de la séquence, utilisez la fonction pg_get_serial_sequence:

select pg_get_serial_sequence('product', 'id');
 pg_get_serial_sequence 
------------------------
 public.product_id_seq

Les paramètres sont le nom de la table et le nom de la colonne.

Ou simplement émettre un \d product à l'invite psql:

=> \d product
                         Table "public.product"
 Column |  Type   |                      Modifiers                       
--------+---------+------------------------------------------------------
 id     | integer | not null default nextval('product_id_seq'::regclass)
 name   | text    | 
52
Clodoaldo Neto

Converti à partir d'un commentaire pour la commodité du visiteur

Ce message ne précise pas quelle est la syntaxe correcte. Il est:

ALTER SEQUENCE product_id_seq RESTART WITH 1453;
12
Anwar

si vous voulez réinitialiser incrémenter automatiquement à partir de l'interface graphique, suivez ces étapes.

  1. Allez à votre base de données
  2. Cliquez sur Public
  3. dans la page de liste des tableaux, vous pouvez voir TABS comme 'Tableaux', 'Vues', 'Séquences' comme ça.
  4. Cliquez sur séquences
  5. lorsque vous cliquez sur "Séquences", vous pouvez voir la liste des séquences, cliquez sur celle que vous souhaitez réinitialiser
  6. Après cela, vous pouvez voir les choix multiples comme "Alter", "Définir la valeur", "Redémarrer", "Réinitialiser", etc.
  7. puis cliquez sur Réinitialiser, puis ajoutez une nouvelle ligne.
3
Chaudhary

- Changer la valeur de départ de la séquence

ALTER SEQUENCE project_id_seq RESTART 3000;

Identique mais dynamique:

SELECT SETVAL('project_id_seq', (SELECT MAX(id) + 1 FROM project));

Je suis d'accord que l'utilisation d'un SELECT est dérangeante mais cela fonctionne.

Source: https://kylewbanks.com/blog/Adding-or-Modifying-a-PostgreSQL-Sequence-Auto-Increment

3
Wiwwil

Si vous avez une table avec une colonne IDENTITY pour laquelle vous souhaitez réinitialiser la valeur suivante, vous pouvez utiliser la commande suivante:

ALTER TABLE <table name> 
    ALTER COLUMN <column name> 
        RESTART WITH <new value to restart with>;
2
BrianB

Pour réinitialiser l'incrément automatique, vous devez obtenir votre nom de séquence en utilisant la requête suivante.

Syntaxe:

SELECT pg_get_serial_sequence(‘tablename’, ‘ columnname‘);

Exemple:

SELECT pg_get_serial_sequence('demo', 'autoid');

La requête renvoie le nom de séquence de l'autoïde sous la forme "Demo_autoid_seq" Utilisez ensuite la requête suivante pour réinitialiser l'autoïde.

Syntaxe:

ALTER SEQUENCE sequenceName RESTART WITH value;

Exemple:

ALTER SEQUENCE "Demo_autoid_seq" RESTART WITH 1453;
2
vinoth shankar

Pour obtenir un identifiant de séquence, utilisez

SELECT pg_get_serial_sequence('tableName', 'ColumnName');

Cela vous donnera un identifiant de séquence sous la forme tableName_ColumnName_seq

Pour obtenir le dernier numéro de graine, utilisez

select currval(pg_get_serial_sequence('tableName', 'ColumnName'));

ou si vous connaissez l'identifiant de la séquence, utilisez-le déjà directement.

select currval(tableName_ColumnName_seq);

Il vous donnera le dernier numéro de graine

Pour réinitialiser le numéro de graine, utilisez

ALTER SEQUENCE tableName_ColumnName_seq RESTART WITH 45
1
Raja A