PostgreSQL: последовательность
Вступление
Последовательность является функцией некоторых продуктов баз данных, из которой несколько пользователей могут генерировать уникальные целые числа. Генератор последовательности генерирует последовательные числа, которые могут помочь автоматически генерировать уникальные первичные ключи и координировать ключи в нескольких строках или таблицах.
Создать последовательность
В PostgreSQL оператор CREATE SEQUENCE создает новый генератор порядковых номеров. Это включает создание и инициализацию новой специальной однорядной таблицы с именем. Генератор будет принадлежать пользователю, который выдает команду.
Имя последовательности должно отличаться от имени любой другой последовательности, таблицы, индекса, представления или внешней таблицы в той же схеме. Если задано имя схемы, последовательность создается в указанной схеме, в противном случае она создается в текущей схеме. Временные последовательности существуют в специальной схеме, поэтому имя схемы не может быть задано при создании временной последовательности.
После создания последовательности вы можете использовать функции nextval, currval и setval для работы с последовательностью.
Последовательности основаны на арифметике bigint, поэтому диапазон не может превышать диапазон восьмибайтового целого числа (от -9223372036854775808 до 9223372036854775807).
Синтаксис:
СОЗДАТЬ [ВРЕМЕННЫЙ | TEMP] SEQUENCE name [INCREMENT [BY] приращение] [MINVALUE minvalue | NO MINVALUE] [MAXVALUE maxvalue | НЕТ MAXVALUE] [НАЧАТЬ [С] запуска] [КЭШ-кэш] [[НЕТ] ЦИКЛ] [OWNED BY {table_name.column_name | НИКТО } ]
вариант | Описание |
---|---|
ВРЕМЕННЫЙ или ТЕМП | Если указан, объект последовательности создается только для этого сеанса и автоматически удаляется при выходе из сеанса. |
название | Имя последовательности, которая будет создана. |
приращение | Необязательное предложение INCREMENT BY increment указывает, какое значение добавляется к текущему значению последовательности для создания нового значения. Положительное значение сделает восходящую последовательность, отрицательное - нисходящую последовательность. Значением по умолчанию является 1. |
MinValue НЕТ MINVALUE | Необязательное предложение MINVALUE minvalue определяет минимальное значение, которое может генерировать последовательность. Если не указано значение MINVALUE, будут использоваться значения по умолчанию. Значения по умолчанию: 1 и -263-1 для восходящей и нисходящей последовательностей соответственно. |
MAXVALUE НЕТ MAXVALUE | Необязательное предложение MAXVALUE maxvalue определяет максимальное значение для последовательности. Если не указано значение MAXVALUE, будут использоваться значения по умолчанию. Значения по умолчанию: 263-1 и -1 для восходящей и нисходящей последовательностей соответственно. |
Начните | Необязательное предложение START WITH start позволяет последовательности начинаться где угодно. Начальным значением по умолчанию является minvalue для восходящих последовательностей и maxvalue для нисходящих. |
кэш | Необязательный раздел CACHE cache указывает, сколько порядковых номеров должно быть предварительно выделено и сохранено в памяти для более быстрого доступа. Минимальное значение равно 1, что также является значением по умолчанию. |
ЦИКЛ НЕТ ЦИКЛА | Опция CYCLE позволяет обернуть последовательность, когда максимальное значение или минимальное значение было достигнуто восходящей или нисходящей последовательностью соответственно. Если предел достигнут, следующее сгенерированное число будет minvalue или maxvalue, соответственно. Для NO CYCLE любые вызовы nextval после того, как последовательность достигнет своего максимального значения, вернет ошибку. НЕТ ЦИКЛА - это значение по умолчанию. |
OWNED BY table_name.column_name ВЛАДЕЛЕЦ НИКАКИМИ | Опция OWNED BY позволяет связать последовательность с конкретным столбцом таблицы, так что если этот столбец (или вся его таблица) будет удален, последовательность также будет автоматически удалена. Указанная таблица должна иметь того же владельца и находиться в той же схеме, что и последовательность. OWNED BY NONE, по умолчанию, указывает, что такой ассоциации нет. |
Оставьте последовательность:
Используйте DROP SEQUENCE, чтобы удалить последовательность.
Примеры:
Создайте восходящую последовательность с именем idno, начиная с 50:
Код:
postgres=# CREATE SEQUENCE idno START 50;
CREATE SEQUENCE
postgres=#
Выберите следующий номер из этой последовательности:
Пример вывода:
postgres = # SELECT nextval ('idno'); NEXTVAL --------- 50 (1 ряд)
Выберите следующий номер из этой последовательности:
Пример вывода:
postgres = # SELECT nextval ('idno'); NEXTVAL --------- 51 (1 ряд)
Примечание. Здесь функция nextval () используется для получения следующего значения вместо стандартного выражения NEXT VALUE FOR.
Давайте использовать эту последовательность в команде INSERT:
Теперь используйте приведенную выше последовательность в команде INSERT:
Пример таблицы «тест»:
Пример вывода:
postgres = # SELECT * FROM test; id | имя | roll_num ---- + ------- + ---------- (0 строк)
Теперь вставьте несколько записей:
Пример вывода:
postgres = # INSERT INTO VALUES (nextval ('idno'), 'Surya', 1); ВСТАВИТЬ 0 1 postgres = # SELECT * FROM test; id | имя | roll_num ---- + --------------------------------------------- ------- + ---------- 52 | Сурья | 1 (1 ряд) postgres = # INSERT INTO VALUES test (nextval ('idno'), 'Dany', 2); ВСТАВИТЬ 0 1 postgres = # SELECT * FROM test; id | имя | roll_num ---- + --------------------------------------------- ------- + ---------- 52 | Сурья | 1 53 | Дэни | 2 (2 ряда)
Внутри последовательности:
Пример вывода:
postgres = # select * from idno; имя_последовательности | last_value | start_value | increment_by | max_value | min_value | cache_value | log_cnt | is_cycled | называется --------------- + ------------ + ------------- + ------- ------- + --------------------- + ----------- + -------- ----- + --------- + ----------- + ----------- идно | 53 | 50 | 1 | 9223372036854775807 | 1 | 1 | 31 | f | T (1 ряд)
Предыдущая: Контрольные структуры
Далее: Роли базы данных PostgreSQL
Новый контент: Composer: менеджер зависимостей для PHP , R программирования