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).
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.
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.
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.