即使数据目录存在,也让 pg_createcluster 创建配置目录

即使数据目录存在,也让 pg_createcluster 创建配置目录

我们有一个设置 PostgreSQL 15 的 Ansible 剧本。它使用创建一个新集群pg_createcluster,对创建的配置文件进行一些更改pg_createcluster(在 /etc/postgresql/15/... 中)等。当 PG 集群是新的时,这可以正常工作,但有时我们想重新安装操作系统,同时保留 PG 数据(位于单独的磁盘上)。然后 pg_createcluster 失败,并显示:

配置已经存在的集群(配置:/etc/postgresql/15/...

错误:move_conffile:所需的配置文件 DATA_DIR/postgresql.conf 不存在

此限制记录在手册页

如果数据目录已经存在,则通过移动配置文件并设置 data_directory 选项将其集成到 postgresql-common 结构中。请注意,这仅适用于直接使用 initdb 创建的数据目录,即所有配置文件(postgresql.conf 等)都必须存在于数据目录中。

好的,但是...当使用创建集群时我们应该做什么pg_createcluster?这似乎是一个应该支持的常见场景!

答案1

我的解决方法是检查数据目录是否已经存在(并确保包含 PG_VERSION 文件),如果是,则运行pg_createcluster --datadir=SOME_TEMP_DIR只是SOME_TEMP_DIR一个随机临时目录,然后更新data_directorypostgresql.conf真实目录(使用 Ansiblelineinfile模块)并删除SOME_TEMP_DIR

相关内容