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

Rob*_*ert 4 postgresql

我在装有 Ubuntu 14.04 的同一台主机上安装了 PostgreSQL 9.4 和 9.5。我的问题是:

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

我设法分别为上述两个问题找到了这些线索,但还没有解决我的问题:

  1. 我发现一个命令pg_ctlcluster可以完成这项工作,但我不知道如何指定正确的参数,例如集群名称。我怎么能弄明白?或者你有什么别的办法?
  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 版本。

有人可以帮忙吗?谢谢!

Rob*_*ert 5

好吧,经过更多的努力,我自己得到了答案:

  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连接9.5版本,运行5433端口,而defaultpsql dbname连接默认5432端口,属于我旧的9.4版本。

就是这样!