2011-05-13 17 views
10

¿No hay una manera fácil de hacer esto sin secuencias y disparadores? Tengo habilidades promedio de SQL, y quiero utilizar el método estándar de la industria para pl/sql (PostgreSQL). Estoy básicamente convertir más de esta tabla de ejemplo de la primavera de Seguridad:¿Cuál es el método aceptable para generar una clave primaria autoincrementada en PostgreSQL?

create table group_members (
    id bigint generated by default as identity(start with 0) primary key, 
    username varchar(50) not null, 
    group_id bigint not null, 
    constraint fk_group_members_group foreign key(group_id) references groups(id)); 

Lo que tengo hasta ahora:

CREATE TABLE auth_group_members (
    id NUMBER, 
    username VARCHAR(50) NOT NULL, 
    group_id NUMBER NOT NULL, 
    CONSTRAINT "FK_AuthGroupMembers" FOREIGN KEY(group_id) REFERENCES auth_groups(id) 
); 

Respuesta

13

La manera estándar sería utilizar serial or bigserial:

Los datos los tipos serie y bigserial no son tipos verdaderos, sino simplemente una conveniencia de notación para crear columnas de identificador únicas (similar a la propiedad AUTO_INCREMENT soportada por algunas otras bases de datos).
[...]
Por lo tanto, hemos creado una columna entera y arreglado para que sus valores predeterminados sean asignados desde un generador de secuencia.

Por lo que crearía la mesa con algo como esto:

CREATE TABLE auth_group_members (
    id bigserial primary key, 
    username VARCHAR(50) NOT NULL, 
    group_id NUMBER NOT NULL, 
    CONSTRAINT "FK_AuthGroupMembers" FOREIGN KEY(group_id) REFERENCES auth_groups(id) 
); 

Los serial y bigserial tipos hacerlo crear unas secuencias detrás de las escenas, pero que nunca tenga que trabajar con la secuencia directa.

+2

La tabla original decía 'id bigint ...' así que el mejor equivalente sería 'bigserial'. – cjm

+0

Pensé que podría ser en serie en función de lo que estaba viendo en pgadmin, pero cada vez que buscaba palabras clave en serie o en plsql en Google obtenía un montón de enlaces para software descifrado :(¡Muchísimas gracias! –

+2

@ hal100001: es posible que desee marcar la [documentación de PostgreSQL] (http://www.postgresql.org/docs/manuals/), es muy buena e incluso incluye un índice. –

Cuestiones relacionadas