Which version of PostgreSQL am I running?
我在一个公司环境中(运行DebianLinux),没有自己安装。我使用navicat或phppgadmin访问数据库(如果这有帮助的话)。我也没有运行数据库的服务器的shell访问权限。
从PostgreSQL运行此查询:
1 | SELECT version(); |
我相信这就是你要找的,
服务器版本:
1 | pg_config --version |
客户端版本:
1 | psql --version |
使用CLI:服务器版本:
1 2 3 4 5 6 | $ postgres -V # OR --version. Use"locate bin/postgres" if not found. postgres (PostgreSQL) 9.6.1 $ postgres -V | awk '{print $NF}' # LAST COLUMN IS version. 9.6.1 $ postgres -V | egrep -o '[0-9]{1,}\.[0-9]{1,}' # Major.Minor version 9.6 |
如果有多个PostgreSQL安装,或者如果得到"
1 2 3 4 5 | $ locate bin/postgres | xargs -i xargs -t '{}' -V # xargs IS intentionally twice. /usr/pgsql-9.3/bin/postgres -V postgres (PostgreSQL) 9.3.5 /usr/pgsql-9.6/bin/postgres -V postgres (PostgreSQL) 9.6.1 |
如果
1 2 3 | $ sudo find / -wholename '*/bin/postgres' 2>&- | xargs -i xargs -t '{}' -V # xargs IS intentionally twice. /usr/pgsql-9.6/bin/postgres -V postgres (PostgreSQL) 9.6.1 |
虽然也可以使用
如果相关,请以
1 2 | $ psql -V # OR --version psql (PostgreSQL) 9.6.1 |
如果有多个PostgreSQL安装:
1 2 3 4 5 6 7 | $ locate bin/psql | xargs -i xargs -t '{}' -V # xargs IS intentionally twice. /usr/bin/psql -V psql (PostgreSQL) 9.3.5 /usr/pgsql-9.2/bin/psql -V psql (PostgreSQL) 9.2.9 /usr/pgsql-9.3/bin/psql -V psql (PostgreSQL) 9.3.5 |
使用SQL:服务器版本:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | => SELECT version(); version -------------------------------------------------------------------------------------------------------------- PostgreSQL 9.2.9 ON x86_64-unknown-linux-gnu, compiled BY gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-4), 64-bit => SHOW server_version; server_version ---------------- 9.2.9 => SHOW server_version_num; server_version_num -------------------- 90209 |
如果你更好奇的话,可以试试
就其价值而言,可以在
1 2 | => \! psql -V psql (PostgreSQL) 9.2.9 |
执行命令
1 | psql -V |
在哪里?
V必须是大写的。
接受的答案很好,但是如果您需要以编程方式与PostgreSQL版本交互,那么最好这样做:
1 2 3 | SELECT current_setting('server_version_num'); -- Returns 90603 (9.6.3) -- Or using SHOW command: SHOW server_version_num; -- Returns 90603 too |
它将以整数形式返回服务器版本。这就是在PostgreSQL源中测试服务器版本的方法,例如:
1 2 3 4 5 6 7 8 | /* * This is a C code from pg_dump source. * It will do something if PostgreSQL remote version (server) is lower than 9.1.0 */ IF (fout->remoteVersion < 90100) /* * Do something... */ |
这里和这里有更多信息。
在shell psql.exe中,执行
1 | \! psql -V |
如果您使用的是cli,而您是
1 | psql -c"SELECT version();" |
可能的输出:
1 2 3 4 | version ------------------------------------------------------------------------------------------------------------------------- PostgreSQL 11.1 (Debian 11.1-3.pgdg80+1) ON x86_64-pc-linux-gnu, compiled BY gcc (Debian 4.9.2-10+deb8u2) 4.9.2, 64-bit (1 ROW) |
使用
版本3.5:
版本4.1、4.5:
pg_config命令将报告安装PostgreSQL程序的目录(--bindir)、C include文件的位置(--includedir)和对象代码库(--libdir)以及PostgreSQL的版本(--version):
1 2 | $ pg_config --version PostgreSQL 9.3.6 |
以我为例
1 2 3 4 5 6 7 | $psql postgres=# \g postgres=# SELECT version(); version --------------------------------------------------------------------------------------------------------------------- PostgreSQL 8.4.21 ON x86_64-pc-linux-gnu, compiled BY GCC gcc-4.6.real (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3, 64-bit (1 ROW) |
希望它能帮助别人
一个简单的方法是通过在终端中键入
如果您在Debian/Ubuntu系统上拥有对服务器的shell访问权限(这个问题提到了op没有,但如果您有),那么
1 | sudo apt-cache policy postgresql |
它将输出已安装的版本,
1 2 3 4 5 6 7 8 9 10 11 12 13 | postgresql: Installed: 9.6+184ubuntu1.1 Candidate: 9.6+184ubuntu1.1 Version TABLE: *** 9.6+184ubuntu1.1 500 500 http://IN.archive.ubuntu.com/ubuntu artful-updates/main amd64 Packages 500 http://IN.archive.ubuntu.com/ubuntu artful-updates/main i386 Packages 500 http://security.ubuntu.com/ubuntu artful-security/main amd64 Packages 500 http://security.ubuntu.com/ubuntu artful-security/main i386 Packages 100 /var/lib/dpkg/STATUS 9.6+184ubuntu1 500 500 http://IN.archive.ubuntu.com/ubuntu artful/main amd64 Packages 500 http://IN.archive.ubuntu.com/ubuntu artful/main i386 Packages |
其中
不知道这有多可靠,但您可以完全自动获得两个版本标记:
1 | psql --version 2>&1 | tail -1 | awk '{print $3}' | sed 's/\./ /g' | awk '{print $1"." $2}' |
因此,您可以构建指向二进制文件的路径:
1 | /usr/lib/postgresql/9.2/bin/postgres |
用这个命令替换9.2。
如果
1 | SELECT version::CHAR(100) |
或
1 | SELECT version::VARCHAR(100) |