AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 800486
Accepted
Robert
Robert
Asked: 2016-09-02 06:37:59 +0800 CST2016-09-02 06:37:59 +0800 CST 2016-09-02 06:37:59 +0800 CST

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

  • 772

我在 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可以完成这项工作,但我不知道如何指定正确的参数,比如 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 版本。

有人可以帮忙吗?谢谢!

postgresql
  • 2 2 个回答
  • 6237 Views

2 个回答

  • Voted
  1. Best Answer
    Robert
    2016-09-02T16:35:31+08:002016-09-02T16:35:31+08:00

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

    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 版本。

    而已!

    • 5
  2. mivk
    2020-04-20T08:46:18+08:002020-04-20T08:46:18+08:00

    在 Ubuntu 等基于 Debian 的发行版上,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)

    • 2

相关问题

  • OS X 上的 Postgresql 安装问题

  • 修复 mysql 命令行程序中的 Control-C?

  • 有哪些好的 PostgreSQL 管理工具?[关闭]

  • Access 通过 ODBC 连接到远程 Postgresql 数据库是否可用?

  • 哪个数据库服务器扩展性更好:PostgreSQL 还是 MySQL?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve