Поле |
Тип |
Модификатор |
Id |
Integer |
NOT NULL DEFAULT nextval ( 'shipments^ship id seq1) |
customerjd |
Integer |
|
isbn |
text |
|
ship_date |
timestamp with time zone |
Команда создания таблицы shipments с автоматически увеличивающимся значением по умолчанию и ограничением первичного ключа выглядит так:
CREATE TABLE shipments
(id integer DEFAULT nextval ('shipments_shipjd_seq')
PRIMARY KEY. customerjd integer, isbn text. ship_date timestamp)
В качестве значения по умолчанию для поля id назначается результат вызова nextval () для последовательности shi pments_shi p_i d_seq. Таким образом, при вставке записей без указания поля id значение автоматически генерируется по результату вызова функции.
ВНИМАНИЕ
Простая установка ограничения DEFAULT не гарантирует его применения. Пользователь способен вручную задать любое значение, что может привести к потенциальному нарушению уникальности в будущем. Для предотвращения конфликтов можно воспользоваться триггером. За дополнительной информацией обращайтесь к подразделу «Триггеры» этого раздела.
После вызова функции nextval О для последовательности в некотором сеансе (то есть подключении к PostgreSQL) функция currval () возвращает значение, полученное при предыдущем вызове nextval () в активном сеансе.
Примечание 2
Примечание 2
Текущее значение последовательностей ассоциируется с определенным сеансом, чтобы одновременные обращения со стороны нескольких пользователей не приводило к ошибкам. Два пользователя могут работать с одной последовательностью в разных сеансах, но при этом функция currval () возвращает последнее текущее значение последовательности для того сеанса, в котором она была вызвана.
В листинге 7.31 в таблицу shi pments вставляется новая запись, в которой не указано значение поля id. В этой ситуации используется значение по умолчанию, которое (см. табл. 7.2) определяется результатом приращения последовательности
shipments_ship_id_seq функцией nextvaK).
Затем функция currva() используется для выборки только что вставленной записи.