PostgreSQL: последовательность

Введение

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

Create Sequence

В PostgreSQL, CREATE Оператор SEQUENCE создает новый генератор порядковых номеров. Это включает в себя создание и инициализацию новой специальной однострочной таблицы с именем. Генератор будет принадлежать пользователю, который вводит команду.

Имя последовательности должно отличаться от имени любой другой последовательности, таблицы, индекса, представления или сторонней таблицы в той же схеме. Если указано имя схемы, последовательность создается в указанной схеме, в противном случае она создается в текущей схеме. Временные последовательности существуют в специальной схеме, поэтому имя схемы нельзя указать при создании временной последовательности.

После создания последовательности вы можете использовать функции nextval, currval и setval для работы с последовательностью.

Последовательности основаны на арифметике bigint, поэтому диапазон не может превышать диапазон восьмибайтовых целых чисел (от -9223372036854775808 до 9223372036854775807).

Синтаксис:

 CREATE [TEMPORARY |  TEMP] SEQUENCE name [INCREMENT [BY] приращение] [MINVALUE minvalue |  NO MINVALUE] [MAXVALUE maxvalue |  NO MAXVALUE] [START [WITH] начало] [CACHE cache] [[NO] CYCLE] [ВЛАДЕНИЕМ {table_name.column_name |  НЕТ}] 
Параметр Описание
TEMPORARY или TEMP Если указано, объект последовательности создается только для этого сеанса и автоматически удаляется при выходе из сеанса.
name Имя создаваемой последовательности.
increment Необязательное предложение INCREMENT BY increment указывает, какое значение добавляется к текущему значению последовательности для создания нового значения. Положительное значение образует восходящую последовательность, отрицательное — убывающую. Значение по умолчанию — 1.
minvalue
NO MINVALUE
Необязательное предложение MINVALUE minvalue определяет минимальное значение последовательность может генерировать. Если НЕ указано МИНИМАЛЬНОЕ ЗНАЧЕНИЕ, будут использоваться значения по умолчанию. Значения по умолчанию — 1 и -263-1 для восходящей и нисходящей последовательностей соответственно.
maxvalue
NO MAXVALUE
Необязательное предложение MAXVALUE maxvalue определяет максимальное значение для последовательности. Если НЕ указано MAXVALUE, будут использоваться значения по умолчанию. Значения по умолчанию — 263-1 и -1 для восходящей и нисходящей последовательностей соответственно.
start Необязательное предложение START WITH start позволяет последовательности начинать где угодно. Начальное значение по умолчанию — minvalue для возрастающих последовательностей и maxvalue для убывающих..
cache Необязательное предложение CACHE cache указывает, сколько порядковых номеров должно быть предварительно выделено и сохранено в памяти для более быстрого доступа. Минимальное значение — 1, которое также используется по умолчанию.
CYCLE
NO CYCLE
Параметр CYCLE позволяет Последовательность для перехода, когда максимальное или минимальное значение было достигнуто в порядке возрастания или убывания соответственно. Если предел достигнут, следующим сгенерированным числом будет minvalue или maxvalue, соответственно.
Для NO CYCLE любые вызовы nextval после того, как последовательность достигла своего максимального значения, вернут ошибку.
НЕТ ЦИКЛА — значение по умолчанию.
ВЛАДЕНИЕМ имя_таблицы. имя_столбца
НИКТО НЕ ВЛАДЕЕТ
Параметр OWNED BY приводит к тому, что последовательность будет связана с определенным столбцом таблицы, так что, если этот столбец (или вся его таблица) будет отброшен, последовательность также будет автоматически удалена. Указанная таблица должна иметь того же владельца и находиться в той же схеме, что и последовательность.
OWNED BY NONE, по умолчанию, указывает, что такой связи нет.

Отбросить последовательность:

Используйте DROP SEQUENCE для удаления последовательности.

Примеры:

Создайте восходящую последовательность с именем idno, начиная с 50:

Код:

  postgres = # CREATE SEQUENCE idno START 50; CREATE SEQUENCEpostgres = #  

Выберите следующий номер из этой последовательности:

Пример вывода:

 postgres = # SELECT nextval ('idno'  );  nextval --------- 50 (1 строка) 

Выберите следующее число из этой последовательности:

Пример вывода:

 postgres = # ВЫБРАТЬ nextval ('idno');  nextval --------- 51 (1 строка) 

Примечание: здесь функция nextval () используется для получения следующего значения вместо стандартного выражения NEXT VALUE FOR.

Позвольте использовать эту последовательность в команде INSERT:

Теперь используйте указанную выше последовательность в команде INSERT:

Sample table ‘test ‘:

Пример вывода:

 postgres = # SELECT * FROM test;  id |  sname |  roll_num ---- + ------- + ---------- (0 строк) 

Теперь вставьте несколько записей:

Пример вывода:

 postgres = # INSERT INTO test VALUES (nextval ('idno'), 'Surya', 1); INSERT 0 1postgres = # SELECT * FROM test;  id |  sname |  roll_num ---- + --------------------------------------------  -------- + ---------- 52 |  Сурья |  1 (1 строка) postgres = # INSERT INTO test VALUES (nextval ('idno'), 'Dany', 2); INSERT 0 1postgres = # SELECT * FROM test;  id |  sname |  roll_num ---- + --------------------------------------------  -------- + ---------- 52 |  Сурья |  1 53 |  Дэни |  2 (2 строки) 

Внутри последовательности:

Пример вывода:

 postgres =  # выбрать * из idno;  имя_последовательности |  last_value |  start_value |  increment_by |  max_value |  min_value |  cache_value |  log_cnt |  is_cycled |  вызывается --------------- + ------------ + ------------- + ------  -------- + --------------------- + ----------- + -------  ------ + --------- + ----------- + ----------- idno |  53 |  50 |  1 |  9223372036854775807 |  1 |  1 |  31 |  f |  т (1 ряд) 

Оцените статью
nanomode.ru
Добавить комментарий