Иллюстрированный самоучитель по PostgreSQL

Автоматизация стандартных процедур

Операции с последовательностями

Выборка атрибутов последовательности требуется относительно редко. Как правило, все операции с последовательностями выполняются при помощи трех специальных функций PostgreSQL.

  • nextval ('последовательность'). Увеличивает текущее значение заданной последовательности и возвращает новое значение в виде величины типа integer.
  • currval ('последовательность'). Возвращает значение, полученное при последнем вызове nextval (). Значение ассоциируется с определенным сеансом PostgreSQL, поэтому если функция nextval () еще не вызывалась для заданного подключения в текущем сеансе, функция не сможет вернуть значение.
  • setval ('последовательность' .n). Присваивает число п текущему значению заданной последовательности. Следующий вызов nextval () возвращает значение п+приращение, где приращение – изменение текущего значения последовательности при каждой итерации.
  • setval ('последовательность' .n .b). Также присваивает число п текущему значению заданной последовательности. Если параметр b (тип boolean) равен false, то следующий вызов nextval () вернет значение п, а если параметр равен true, то будет возвращено значение п+приращение, как при вызове функции setval () без дополнительного аргумента.

Чаще всего при работе с последовательностями используется функция nextval (), при вызове которой и происходит увеличение текущего значения. В качестве аргумента функция получает имя последовательности, заключенное в апострофы, а возвращает значение типа Integer.

В листинге 7.30 выводится пара очередных значений последовательности с именем shipments_ship_id_seq.

Листинг 7.30. Изменение текущего значения последовательности.

booktown=# SELECT nextvaH 'shipments_shipjd_seq');
nextval
1 (1 row)
booKtown=# SELECT nextval ('shipments_ship_id_seq'):
nextval
2
(1 row)

Примечание
При первом вызове функция nextval () возвращает начальное значение последовательности (заданное с ключевым словом START). Причина – функция не вызывалась, поэтому приращение еще не произошло. При всех последующих вызовах nextval () атрибут last_value изменяется
.

Последовательности часто используются при определении значений по умолчанию для таблиц, в которых должны храниться уникальные целочисленные идентификаторы. Пример приведен в табл. 7.2.

Таблица 7.2. Таблица shipments.

Поле Тип Модификатор
Id Integer NOT NULL DEFAULT nextval ('shipments^ship id seq1)
customerjd Integer  
isbn text  
ship_date timestamp with time zone  
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.