提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
在原有PostgreSQL实例正常运行的情况下新增一个实例,使用不同的端口运行,方便分开管理不同的数据库。
一、环境设置
将PostgreSQL主目录(如C:\Program Files\PostgreSQL\10\bin)加入到Path环境变量中,否则pg_ctl和initdb等相关语句都无法使用。
二、操作步骤
1.为新实例创建数据目录
使用语句:
initdb -D "D:\PostgreSQL\data2" -E UTF-8 --locale=chs -U postgres -W
语句运行后需要输入两次密码
其中"D:\PostgreSQL\data2"是新实例的目录位置,创建时不要设置到C:\Program Files\目录下,否则会失败。想放到C:\Program Files\PostgreSQL\10下与原有data并列的话可以先在其他路径创建,之后将data2文件夹整个复制过去,后续的路径和相关语句也要同步变动。
通常一个数据目录data会占用3~10G的存储空间,也会随着后续的使用越来越大。不建议将其设置到C盘。
2.修改新实例数据目录下的配置文件
(1)修改postgres.conf:
①修改第63行的
port = 5432 # (change requires restart)
为其他的具体端口号,该端口号不能与原有实例的端口号相同,也不能与其他程序的端口号冲突。
②有非本机连接需求的话需要修改第59行的监听端口为*
listen_addresses = '*' # what IP address(es) to listen on;
③修改第41行的数据路径
#data_directory = 'D:\PostgreSQL\data2' # use data in another directory
④修改第43行的pg_hba.conf文件路径
#hba_file = 'D:\PostgreSQL\data2\pg_hba.conf' # host-based authentication file
# (change requires restart)
⑤修改第45行的pg_ident.conf文件路径
#ident_file = 'D:\PostgreSQL\data2\pg_ident.conf' # ident configuration file
# (change requires restart)
⑥修改第365行的日志文件存储路径
#log_directory = 'D:\PostgreSQL\data2\log' # directory where log files are written,
# can be absolute or relative to PGDATA
(2)必须修改pg_hba.conf第84~90行的trust为md5,否则数据库不用密码就能连接,会因裸奔而受到勒索和破坏:
# IPv4 local connections:
host all all 127.0.0.1/32 md5
# IPv6 local connections:
host all all ::1/128 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
host replication all 127.0.0.1/32 md5
host replication all ::1/128 md5
3.为新实例数据目录注册服务
使用语句:
pg_ctl register -N "postgresql-data2" -D "D:\PostgreSQL\data2"
postgresql-data2是新注册的服务名称,可以根据实际情况修改为其他名称。
4.启动服务
使用语句:
pg_ctl start -N "postgresql-data2" -D "D:\PostgreSQL\data2"
启动服务前必须完成步骤2中的配置修改,否则会因为端口冲突等原因报错(如下图)。
正常启动的结果如下图:
5.测试连接
使用SQL Shell、pgAdmin、Navicat等进行连接测试,验证服务是否可以正常连接。
如果本机可以连接而其他机器不能连接注意在pg_hba.conf最后一行增加
host all all 0.0.0.0/0 md5
防火墙也要对新的服务放行。
使用Navicat验证能够成功连接