如何在同一主机上管理不同版本的 PostgreSQL 服务器?

如何在同一主机上管理不同版本的 PostgreSQL 服务器?

我在同一个主机上安装了 PostgreSQL 9.4 和 9.5,以及 Ubuntu 14.04。我的问题是:

  1. 当我运行 时service postgresql start|stop,两个版本都会启动/停止。但我想控制执行哪一个。
  2. 当我用来psql连接 PostgreSQL 时,它总是连接到 9.4。但我想控制要连接哪个服务器。我知道我可以通过不同的端口连接,9.4 用 5432,9.5 用 5433。但我想通过对等身份验证进行连接,即通过 Unix 套接字。

我设法分别针对上述两个问题找到了这些线索,但并未解决我的问题:

  1. 我发现一个命令pg_ctlcluster可以完成这项工作,但我不知道如何指定正确的参数,例如 cluster-name。我该如何解决?或者您有其他方法吗?
  2. Unix 套接字可以通过 进行配置unix_socket_directories = '/var/run/postgresql'。但两个版本都有相同的配置目录,其中有9.4-main.pg_stat_tmp 9.4-main.pid 9.5-main.pg_stat_tmp 9.5-main.pid不同版本的子目录。当我这样做时psql -h /var/run/postgresql,它只会连接到旧的 9.4 版本。

有人能帮忙吗?谢谢!

答案1

好吧,经过进一步的努力,我自己得到了答案:

  1. Ubuntu 和 Debian 提供了pg_ctlcluster以及串行pg_xxxcluster命令来管理同一主机上的多个 PostgreSQL 版本/实例。要找出版本和集群名称,只需执行pg_lscluster,输出如下: 9.4 main 5432 online postgres /var/lib/postgresql/9.4/main /var/log/postgresql/postgresql-9.4-main.log 9.5 main 5433 online postgres /var/lib/postgresql/9.5/main /var/log/postgresql/postgresql-9.5-main.log 例如,要停止 9.4,请使用pg_ctlcluster stop 9.4 main。顺便说一句,要禁用自动启动 9.4,edit /etc/postgresql/9.4/main/start.conf
  2. psql需要一个--port, -p选项来知道要连接哪个实例,即使对于通过 Unix Socket 进行对等身份验证也是如此,因为所有版本都具有相同的功能unix_socket_directories。例如,psql -p 5433 dbname可以通过 Unix Socket 连接到使用端口 5433 运行的版本 9.5,而默认psql dbname连接到默认端口 5432,这属于我的旧 9.4 版本。

就是这样!

答案2

在基于 Debian 的发行版(如 Ubuntu)上,psql(以及一些其他 PostgreSQL 命令)有一个指向 的符号链接pg_wrapper,它提供了该--cluster选项。请参阅man pg_wrapper了解详情。

对于本地连接,您可以使用

psql --cluster 9.4/main
psql --cluster 9.5/main

要查看您的版本、集群和端口,请使用pg_lsclusters。示例输出:

# pg_lsclusters
Ver Cluster Port Status Owner    Data directory               Log file
9.6 main    5432 online postgres /var/lib/postgresql/9.6/main /var/log/postgresql/postgresql-9.6-main.log
11  main    5433 online postgres /var/lib/postgresql/11/main  /var/log/postgresql/postgresql-11-main.log

要设置默认值,您可以将首选版本设置为使用端口 5432 /etc/postgresql/*/main/postgresql.conf,并将其他版本设置为其他端口。

(这里也回答了这个问题:在同一台 Ubuntu 服务器上运行多个版本的 PostgreSQL

相关内容