PostgreSQL Autoincrement

Ik'ben aan het overschakelen van MySQL naar PostgreSQL en vroeg me af hoe ik auto-increment waarden kan doen. Ik zag in de PostgreSQL docs een datatype "serial", maar ik krijg syntaxfouten bij het gebruik ervan (in v8.0).

Oplossing

Ja, SERIAL is de equivalente functie.

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 is slechts een macro om reeksen in tabeltijd aan te maken. U kunt SERIAL niet wijzigen in een bestaande kolom.

Commentaren (15)

U kunt elk ander integer data type gebruiken, zoals smallint.

Voorbeeld :

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;

Het is beter om uw eigen datatype te gebruiken, in plaats van user serial data type.

Commentaren (9)

In de context van de gestelde vraag en in antwoord op de opmerking van @sereja1c, creëert het creëren van SERIAL impliciet sequenties, dus voor het bovenstaande voorbeeld-

CREATE TABLE foo (id SERIAL,bar varchar);

CREATE TABLE zou impliciet sequentie foo_id_seq aanmaken voor seriële kolom foo.id. Vandaar dat SERIAL [4 Bytes] goed is voor zijn gebruiksgemak, tenzij u een specifiek datatype nodig heeft voor uw id.

Commentaren (0)