Быстрый старт
Развертывание
Моделирование данных
Подключение
Запись данных
Миграция
Запросы
Операции и обслуживание
Типовое обслуживание
Секционирование
Резервное копирование и восстановление
Масштабирование
Зеркалирование
Управление ресурсами
Безопасность
Мониторинг
Настройка производительности
Устранение неполадок
Справочник
Руководство по инструментам
Типы данных
Хранилище данных
Выполняющая система
Потоковая передача
Восстановление после сбоев
Конфигурация
Индексы
Расширения
Справочник по SQL
Часто задаваемые вопросы
Создаёт новый генератор последовательности.
CREATE [TEMPORARY | TEMP] SEQUENCE name
[INCREMENT [BY] value]
[MINVALUE minvalue | NO MINVALUE]
[MAXVALUE maxvalue | NO MAXVALUE]
[START [ WITH ] start]
[CACHE cache]
[[NO] CYCLE]
[OWNED BY { table.column | NONE }]
CREATE SEQUENCE создаёт новый генератор последовательности. Это включает создание и инициализацию специальных одностроковых таблиц. Генератор будет принадлежать пользователю, выполнившему команду.
Если указано имя схемы, последовательность создаётся в указанной схеме. В противном случае она будет создана в текущей схеме. Временные последовательности существуют в специальных схемах, поэтому при создании временной последовательности имя схемы указывать нельзя. Имя последовательности должно отличаться от имён всех других последовательностей, таблиц, индексов, представлений или внешних таблиц в одной и той же схеме.
После создания последовательности вы можете использовать функцию nextval() для работы с ней. Например, чтобы вставить строку в таблицу, получив следующее значение последовательности:
INSERT INTO distributors VALUES (nextval('myserial'), 'acme');
Вы также можете использовать функцию setval() для управления последовательностями, но только в запросах, не затрагивающих распределённые данные. Например, следующий запрос разрешён, поскольку он сбрасывает значение счётчика последовательности в процессе генератора на мастер-узле:
SELECT setval('myserial', 201);
Однако следующий запрос будет отклонён в базе данных YMatrix, так как он работает с распределёнными данными:
INSERT INTO product VALUES (setval('myserial', 201), 'gizmo');
В обычной (нераспределённой) базе данных функции, работающие с последовательностями, обращаются к локальному списку последовательностей, чтобы получить требуемое значение. Однако помните, что в базе данных YMatrix каждый сегмент представляет собой отдельный процесс базы данных. Поэтому для корректного увеличения значений на всех сегментах и правильного порядка продвижения последовательностей требуется единая точка доступа к значениям последовательностей. Процесс сервера последовательностей запускается на мастер-узле и является централизованной точкой для последовательностей в распределённой базе данных YMatrix. Сегменты получают значения последовательностей с мастер-узла во время выполнения.
Из-за такой архитектуры распределённых последовательностей существуют определённые ограничения на использование функций работы с последовательностями в базе данных YMatrix:
Хотя вы не можете напрямую обновлять последовательность, вы можете использовать запрос вроде следующего:
SELECT * FROM sequence_name;
чтобы проверить параметры и текущее состояние последовательности. В частности, поле last_value последовательности показывает последнее значение, присвоенное любой сессией.
TEMPORARY | TEMP
name
INCREMENT
MINVALUE
NO MINVALUE
MAXVALUE
NO MAXVALUE
START
CACHE
CYCLE
NO CYCLE
OWNED BY table.column
OWNED BY NONE
Последовательности основаны на арифметике типа bigint, поэтому диапазон значений не может выходить за пределы 8-байтовых целых чисел (-9223372036854775808 до 9223372036854775807).
Хотя гарантируется, что разные сессии получат разные значения последовательности, порядок их генерации может не совпадать с фактическим порядком вызова nextval(). Например, сессия A может зарезервировать значения 1..10 и вернуть nextval = 1, затем сессия B может зарезервировать значения 11..20 и вернуть nextval = 11, прежде чем сессия A вызовет nextval = 2. Таким образом, следует считать, что значения nextval() всегда различны, но не обязательно генерируются строго по порядку. Аналогично, last_value отражает последнее значение, зарезервированное любой сессией, независимо от того, было ли оно возвращено через nextval().
Создание последовательности с именем myseq:
CREATE SEQUENCE myseq START 101;
Вставка строки в таблицу с получением следующего значения последовательности idseq:
INSERT INTO distributors VALUES (nextval('idseq'), 'acme');
Сброс значения счётчика последовательности на мастер-узле:
SELECT setval('myseq', 201);
Недопустимое использование setval() в базе данных YMatrix (установка значений последовательности на распределённых данных):
INSERT INTO product VALUES (setval('myseq', 201), 'gizmo');
CREATE SEQUENCE соответствует стандарту SQL, за исключением следующих моментов: