postgresql 在同一台计算机上创建多个Postgres示例

cbwuti44  于 2022-11-29  发布在  PostgreSQL
关注(0)|答案(4)|浏览(406)

为了测试流复制,我想在同一台机器上创建第二个Postgres示例。其想法是,如果可以在测试服务器上完成,那么在两台生产服务器上设置它应该是微不足道的。
示例应该使用不同的配置文件和不同的数据目录。我尝试按照这里的说明http://ubuntuforums.org/showthread.php?t=1431697,但我还没有弄清楚如何让Postgres使用不同的配置文件。如果我复制init脚本,脚本只是同一个Postgres示例的别名。
我正在使用Postgres 9.3,Postgres帮助页面上说要在postgres命令行上指定配置文件。我不太清楚这是什么意思。我是否应该安装一些客户端来使其工作?谢谢。

uplii1fm

uplii1fm1#

我假设您可以通过使用postgresql实用程序来解决问题。

建立丛集

$ initdb -D /path/to/datadb1
$ initdb -D /path/to/datadb2

运行示例

$ pg_ctl -D /path/to/datadb1 -o "-p 5433" -l /path/to/logdb1 start
$ pg_ctl -D /path/to/datadb2 -o "-p 5434" -l /path/to/logdb2 start

测试流

现在,您有两个示例在端口5433和5434上运行。它们的配置文件位于initdb指定的数据目录中。调整它们以进行流式复制。
默认安装在端口5432中保持不变。

hmmo2u0o

hmmo2u0o2#

在PostgreSQL 9.5上创建新服务器示例的步骤
1.在命令提示符下运行:

initdb -D Instance_Directory_path -U username -W

(提示输入密码)
1.创建新示例目录后,以管理员身份运行命令提示符

pg_ctl register -N service_name -D Instance_Directory_path -o "-p port_no"

1.注册服务后,启动服务器

pg_ctl start -D Instance_Directory_path -o "-p port_no"
fhity93d

fhity93d3#

在基于Debian的发行版上,你可以使用pg_createcluster代替initdb

$ pg_createcluster -u [user] -g [group] -d /path/to/data -l /path/to/log -p 5433

此外,pg_ctlclusterpg_ctl的替代项。

kuuvgm7e

kuuvgm7e4#

要完成其他答案,请访问CentOS 6和7
在运行了类似于

$ initdb -D /path/to/newdb

您必须至少更改port配置选项,并且可能更改配置文件postgresql.conf中的listen_addresses
您可能希望新示例在系统启动时自动运行(例如在关机时),而不是像前面的答案中解释的那样立即启动这个新示例。要做到这一点,由于CentOS没有pg_ctl register选项(仅适用于Windows),您必须创建一个新的服务文件并注册它,以便systemctl或service可以自动启动它。

*森托斯6

按照下面的命令获取服务的init文件:

[root@machine ~]# service postgresql-9.6 edit
Usage: /etc/init.d/postgresql-9.6 {start|stop|status|restart|upgrade|condrestart|try-restart|reload|force-reload|initdb|promote}
[root@machine ~]# cd /etc/init.d          # Now we know where service file is
[root@machine init.d]# cp -p postgresql-9.6 postgresql-9.6_5433
[root@machine init.d]# vi postgresql-9.6_5433

现在您可以将PGDATA目录更改为new instance所在的目录。如果您使用的是9.4之前的Postgresql版本(在回答这个问题时,您不应该使用此版本),则还必须将PGPORT更改为new instance正在侦听的值。
新服务的名称由您决定。我通常采用原始服务名称并在末尾添加端口号。
现在您只需注册新服务:

[root@machine init.d]# chkconfig postgresql-9.6_5433 on        # service registered!
[root@machine init.d]# service postgresql-9.6_5433 start
Iniciando servicios postgresql-9.6_5433:                   [  OK  ]
[root@machine init.d]# service postgresql-9.6_5433 status
Se está ejecutando postgresql-9.6_5433 (pid  120993)...

*森托斯7

在CentOS 7中,使用systemctl而不是service来控制机器上运行的服务,命令和路径略有变化,但过程是相同的:创建新服务文件,使用新位置/端口进行编辑,注册并启动:

[root@localhost ~]# locate postgresql.service
/etc/systemd/system/multi-user.target.wants/postgresql.service
/usr/lib/systemd/system/postgresql.service
[root@localhost ~]# cd /usr/lib/systemd/system
[root@localhost ~]# cp -p postgresql.service postgresql_5433.service
[root@localhost ~]# vi postgresql_5433.service
# Change PGDATA and maybe PGPORT if PG version <9.4
[root@localhost ~]# systemctl enable postgresql_5433.service
[root@localhost ~]# systemctl start postgresql_5433.service
[root@localhost ~]# systemctl list-unit-files | grep postgres
postgresql.service                                 enabled 
postgresql_5433.service                            enabled

相关问题