5.3. Идентификационные столбцы#
5.3. Идентификационные столбцы #
Столбец идентичности — это специальный столбец, который генерируется автоматически из неявной последовательности. Он может использоваться для генерации значений ключей.
Чтобы создать столбец идентификатора, используйте предложение 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 для получения более подробной информации.
Если команда 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
,
столбец рассматривается как столбец идентичности, если этот столбец является столбцом идентичности в таблице, указанной в операторе, и соответствующие свойства идентичности применяются.
Разделы наследуют столбцы идентификаторов от разделяемой таблицы. Они не могут иметь собственные столбцы идентификаторов. Свойства данного столбца идентификаторов согласованы во всех разделах в иерархии разделов.