Как использовать Postgres Sequences?

Оконная функция PostgreSQL База данных

Последовательности — это особый тип объектов базы данных, которые генерируют уникальные числовые идентификаторы. Последовательность отвечает за создание первичных ключей базы данных. Последовательности генерируют числовой порядок, и существует вероятность того, что несколько последовательностей содержат одно и то же числовое значение, но порядок в каждой последовательности разный. В этой статье демонстрируется использование и работа с последовательностями в Postgres. Более того, приводятся несколько примеров, чтобы испытать работу последовательностей в Postgres.

Как создать последовательность в Postgres

Последовательности в Postgres создаются в соответствии с синтаксисом команды CREATE SEQUENCE, представленной ниже:

CREATE SEQUENCE <nameofsequence> <options>

обозначает имя, которое вы хотите задать для последовательности, а содержит расширенные свойства для этой конкретной последовательности. Параметры, поддерживаемые CREATE SEQUENCE, упоминаются в следующем разделе:

Параметры, поддерживаемые командой CREATE SEQUENCE

Можно создать последовательность с заданными пользователем параметрами с помощью команды CREATE SEQUENCE. Эта команда поддерживает следующие параметры:

[ INCREMENT [ BY] <value> ]: этот параметр создает последовательность с приращением определенного числового числа. Значение по умолчанию равно 1. Более того, если значение приращения положительное, то порядок будет возрастающим, тогда как убывающий порядок можно получить, передав отрицательное значение.

[AS { SMALLINT | INT | BIGINT } ]: Параметр типа данных позволяет вам определить шаблон последовательности. По умолчанию в качестве типа данных используется BIGINT.

[ MINVALUE <value> ] or [ NO MINVALUE ]: с помощью этой опции можно указать минимальное значение последовательности. Если этот параметр оставить пустым, то максимальное значение по умолчанию устанавливается в соответствии с указанным типом данных.

Читайте также:  Базы данных NoSQL

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

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

  1. Андрей

    Не хватает информации о правах, необходимых для использования последовательностей.

    Ответить