如何在Mac OS X上运行两个PostgreSQL实例?

4

我需要运行集成测试,测试一个系统同时连接本地和远程数据库服务器;我想在我的开发Mac上有两个不同端口的PostgreSQL服务器。我通常使用Postgres.app - 是否可以配置它来运行两个实例?

4个回答

5

只需从二进制目录 (/Applications/Postgres.app/Contents/Versions/latest/bin/initdb) 调用 initdb。如果需要,可以传递 --help,但 initdb 只需要一个数据目录:

initdb -D <dir>

完成后,请进入新目录并编辑postgresql.conf文件,更改端口号。

然后启动。


绝对是最简单的解决方案! - Scott Wilson
一旦您将其配置为所需的样子,您可以打包目录,然后将其还原到原始状态非常容易。您甚至可以关闭fsync和其他一些参数(如果您将其放在ramdisk上),但我发现这些东西并没有太大帮助。(对于单元测试运行的16秒中不到1秒) - boatcoder
有人在尝试后仍然遇到 2022-06-26 14:25:20.470 EDT [80414] FATAL: semctl(65638, 16, SETVAL, 536) failed: Invalid argument 2022-06-26 14:25:20.470 EDT [80414] LOG: database system is shut down 吗? - Janac Meena
备忘录:我只需要两个独立的模式,而不是两个独立的数据库服务器,通过在我的DB URL末尾添加“/<我的模式名称>”来实现了这一点。 - Janac Meena

1
如果您安装两个不同版本的Postgresql,可能会更容易管理。在https://www.postgresql.org/download/macosx/中选择两个版本进行安装。
如果您以前没有安装过Fink、Homebrew或Macports,我建议选择Macports,因为它对其他工具的干扰较小。
要使用的端口号在postgresql.conf中进行配置。只需更改以下行: port = 5432
并重新启动PostgreSQL服务器即可。

1

虚拟机

另一个选择是在Mac上的每个Postgres群集(安装)中运行虚拟机。

Parallels

我已经使用Parallels Desktop For Mac 9、10和11版本实现了这一点。(版本12是当前版本,但我还没有尝试过它与Postgres一起使用。)

我特别喜欢使用虚拟机来运行Postgres,因为这个严肃的数据库 tends tends tend to be a rather heavyweight installation when not using Postgres.app, such as when using the installers provided by EnterpriseDB.com作为对社区的一种礼遇。

网络

你可以在 Parallels 中配置网络,使其完全隔离,共享宿主 Mac 的网络身份,或者分配虚拟机自己的 IP 地址,并在网络上作为独立计算机运行。选择配置... > 硬件 > 网络 1。在弹出菜单中,您可以为虚拟机网络适配器选择以下网络类型之一(摘自在线帮助的描述)。
  • 断开连接
  • 共享网络
    选择此选项以启用虚拟机的网络地址转换(NAT)功能。在这种情况下,您的虚拟机将共享主机计算机当前使用的任何网络连接。
  • 桥接网络
    选择此选项以允许虚拟机通过主机计算机上安装的一个网络适配器访问本地网络和互联网。在这种情况下,虚拟机被视为网络上的独立计算机,并应该像真实计算机一样进行配置。您可以在“桥接网络”选项下面的列表中选择虚拟机适配器将要桥接到的物理适配器。
  • 主机模式网络
    选择此选项以允许虚拟机连接到主机计算机和驻留在其上的虚拟机,并使其在主机计算机外不可见。

您可以为每个虚拟机配置自己的IP号码,而其中的Postgres都使用默认端口5432。提示:使用ping命令行工具验证客户机和主机macOS之间是否可以相互访问。

测试

虚拟机可以帮助测试。

您可以通过这种方式测试macOS,运行较旧或较新版本的macOS作为客户端。客户端macOS版本不需要与主机相同。

同样,您可以在不同的虚拟机中安装不同版本的Postgres以进行测试。

您可以备份代表整个虚拟机的单个文件(当然要先关闭虚拟机)。任何时候想要恢复到原始状态,只需用备份的新副本替换当前的虚拟机文件。

其他虚拟机

Parallels只是可用于macOS(Mac OS X)的三个成功的虚拟机应用程序之一。我期望所有三个都能很好地托管Postgres服务器。

苹果现在不允许在Mac主机上运行虚拟机时将最新版本的macOS作为客户操作系统进行安装。(以前很多年也不允许。)详情请阅读他们的许可证


0

PostgresApp确实具备这种能力,尽管它是隐藏的。(这个答案晚了3年,当时该应用程序可能没有这个功能)

下载链接

打开应用程序后,打开侧边栏(源代码),然后单击+图标以添加另一个服务器。您可以为每个服务器选择名称/版本/端口

如果您还没有设置CLI工具(源代码),请确保进行设置。

sudo mkdir -p /etc/paths.d && echo /Applications/Postgres.app/Contents/Versions/latest/bin | sudo tee /etc/paths.d/postgresapp

如果您想为每个服务器设置不同的psql命令,请在您的~/.profile中添加一些有用的别名:
# Name them whatever you want
alias "psql-project1"="psql -h localhost -p 5432"
alias "psql-project2"="psql -h localhost -p 5433"

截至2020/03/30,下载页面可让您安装支持以下版本的不同版本PostgresApp:

  • 带有PostgreSQL 12.1的Postgres.app
  • 带有PostgreSQL 10.11、11.6和12.1的Postgres.app
  • 带有所有当前支持的PostgreSQL版本的Postgres.app (12.1、11.6、10.11、9.6.16、9.5.20、9.4.25)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接