Autoincremento de PostgreSQL

Estoy cambiando de MySQL a PostgreSQL y me preguntaba cómo puedo hacer valores de autoincremento. Vi en los documentos de PostgreSQL un tipo de datos "serial", pero me da errores de sintaxis cuando se utiliza (en v8.0).

Solución

Sí, SERIAL es la función 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 es sólo una macro de creación de tiempo de la tabla en torno a las secuencias. No se puede alterar SERIAL en una columna existente.

Comentarios (15)

Puede utilizar cualquier otro tipo de dato entero, como smallint.

Ejemplo :

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;

Es mejor utilizar su propio tipo de datos, en lugar del usuario [tipo de datos en serie] (http://www.postgresql.org/docs/9.1/static/datatype-numeric.html#DATATYPE-SERIAL).

Comentarios (9)

En el contexto de la pregunta formulada y en respuesta al comentario de @sereja1c, la creación de SERIAL crea implícitamente secuencias, por lo que para el ejemplo anterior-

CREATE TABLE foo (id SERIAL,bar varchar);

CREATE TABLE crearía implícitamente la secuencia foo_id_seq para la columna serial foo.id. Por lo tanto, SERIAL [4 Bytes] es bueno por su facilidad de uso a menos que necesite un tipo de datos específico para su id.

Comentarios (0)