我正在运行哪个版本的PostgreSQL? (注意:这是一个提问标题,不需要回答。)

1325

我在公司环境中使用Debian Linux系统,没有自己安装。我使用Navicat或phpPgAdmin来访问数据库(如果有帮助的话)。我也无法通过shell访问运行数据库的服务器。

21个回答

2042

在PostgreSQL中运行此查询:

SELECT version();

5
在Ubuntu终端中,我这里没有任何结果。 - Timo
33
@Timo,这是一个需要通过PostgreSQL运行的查询。这可以通过pgAdmin或任何其他运行查询的机制来完成。您是否尝试从Ubuntu shell运行它?(这样做不会起作用) - Highly Irregular
53
可以使用命令行运行此操作,命令为 psql -c 'SELECT version();' - Aaron Lelevier
4
您可以直接从bash运行,并将postgres数据库指定为以下方式:psql postgres -c 'SELECT version();' - thathashd
26
@Frank H. 使用 sudo -u postgres psql postgres -c 'SELECT version()' | grep PostgreSQL 命令可以解决 "role 'username' does not exist" 的问题。 - Marcus Junius Brutus
显示剩余5条评论

672

我相信这就是你要找的内容,

服务器版本:

pg_config --version

客户端版本:

psql --version

3
谢谢!当Shell访问可用时,此方法有效。不幸的是,在我的情况下,我没有那个权限;我已更新问题。 - Highly Irregular
4
有时候客户端版本才是你想要了解的内容。 - Hakanai
20
正如Frank所指出的那样,这可能会误导人。psql将连接到正在运行的任何postmaster/postgres数据库进程,而数据库引擎的版本可能与psql命令不同。 - B Robster
4
“pg_config --version”可能是误导性的,例如,如果您升级了Ubuntu服务器但没有运行“pg_upgradecluster”,pg_config将显示新版本而不是您仍在使用的旧版本。 - Marius Gedminas
1
仅对我有效的命令是: pg_config --version命令: psql --version无法工作,因为它抱怨:dyld: Library not loaded: /usr/local/opt/readline/lib/libreadline.7.dylib Referenced from: /usr/local/bin/psql Reason: image not found - rld

245

使用命令行界面:

服务器版本:

$ 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 安装,或者出现 "postgres: command not found" 错误:

$ 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

如果 locate 无法帮助,尝试使用 find

$ 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

虽然 postmaster 也可以替代 postgres ,但使用 postgres 更可取,因为 postmaster postgres 的已弃用别名。

客户端版本:

如果相关,请postgres 登录

$ psql -V  # Or --version
psql (PostgreSQL) 9.6.1

如果有多个安装的PostgreSQL:

$ 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:

服务器版本:

=> 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

如果想要了解更多,请尝试=> SHOW all;

客户端版本:

值得一提的是,在psql中可以执行一个shell命令来显示psql可执行文件的客户端版本。请注意,运行中的psql可能与路径中的psql不同。

=> \! psql -V
psql (PostgreSQL) 9.2.9

14
谢谢!在脚本中使用“SHOW server_version;”非常方便,因为可以避免解析长字符串“SELECT version();”。 - vaab
1
非常感谢。人们并不意识到,要发出SQL命令,您必须至少知道一个角色以连接到数据库。但是使用postgres -V,您无需知道连接到数据库即可知道其版本。 - ychaouche
1
在CLI中假设超级用户访问权限的一行代码:psql postgres -c "SHOW server_version" -t -A-t 去除标题,-A 去除对齐空格。 - Pocketsand
1
感谢您特别提供 SHOW server_version_num,这对于不等式非常方便。 - eswald

82
如果您正在使用CLI并且是postgres 用户,那么可以执行以下操作:
psql -c "SELECT version();"


可能的输出:

                                                         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)

51

接受的答案很好,但如果你需要以编程方式与 PostgreSQL 版本进行交互,可能最好做如下处理:

SELECT current_setting('server_version_num'); -- Returns 90603 (9.6.3)
-- Or using SHOW command:
SHOW server_version_num; -- Returns 90603 too

它将返回服务器版本作为整数。这是在PostgreSQL源代码中测试服务器版本的方式,例如:

/*
 * 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...
     */  

更多信息请点击此处此处


38

执行命令

psql -V

在哪里

V 必须大写。


9
这是 psql(客户端)的版本,不是 Postgres 服务器的版本。 - user330315
对于审核者:如果答案是错误的但确实是一个答案(就像评论所暗示的那样),请不要建议删除,而是进行投票。例如,请参见“您正在错误地执行:关于低质量帖子队列中理智的呼吁”和“当答案回答错误的问题时,它是否不是一个答案?”这是一个答案。您可能不同意它,但它是尝试回答问题的一种方式。 - Wai Ha Lee
这是最好的答案。很多上面的答案返回的是客户端版本而不是服务器。 - Dan S.

20

在 shell 中执行 psql.exe

\! psql -V

16
这将为他提供PostgreSQL客户端的版本。我认为OP正在询问SQL服务器的版本。 - SpKel

14

通过双击 Servers > server_name_here > Properties 标签页 > Version,可以使用 pgadmin4 查看:

版本 3.5:

pgadmin4 show postgres version. Servers > server_name > Properties > Version

版本 4.1、4.5:

enter image description here


1
不要看它。使用pgadmin 4版本4.1。 - faintsignal
2
@faintsignal 添加了 pgadmin4 v4.1 的截图,版本跳跃得相当快。 - jmunsch
2
哦,我的错。我以为你是右键单击服务器,这会导致不同的“属性”对话框。谢谢! - faintsignal

13

一个简单的方法是在终端中输入psql --version来检查版本


5
注意,这只会告诉你客户端版本,可能与服务器不同。请参考 @simhumileco 的答案获取权威方法。 - jstr

12
  1. 使用命令行 服务器:
postgres -V

客户端:

psql -V
  1. 登录到Postgres,然后执行以下步骤:
postgres=# select version();

或者使用命令行界面:

psql -c "SELECT version();"
  1. 使用 VERSION 特殊变量 以 postgres 用户身份登录:
sudo su - postgres

接着:

psql -c "\echo :VERSION"

请查看这里的指南,获取完整的解释。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接