我在Ubuntu 14.04的同一台主机上安装了PostgreSQL 9.4和9.5。 我的问题是:
service postgresql start|stop ,两个版本开始/停止。 但我想控制哪一个做。 psql连接到PostgreSQL时,它总是连接到9.4。 但是我想控制要执行的服务器。 我知道我可以通过不同的端口连接,54为9.4和5433为9.5。 但是我想通过peer auth来连接,就是通过Unix套接字。 我设法find了上述两个问题的线索,但还没有解决我的问题:
pg_ctlcluster可能会做的工作,但我不知道如何指定正确的参数,例如,群集名称。 我怎么弄出来的? 或者你有其他的方式? unix_socket_directories = '/var/run/postgresql' 。 但是两个版本都有相同的configuration目录,其中有不同版本的子目录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版本。 谁能帮忙? 谢谢!
好了,经过一番努力,我自己得到了答案:
pg_ctlcluster和一个串行pg_xxxcluster命令来pipe理同一主机上的多个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 psql需要一个--port, -p选项来知道要连接哪个实例,即使是Unix Socket的对等authentication,因为所有的版本都有相同的unix_socket_directories 。 例如, psql -p 5433 dbname可以通过Unix Socket连接到运行端口5433的版本9.5,而默认的psql dbname连接到属于我旧的9.4版本的默认端口5432。 而已!