Autoincrement de clé primaire PostgreSQL 9.1

J'essaie d'ajouter une clé primaire avec un auto-incrément.

J'ai lu quelques documents 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.

31
demandé sur WildDev 2013-12-26 11:43:01

1 réponses

serial est, plus ou moins, un type de colonne ainsi dire integer serial, c'est comme dire text text, dis - serial:

CREATE TABLE IF NOT EXISTS "category" (
  "id" SERIAL PRIMARY KEY,
  "name" varchar(30) DEFAULT NULL
);

Si vous voulez créer la séquence de vous-même alors vous voulez faire de la valeur par défaut de id la valeur suivante dans la séquence et que 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 de serial, vous devez également faire en sorte que la séquence appartienne à la table:

alter sequence your_seq owned by category.id;

La lecture de la section Serial Types du manuel peut être fructueux.


Je vous recommande également de ne pas doubler les noms de votre table et de votre colonne, sauf si vous le devez. PostgreSQL pliera vos identifiants en minuscules, donc id et "id" seront la même chose, mais les citations inutiles sont une mauvaise habitude qui peut facilement conduire à un gros gâchis de citations partout.

84
répondu mu is too short 2013-12-26 07:51:26