Autoincremento PostgreSQL

Sto passando da MySQL a PostgreSQL e mi stavo chiedendo come posso fare valori autoincrementati. Ho visto nella documentazione di PostgreSQL un datatype "serial", ma ottengo errori di sintassi quando lo uso (in v8.0).

Soluzione

Sì, SERIAL è la funzione equivalente.

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 è solo una macro di creazione di tabelle intorno alle sequenze. Non si può alterare SERIAL su una colonna esistente.

Commentari (15)

Potete usare qualsiasi altro tipo di dati interi, come smallint.

Esempio :

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;

Meglio usare il proprio tipo di dati, piuttosto che l'utente tipo di dati seriali.

Commentari (9)

Nel contesto della domanda posta e in risposta al commento di @sereja1c, la creazione di SERIAL crea implicitamente delle sequenze, quindi per l'esempio precedente-

CREATE TABLE foo (id SERIAL,bar varchar);

CREATE TABLE creerebbe implicitamente la sequenza foo_id_seq per la colonna seriale foo.id. Quindi, SERIAL [4 Bytes] è buono per la sua facilità d'uso a meno che non abbiate bisogno di un tipo di dato specifico per il vostro id.

Commentari (0)