J'essaie d'ajouter une clé primaire avec un auto-incrémentation.
J'ai lu des docs et d'autres questions - il y a des instructions SERIAL
et nextval()
mais cela ne fonctionne pas.
Voici ce que j'ai fait:
CREATE TABLE IF NOT EXISTS "category" (
"id" integer SERIAL PRIMARY KEY,
"name" varchar(30) DEFAULT NULL
); // the error near "SERIAL"
et
CREATE SEQUENCE your_seq;
CREATE TABLE IF NOT EXISTS "category" (
"id" integer PRIMARY KEY nextval('your_seq'),
"name" varchar(30) DEFAULT NULL
); // the error near 'nextval'
Qu'est-ce que je me trompe? Je veux juste incrémenter la clé primaire de 1.
serial
est plus ou moins un type de colonne. Dire integer serial
revient donc à dire text text
, il suffit de dire serial
:
CREATE TABLE IF NOT EXISTS "category" (
"id" SERIAL PRIMARY KEY,
"name" varchar(30) DEFAULT NULL
);
Si vous voulez créer la séquence vous-même, vous voulez que la valeur par défaut de id
soit la prochaine valeur de la séquence, ce qui signifie que vous devez dire default nextval('your_seq')
:
CREATE SEQUENCE your_seq;
CREATE TABLE IF NOT EXISTS "category" (
"id" integer PRIMARY KEY default nextval('your_seq'),
"name" varchar(30) DEFAULT NULL
);
Pour simuler le comportement habituel serial
, vous souhaiterez également que la séquence appartienne à la table:
alter sequence your_seq owned by category.id;
La lecture de la section Serial Types de ce manuel pourrait être fructueuse.
Je vous recommande également de ne pas mettre de double guillemet vos noms de table et de colonne à moins que vous n'ayez à le faire. PostgreSQL repliera vos identifiants en minuscules pour que id
et "id"
Soient identiques, mais les citations inutiles sont une mauvaise habitude qui peut facilement conduire à un grand désordre de citations partout.
Si quelqu'un doit modifier une table existante pour ajouter une clé primaire avec incrémentation automatique:
ALTER TABLE table_name ADD COLUMN pk_column_name SERIAL PRIMARY KEY;