Obtain the PostgreSQL version number

The server version can be obtained from the SHOW command:

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

However the value returned cannot be further manipulated at SQL level.

Detailed version information about the server can be obtained from the version() function:

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)

However this is tricky and inconvenient to parse if all that's required is the actual version number, particularly in the numbers-only notation (e.g. 110002) which is useful for comparison operations.

The pg_settings view provides the server version information directly:

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

Alternatively extract individual values with the current_setting() function:

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

Applications can use libpq's PQserverVersion() function (documentation) which returns the same integer as server_version_num. Each language's database driver should be able to provide this too.