Columnas de identidad
importante
Cuando se utilizan columnas de identidad, se debe considerar con cuidado el valor de la caché. Para obtener más información, consulte el aviso Importante de la página CREATE SEQUENCE.
Para obtener orientación sobre la mejor manera de utilizar las columnas de identidad en función de los patrones de carga de trabajo, consulte Trabajar con secuencias y columnas de identidad.
Una columna de identidad es una columna especial que se genera automáticamente a partir de una secuencia implícita. Se puede usar para generar valores clave. Para crear una columna de identidad, utilice la cláusula GENERATED ... AS IDENTITY en CREATE TABLE, por ejemplo:
CREATE TABLE people ( id bigint GENERATED ALWAYS AS IDENTITY (CACHE 70000), ... );
o, de forma alternativa:
CREATE TABLE people ( id bigint GENERATED BY DEFAULT AS IDENTITY (CACHE 70000), ... );
Consulte CREATE TABLE para obtener más detalles.
Si se ejecuta un comando INSERT en la tabla con la columna de identidad y no se especifica ningún valor explícito para la columna de identidad, se inserta un valor generado por la secuencia implícita. Por ejemplo, con las definiciones anteriores y suponiendo que haya columnas adicionales adecuadas, escribir:
INSERT INTO people (name, address) VALUES ('A', 'foo'); INSERT INTO people (name, address) VALUES ('B', 'bar');
generaría valores para la columna id empezando por 1 y daría como resultado los siguientes datos de la tabla:
id | name | address ----+------+--------- 1 | A | foo 2 | B | bar
Como alternativa, la clave DEFAULT se puede especificar en lugar de un valor para solicitar explícitamente el valor generado por la secuencia:
INSERT INTO people (id, name, address) VALUES (DEFAULT, 'C', 'baz');
Del mismo modo, la palabra clave DEFAULT se puede utilizar en los comandos UPDATE.
Por lo tanto, en muchos aspectos, una columna de identidad se comporta como una columna con un valor predeterminado.
Las cláusulas ALWAYS y BY DEFAULT en la definición de la columna determinan cómo se gestionan de forma explícita los valores especificados por el usuario en los comandos INSERT y UPDATE. En un comando INSERT, si se selecciona ALWAYS, solo se acepta un valor especificado por el usuario si la instrucción INSERT especifica OVERRIDING SYSTEM VALUE. Si se selecciona BY DEFAULT, prevalece el valor especificado por el usuario. Por lo tanto, el uso de BY DEFAULT da como resultado un comportamiento más similar a los valores predeterminados, donde el valor predeterminado puede ser anulado por un valor explícito, mientras que ALWAYS proporciona una mayor protección contra la inserción accidental de un valor explícito.
El tipo de datos de una columna de identidad debe ser uno de los tipos de datos compatibles con las secuencias. (Consulte CREATE SEQUENCE.) Las propiedades de la secuencia asociada se pueden especificar al crear una columna de identidad (consulte CREATE TABLE) o modificarse posteriormente (consulte ALTER TABLE).
Una columna de identidad se marca automáticamente como NOT NULL. Sin embargo, una columna de identidad no garantiza la unicidad. (Una secuencia normalmente devuelve valores únicos, pero una secuencia podría restablecerse, o los valores podrían insertarse manualmente en la columna de identidad, como se ha comentado anteriormente). La unicidad tendría que imponerse mediante una restricción UNIQUE o PRIMARY KEY.