Разбор YugabyteDB version()

Версия PostgreSQL выглядит как PostgreSQL ([0-9]+)[.]([0-9]+) с номерами версии и минора:

postgres=> select version();
                                             version
-------------------------------------------------------------------------------------------------
 PostgreSQL 14.1 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 8.5.0 20210514 (Red Hat 8.5.0-4), 64-bit
(1 row)

postgres=>

Вход в полноэкранный режим Выход из полноэкранного режима

но также может быть PostgreSQL ([0-9]+)[.]([0-9]+).* с дополнительным текстом:

postgres=# select version();
                                                       version

-------------------------------------------------------------------------------------------------------
--------------
 PostgreSQL 15devel on aarch64-unknown-linux-gnu, compiled by gcc (GCC) 8.5.0 20210514 (Red Hat 8.5.0-4.0.1), 64-bit
(1 row)
Войти в полноэкранный режим Выйти из полноэкранного режима

Строка devel была добавлена во время компиляции с опцией --with-extra-version в configure.

YugabyteDB

Версия YugabyteDB похожа на PostgreSQL ([0-9]+)[.]([0-9]+)-YB-.*, где дополнительный текст включает -YB-, за которым следует версия YugabyteDB:

yugabyte=> select version();
                                                                                         version                                                                                         
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 PostgreSQL 11.2-YB-2.13.2.0-b0 on x86_64-pc-linux-gnu, compiled by clang version 12.0.1 (https://github.com/yugabyte/llvm-project.git bdb147e675d8c87cee72cc1f87c4b82855977d94), 64-bit
(1 row)

yugabyte=> 
Вход в полноэкранный режим Выход из полноэкранного режима

Версия PostgreSQL определяет совместимость (поскольку YugabyteDB использует код PostgreSQL), в данном случае 11.2. Версия YugabyteDB имеет мажорную и минорную составляющие, номер патча и номер сборки. Минор является четным для стабильных релизов и нечетным для предварительных. Это 2.13.2, которая является последней предварительной версией на момент написания этой статьи. Номер сборки здесь не задан (текст за -YB- взят из файла version.txt в ветке исходников, который version.minor.patch.

regexp_replace

Я использую следующее для извлечения версии YugabyteDB и совместимости с PostgreSQL:

yugabyte=# x
Expanded display is on.

yugabyte=# select version()
     , regexp_replace(version()
     ,'^PostgreSQL ([0-9]+)[.]([0-9]+)-YB-([0-9]+)[.]([0-9]+)[.]([0-9]+)[.]([0-9]+)-b([0-9]+).*'
     ,'1.2')       as pg_version
     , regexp_replace(version()
     ,'^PostgreSQL ([0-9]+)[.]([0-9]+)-YB-([0-9]+)[.]([0-9]+)[.]([0-9]+)[.]([0-9]+)-b([0-9]+).*'
     ,'3.4.5')    as yb_version;

-[ RECORD 1 ]---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
version    | PostgreSQL 11.2-YB-2.13.2.0-b0 on aarch64-unknown-linux-gnu, compiled by clang version 12.0.1 (https://github.com/yugabyte/llvm-project.git bdb147e675d8c87cee72cc1f87c4b82855977d94), 64-bit
pg_version | 11.2
yb_version | 2.13.2

Войти в полноэкранный режим Выйти из полноэкранного режима

порядковый номер

Это способ извлечения компонентов версии. Но когда вы хотите сравнить версии, лучше использовать одно число. Версию PostgreSQL можно запросить с помощью:

yugabyte=# 
select current_setting('server_version_num');   

                                             current_setting
-----------------
 110002


Войти в полноэкранный режим Выйти из полноэкранного режима

Вот что я использую для получения версии YugabyteDB в виде числа:

yugabyte=# 
with n(p,f) as (values ('3',4),('4',4),('5',4))
select to_number(string_agg(lpad(regexp_replace(version()
,'^PostgreSQL ([0-9]+)[.]([0-9]+)-YB-([0-9]+)[.]([0-9]+)[.]([0-9]+)[.]([0-9]+)-b([0-9]+).*'
,p),f,'0'),'' order by p),'999999999999') yb_version_num from n;

 yb_version_num
----------------
      200130002
(1 row)

Ввести полноэкранный режим Выйти из полноэкранного режима

Подробнее о версионировании релизов: https://docs.yugabyte.com/preview/releases/versioning/

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