Последовательности — это особый тип объектов базы данных, которые генерируют уникальные числовые идентификаторы. Последовательность отвечает за создание первичных ключей базы данных. Последовательности генерируют числовой порядок, и существует вероятность того, что несколько последовательностей содержат одно и то же числовое значение, но порядок в каждой последовательности разный. В этой статье демонстрируется использование и работа с последовательностями в Postgres. Более того, приводятся несколько примеров, чтобы испытать работу последовательностей в Postgres.
Как создать последовательность в Postgres
Последовательности в Postgres создаются в соответствии с синтаксисом команды CREATE SEQUENCE, представленной ниже:
CREATE SEQUENCE <name—of—sequence> <options>
обозначает имя, которое вы хотите задать для последовательности, а содержит расширенные свойства для этой конкретной последовательности. Параметры, поддерживаемые CREATE SEQUENCE, упоминаются в следующем разделе:
Параметры, поддерживаемые командой CREATE SEQUENCE
Можно создать последовательность с заданными пользователем параметрами с помощью команды CREATE SEQUENCE. Эта команда поддерживает следующие параметры:
[ INCREMENT [ BY] <value> ]: этот параметр создает последовательность с приращением определенного числового числа. Значение по умолчанию равно 1. Более того, если значение приращения положительное, то порядок будет возрастающим, тогда как убывающий порядок можно получить, передав отрицательное значение.
[AS { SMALLINT | INT | BIGINT } ]: Параметр типа данных позволяет вам определить шаблон последовательности. По умолчанию в качестве типа данных используется BIGINT.
[ MINVALUE <value> ] or [ NO MINVALUE ]: с помощью этой опции можно указать минимальное значение последовательности. Если этот параметр оставить пустым, то максимальное значение по умолчанию устанавливается в соответствии с указанным типом данных.
[ MAXVALUE <value> ] or [ NO MINVALUE ]:этот параметр является обратным предыдущему, где вы можете установить максимальное значение для вашей последовательности. Более того, если он не установлен, считается значение типа данных по умолчанию.
[ START [WITH] start ]: Указывает значение начала последовательности.
[CYCLE] or [NO CYCLE]: если определена эта опция, значение последовательности возобновляется после достижения максимального предела. Значение по умолчанию в этом случае — NO CYCLE, и он возвращает ошибку после достижения указанного предела последовательности.
[OWNED BY <table-name.column-name>]: этот параметр используется для связывания последовательности с определенным столбцом таблицы. В результате при удалении столбца последовательность также удаляется автоматически.
Следующие разделы лучше прояснят концепцию последовательности в Postgres.
Как создать последовательность в Postgres
В этом разделе представлены несколько примеров создания последовательности с разных точек зрения. Каждый пример относится к другому типу последовательности.
Пример 1: Эта команда создает последовательность под названием «linuxhint» с начальным значением 5 и значением приращения 2:
# CREATE SEQUENCE linuxhint INCREMENT 2 START 5;
Пример 2: Кроме того, если приращение установлено на любое отрицательное (-) значение, то последовательность начинается с максимального значения и спускается до указанного минимального значения. Например, приведенная ниже команда создаст последовательность со следующими свойствами:
— » linux » в качестве имени последовательности
— » −2 ″ в качестве значения приращения, что означает, что последовательность будет уменьшаться с разницей −2.
— » 10 ″ в качестве начального значения, поскольку приращение является отрицательным значением, максимальное значение также будет равно 10.
— Наконец, параметр цикла также используется
# CREATE SEQUENCE linux INCREMENT —2 MINVALUE 2 MAXVALUE 10 START 10 CYCLE;
Как получить последовательности базы данных
Каждая последовательность связана с базой данных. Например, мы вошли в базу данных linuxhint и получили все последовательности с помощью приведенной ниже команды:
В приведенной ниже команде relname и sequence_name получаются из PG_CLASS. PG_CLASS в Postgres содержит информацию о таблицах баз данных.
Вы увидите две категории на выходе; одна относится к последовательностям, связанным с первичным ключом таблиц, а другая категория указывает на определяемые пользователем последовательности, которые создаются отдельно (как в предыдущем разделе).
# SELECT relname sequence_name FROM PG_CLASS WHERE relkind= ‘S’;
Как получить следующее/текущее значение последовательности
Есть несколько функций, которые можно использовать для получения текущего и следующего значения последовательности в Postgres. Функция NEXTVAL печатает следующее значение в последовательности, используя приведенный ниже синтаксис:
SELECT NEXTVAL(‘sequence-name’)
Написанная ниже команда напечатает следующее значение последовательности «linuxhint». Если вы продолжите выполнять команду NEXTVAL, вы получите следующее значение в соответствии с условием приращения последовательности. Поскольку последовательность «linuxhint» увеличивается на 2, каждое следующее значение будет напечатано после увеличения на 2.
# SELECT NEXTVAL(‘linuxhint’);
Как только получено следующее значение, вы можете получить текущее значение последовательности с помощью функции CURRVAL. CURRVAL напечатает результат, полученный функцией NEXTVAL. Например, последняя функция NEXTVAL показала результат 7, поэтому результат CURRVAL должен быть равен 7. Точно так же любое значение, полученное с помощью последней функции NEXTVAL, должно быть напечатано CURRVAL. Функция CURRVAL использует следующий синтаксис:
SELECT CURRVAL(‘sequence-name’)
Получим текущее значение последовательности «linuxhint» с помощью упомянутой выше команды:
# SELECT CURRVAL(‘linuxhint’);
Более того, функция CURRVAL зависит от функции NEXTVAL. Если функция NEXTVAL еще не применена ни к одной последовательности, вы не можете использовать функцию CURRVAL для получения текущего значения. Например, если мы применим функцию CURRVAL к последовательности «linux», к которой мы не применили функцию NEXTVAL, будет отображаться следующая ошибка.
# SELECT CURRVAL(‘linux’);
Эту ошибку можно решить, выполнив функцию NEXTVAL для последовательности, как мы испытали ее на последовательности «linux», и ошибка будет устранена.
# SELECT NEXTVAL(‘linux’);
# SELECT CURRVAL(‘linux’);
Как удалить последовательность
Вы можете удалить любую последовательность из своей базы данных, используя инструкцию DROP SEQUENCE Postgres. В случае удаления таблицы последовательность, принадлежащая любому столбцу, будет удалена. Представленная здесь команда удаляет последовательность «linux».
# DROP SEQUENCE IF EXISTS linux;
Заключение
Вообще, что вам приходит в голову после получения слова последовательности? Упорядоченный список чисел. Да, концепция такая же и в Postgres. В этом посте объясняется концепция последовательности и демонстрируется ее базовая функциональность в Postgres. В этом руководстве мы изучали создание последовательности несколькими способами. Кроме того, также обсуждаются функции следующего и текущего значений последовательностей.
Не хватает информации о правах, необходимых для использования последовательностей.