Prechádzam z MySQL na PostgreSQL a zaujímalo by ma, ako môžem urobiť automatické zvyšovanie hodnôt. V dokumentoch k PostgreSQL som videl dátový typ "serial", ale pri jeho použití (vo verzii 8.0) dostávam syntaktické chyby.
Áno, SERIAL je ekvivalentná funkcia.
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 je len makro na vytváranie tabuliek okolo sekvencií. Nemôžete zmeniť SERIAL na existujúci stĺpec.
Môžete použiť akýkoľvek iný celočíselný dátový typ, napríklad smallint
.
Príklad :
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;
Lepšie je použiť vlastný dátový typ, než používateľský sériový dátový typ.
V kontexte položenej otázky a v odpovedi na komentár @sereja1c, vytváranie SERIAL
implicitne vytvára sekvencie, takže pre vyššie uvedený príklad -
CREATE TABLE foo (id SERIAL,bar varchar);
CREATE TABLE
by implicitne vytvoril sekvenciu foo_id_seq
pre sériový stĺpec foo.id
. Preto je SERIAL
[4 bajty] dobrý pre svoje jednoduché použitie, pokiaľ nepotrebujete špecifický dátový typ pre vaše id.