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
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.
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;
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;
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 |
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;
si vous voulez réinitialiser incrémenter automatiquement à partir de l'interface graphique, suivez ces étapes.
- 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
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>;
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;
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