如何运行postgresql pg_ *命令(例如pg_dump)的特定版本(8.4、9.1)


11

我安装了Postgresql版本8.4和9.1。对于任何给定的Postgresql命令,如何指定要运行的命令的特定版本?(例如psqlpg_dumppg_ctlclusterpg_restore,...)

我的问题是出于要进行pg_dump准备从8.4升级到9.1的动机,而且我想知道我正在运行哪个pg_dump版本。

我正在Ubuntu 10.04 Natty上运行。

Answers:


15

您在Ubuntu上,显然已经pg_wrapper安装了Martin Pitt的软件包(从判断pg_ctlcluster),该软件包由软件包提供,postgresql-common并随附标准的Debian软件包。我在Debian上使用了相同的方法

在Linux系统上,which在shell中运行以查看实际选择了哪个可执行文件:

postgres@db:~$ which pg_dump
/usr/bin/pg_dump
postgres@db:~$ ls -l /usr/bin/pg_dump
lrwxrwxrwx 1 root root 37  4. Jun 18:57 /usr/bin/pg_dump -> ../share/postgresql-common/pg_wrapper

pg_dump实际上是的符号链接pg_wrapper,它动态地为您运行的数据库集群选择适当版本的客户端程序pg_dump。我引用以下手册页pg_wrapper

该程序仅作为指向与/ usr / lib / postgresql / version / bin中的PostgreSQL程序相对应的名称的链接运行。它为用户确定配置的集群和数据库,并调用所需程序的适当版本以连接到该集群和数据库,并为该命令提供任何指定的选项。

   The target cluster is selected by the following means, in descending order of precedence:
   1.  explicit specification with the --cluster option
   2.  explicit specification with the PGCLUSTER environment variable
   3.  matching entry in ~/.postgresqlrc (see postgresqlrc(5)), if that file exists
   4.  matching entry in /etc/postgresql-common/user_clusters (see user_clusters(5)), if that file exists
   5.  If only one local cluster exists, that one will be selected.
   6.  If several local clusters exist, the one listening on the default port 5432 will be selected.

   If none of these rules match, pg_wrapper aborts with an error.

IOW,应该自动选择正确的版本-除非您以某种方式搞砸了安装。您始终可以添加--cluster特定选项。


1
请注意:这对远程连接没有帮助。我安装了8.3和9.1客户端工具,由于某种原因它默认为8.3。我必须在/ usr / lib中手动选择路径以使用正确的版本。我以为最新的默认情况下会使用,但似乎没有。
Sami Kuhmonen 2014年

您不需要最新的数据库,但是需要与您的数据库匹配的数据库。但是,出于某些目的,新版本的pg_dump可能是更好的选择。
Erwin Brandstetter 2014年

您能说明一下〜/ .postgreslqrc文件中到底需要什么吗?我的客户端输出-> psql(8.4.21,服务器9.1.13)警告:psql版本8.4,服务器版本9.1。某些psql功能可能不起作用。
Croydon Dias 2014年

这似乎对我不起作用。我在具有9.1的服务器上创建了一个转储,当我尝试在具有9.1和8.4的另一台服务器上进行还原时,它告诉我它无法识别文件格式。另外,没有--cluster命令行选项。
Alexis Wilke 2014年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.