Je passe de MySQL à PostgreSQL et je me demandais comment faire des valeurs auto-incrémentées. J'ai vu dans la documentation de PostgreSQL un type de données "serial" ;, mais j'obtiens des erreurs de syntaxe lorsque je l'utilise (en v8.0).
Oui, SERIAL est la fonction équivalente.
CREATE TABLE foo (
id SERIAL,
bar varchar);
INSERT INTO foo (bar) values ('blah');
INSERT INTO foo (bar) values ('blah');
SELECT * FROM foo;
1,blah
2,blah
SERIAL est juste une macro de création de table autour des séquences. Vous ne pouvez pas modifier SERIAL sur une colonne existante.
Vous pouvez utiliser tout autre [type de données entier] (http://www.postgresql.org/docs/9.1/static/datatype-numeric.html#DATATYPE-INT), comme smallint
.
Exemple :
CREATE SEQUENCE user_id_seq;
CREATE TABLE user (
user_id smallint NOT NULL DEFAULT nextval('user_id_seq')
);
ALTER SEQUENCE user_id_seq OWNED BY user.user_id;
Il est préférable d'utiliser votre propre type de données, plutôt que le [type de données série] de l'utilisateur (http://www.postgresql.org/docs/9.1/static/datatype-numeric.html#DATATYPE-SERIAL).
Dans le contexte de la question posée et en réponse au commentaire de @sereja1c, la création de SERIAL
crée implicitement des séquences, donc pour l'exemple ci-dessus-
CREATE TABLE foo (id SERIAL,bar varchar);
CREATE TABLE
créerait implicitement la séquence foo_id_seq
pour la colonne série foo.id
. Donc, SERIAL
[4 Bytes] est bon pour sa facilité d'utilisation à moins que vous ayez besoin d'un type de données spécifique pour votre id.