获取 PostgreSQL 版本号

服务器版本可以通过 SHOW 命令获取

postgres=# SHOW server_version;
 server_version 
----------------
 13.1
(1 row)

但是,返回的值无法在 SQL 级别进一步操作。

有关服务器的详细版本信息可以通过 version() 函数获取

postgres=# SELECT version();
                                                version                                                 
--------------------------------------------------------------------------------------------------------
 PostgreSQL 13.1 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 8.3.1 20191121 (Red Hat 8.3.1-5), 64-bit
(1 row)

但是,如果只需要实际的版本号,特别是仅包含数字的表示法(例如 110002),这对于比较操作很有用,则解析起来比较棘手且不方便。

pg_settings 视图直接提供服务器版本信息

postgres=# SELECT name, setting FROM pg_settings WHERE name LIKE 'server_version%';
        name        | setting 
--------------------+---------
 server_version     | 13.1
 server_version_num | 130001
(2 rows)

或者使用 current_setting() 函数提取单个值

postgres=# SELECT current_setting('server_version');
 current_setting 
-----------------
 13.1
(1 row)

应用程序可以使用 libpqPQserverVersion() 函数(文档),它返回与 server_version_num 相同的整数。每种语言的数据库驱动程序也应该能够提供此功能。

可以使用以下查询提取“主”版本号(例如 9.615

SELECT array_to_string(numbers[1 : array_upper(numbers,1) -1], '.')
  FROM
(SELECT string_to_array(current_setting('server_version'), '.') numbers) n;