Автоматизация стандартных процедур
Операции с последовательностями
Выборка атрибутов последовательности требуется относительно редко. Как правило, все операции с последовательностями выполняются при помощи трех специальных функций 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 |