我如何在 Mac OS X 上 运行 PostgreSQL 的两个副本?
How can I run two copies of PostgreSQL on Mac OS X?
我需要运行 对同时具有本地和远程数据库服务器的系统进行集成测试;我想在我的开发 Mac 上有两个 PostgreSQL 服务器在不同的端口。我通常使用 Postgres.app - 这可以以某种方式配置为 运行 两个实例吗?
只需从二进制目录 (/Applications/Postgres.app/Contents/Versions/latest/bin/initdb) 调用 initdb。如果您愿意,请传递 --help 但 initdb 只需要一个数据目录,因此:
initdb -D <dir>
完成后转到新目录并编辑 postgresql.conf 并更改端口。
然后启动
如果您安装两个不同的 Postgresql 发行版,您可能会发现这更容易管理。在 https://www.postgresql.org/download/macosx/
中选择两个
如果您从未安装过 Fink、Homebrew 或 Macports,我建议您选择 Macports,因为它对其他工具的干扰较小。
要使用的端口号在postgresql.conf中配置。只需更改显示
的行
端口=5432
并重新启动该 PostgreSQL 服务器。
虚拟Mac海因斯
另一个选项是 运行 每个 Postgres 集群(安装)在您的 Mac 上的虚拟机中。
平行线
我已经使用 Parallels Desktop For Mac 版本 9、10 和 11 完成了此操作。(版本 12 是最新的,但我还没有在 Postgres 上尝试过。)
我特别喜欢为 Postgres 使用 VM,因为在不使用 Postgres.app, such as when using the installers provided by EnterpriseDB.com 作为对社区的礼貌时,这个严肃的数据库往往是一个相当重量级的安装。
网络
您可以将 Parallels 中的网络配置为完全隔离,共享主机 Mac 的网络身份,或者为 VM 分配自己的 IP 地址并充当网络上的独立计算机。选择 Configure…
> Hardware
> Network 1
。在 Source
弹出菜单中,您可以为虚拟机网络适配器选择以下网络类型之一(描述摘自联机帮助):
- 断开连接
- 共享网络
Select此选项为虚拟机启用网络地址转换 (NAT) 功能。在这种情况下,您的虚拟机将共享主机当前使用的任何网络连接。
- Bridged Network
Select这个选项允许虚拟机通过安装在虚拟机上的网络适配器之一访问本地网络和互联网主机。在这种情况下,虚拟机被视为网络上的一台独立计算机,应该以与真实计算机相同的方式进行配置。您可以在桥接网络选项下方的列表中选择虚拟机适配器将被桥接的物理适配器。
- Host-Only Network
Select这个选项允许虚拟机连接到主机和驻留在主机上的虚拟机使其在主机之外不可见。
您可以为每个虚拟机配置自己的 IP 号,而每个虚拟机中的 Postgres 使用相同的默认端口 5432
。提示:使用 ping
命令行工具验证来宾和主机 macOS 是否可以相互访问。
测试
虚拟机可以帮助进行测试。
您可以通过这种方式测试 macOS,运行 较旧或较新版本的 macOS 作为访客。来宾 macOS 版本不需要与主机相同。
同样,您可以在不同的 VM 中安装不同版本的 Postgres 以进行测试。
您可以为代表整个 VM 的单个文件制作一个备份副本(当然要先关闭 VM)。任何时候你想恢复到它的原始状态,用备份的新副本替换当前的 VM 文件。
其他虚拟机
Parallels 只是可用于 macOS (Mac OS X) 的三个成功的虚拟机应用程序之一。我希望这三个都可以很好地托管 Postgres 服务器。
当 运行 作为主机在 Mac 上时,Apple 现在允许在虚拟机中作为来宾 OS 安装最新版本的 macOS。 (以前很多年前不允许。)Read their license 了解详情。
PostgresApp 确实具有此功能,尽管它是隐藏的。 (这个答案晚了3年,app当时可能没有这个)
打开App后,打开侧边栏(source),点击+
图标添加另一台服务器。您可以为每个服务器选择name
/ version
/ port
。
如果您还没有设置 CLI 工具 (source),请确保设置。
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:
- Postgres.app 与 PostgreSQL 12.1
- Postgres.app 与 PostgreSQL 10.11、11.6 和 12.1
- Postgres.app 所有当前支持的 PostgreSQL 版本 (12.1, 11.6, 10.11, 9.6.16, 9.5.20, 9.4.25)
我需要运行 对同时具有本地和远程数据库服务器的系统进行集成测试;我想在我的开发 Mac 上有两个 PostgreSQL 服务器在不同的端口。我通常使用 Postgres.app - 这可以以某种方式配置为 运行 两个实例吗?
只需从二进制目录 (/Applications/Postgres.app/Contents/Versions/latest/bin/initdb) 调用 initdb。如果您愿意,请传递 --help 但 initdb 只需要一个数据目录,因此:
initdb -D <dir>
完成后转到新目录并编辑 postgresql.conf 并更改端口。
然后启动
如果您安装两个不同的 Postgresql 发行版,您可能会发现这更容易管理。在 https://www.postgresql.org/download/macosx/
中选择两个如果您从未安装过 Fink、Homebrew 或 Macports,我建议您选择 Macports,因为它对其他工具的干扰较小。
要使用的端口号在postgresql.conf中配置。只需更改显示
的行端口=5432
并重新启动该 PostgreSQL 服务器。
虚拟Mac海因斯
另一个选项是 运行 每个 Postgres 集群(安装)在您的 Mac 上的虚拟机中。
平行线
我已经使用 Parallels Desktop For Mac 版本 9、10 和 11 完成了此操作。(版本 12 是最新的,但我还没有在 Postgres 上尝试过。)
我特别喜欢为 Postgres 使用 VM,因为在不使用 Postgres.app, such as when using the installers provided by EnterpriseDB.com 作为对社区的礼貌时,这个严肃的数据库往往是一个相当重量级的安装。
网络
您可以将 Parallels 中的网络配置为完全隔离,共享主机 Mac 的网络身份,或者为 VM 分配自己的 IP 地址并充当网络上的独立计算机。选择 Configure…
> Hardware
> Network 1
。在 Source
弹出菜单中,您可以为虚拟机网络适配器选择以下网络类型之一(描述摘自联机帮助):
- 断开连接
- 共享网络
Select此选项为虚拟机启用网络地址转换 (NAT) 功能。在这种情况下,您的虚拟机将共享主机当前使用的任何网络连接。 - Bridged Network
Select这个选项允许虚拟机通过安装在虚拟机上的网络适配器之一访问本地网络和互联网主机。在这种情况下,虚拟机被视为网络上的一台独立计算机,应该以与真实计算机相同的方式进行配置。您可以在桥接网络选项下方的列表中选择虚拟机适配器将被桥接的物理适配器。 - Host-Only Network
Select这个选项允许虚拟机连接到主机和驻留在主机上的虚拟机使其在主机之外不可见。
您可以为每个虚拟机配置自己的 IP 号,而每个虚拟机中的 Postgres 使用相同的默认端口 5432
。提示:使用 ping
命令行工具验证来宾和主机 macOS 是否可以相互访问。
测试
虚拟机可以帮助进行测试。
您可以通过这种方式测试 macOS,运行 较旧或较新版本的 macOS 作为访客。来宾 macOS 版本不需要与主机相同。
同样,您可以在不同的 VM 中安装不同版本的 Postgres 以进行测试。
您可以为代表整个 VM 的单个文件制作一个备份副本(当然要先关闭 VM)。任何时候你想恢复到它的原始状态,用备份的新副本替换当前的 VM 文件。
其他虚拟机
Parallels 只是可用于 macOS (Mac OS X) 的三个成功的虚拟机应用程序之一。我希望这三个都可以很好地托管 Postgres 服务器。
当 运行 作为主机在 Mac 上时,Apple 现在允许在虚拟机中作为来宾 OS 安装最新版本的 macOS。 (以前很多年前不允许。)Read their license 了解详情。
PostgresApp 确实具有此功能,尽管它是隐藏的。 (这个答案晚了3年,app当时可能没有这个)
打开App后,打开侧边栏(source),点击+
图标添加另一台服务器。您可以为每个服务器选择name
/ version
/ port
。
如果您还没有设置 CLI 工具 (source),请确保设置。
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:
- Postgres.app 与 PostgreSQL 12.1
- Postgres.app 与 PostgreSQL 10.11、11.6 和 12.1
- Postgres.app 所有当前支持的 PostgreSQL 版本 (12.1, 11.6, 10.11, 9.6.16, 9.5.20, 9.4.25)