Столбец идентификации — это специальный столбец, значения которого генерируются автоматически на основе неявной последовательности. Он может использоваться для генерации значений ключа.
Для создания столбца идентификации используется GENERATED ...
AS IDENTITY в CREATE TABLE, например:
CREATE TABLE people (
id bigint GENERATED ALWAYS AS IDENTITY,
...,
);
или
CREATE TABLE people (
id bigint GENERATED BY DEFAULT AS IDENTITY,
...,
);
Дополнительные сведения см. в CREATE TABLE for more details.
Если INSERT выполняется для таблицы со столбцом идентификации и значение для этого столбца явно не указано, то вставляется значение, сгенерированное неявной последовательностью. Например, при использовании приведенных выше определений и наличии дополнительных соответствующих столбцов, выполнение команды
INSERT INTO people (name, address) VALUES ('A', 'foo');
INSERT INTO people (name, address) VALUES ('B', 'bar');
сгенерирует значения для id столбца, начиная с 1,
что приведет к следующему состоянию данных в таблице:
id | name | address ----+------+--------- 1 | A | foo 2 | B | bar
В качестве альтернативы ключевое слово DEFAULT может быть указано вместо конкретного значения для явного запроса значения, генерируемого последовательностью, например:
INSERT INTO people (id, name, address) VALUES (DEFAULT, 'C', 'baz');
Аналогично, данное ключевое слово DEFAULT может быть использовано в
UPDATE командах.
Таким образом, во многих отношениях столбец идентификации ведет себя как столбец со значением по умолчанию.
Предложения ALWAYS и BY DEFAULT в определении столбца определяют, каким образом обрабатываются значения, явно указанные пользователем в INSERT и UPDATE
командах. В INSERT команде, если
ALWAYS выбрано, значение, указанное пользователем, принимается только в том случае, если в INSERT инструкции указано
OVERRIDING SYSTEM VALUE. Если BY
DEFAULT выбрано, то значение, указанное пользователем, имеет приоритет. Таким образом, использование BY DEFAULT приводит к поведению, более похожему на использование значений по умолчанию, когда значение по умолчанию может быть переопределено явным значением, тогда как ALWAYS обеспечивает
дополнительную защиту от случайной вставки явного значения.
Тип данных столбца идентификации должен быть одним из типов данных, поддерживаемых последовательностями. (См. CREATE SEQUENCE.) Свойства связанной последовательности могут быть указаны при создании столбца идентификации (см. CREATE TABLE) или изменены позже (см. ALTER TABLE).
Столбец идентификации автоматически помечается как NOT NULL.
Однако столбец идентификации не гарантирует уникальность. (Последовательность
обычно возвращает уникальные значения, но она может быть сброшена, либо значения
могут быть вставлены в столбец идентификации вручную, как было сказано выше.)
Уникальность должна обеспечиваться с помощью PRIMARY KEY
или UNIQUE ограничения.
В иерархиях наследования таблиц столбцы идентификации и их свойства в дочерней таблице не зависят от свойств в её родительских таблицах. Дочерняя таблица не наследует столбцы идентификации или их свойства автоматически от родительского элемента. Во время INSERT или UPDATE, столбец рассматривается как столбец идентификации, если он является столбцом идентификации в таблице, указанной в команде, и тогда применяются соответствующие свойства идентификации.
Секции наследуют столбцы идентификации от секционированной таблицы. Они не могут иметь собственных столбцов идентификации. Свойства данного столбца идентификации одинаковы для всех секций в иерархии секционирования.