在装有 Ubuntu 12.04 LTS 映像的 Azure 上,我们尝试更改 Postgres 9.3 默认数据和日志文件路径,并在辅助驱动器上首次初始化它们/mnt/pgdata
。我们从通过 apt-get 全新安装 Postgres 9.3 开始。
我们已停止 postgres sudo service postgresql stop
:。
我们尝试运行 pg_createcluster
以下仅显示帮助/手册页。可能是因为缺少版本和名称参数。
pg_createcluster -d /mnt/pgdata/data -l /mnt/pgdata/log --start-conf auto
尽管 中不存在任何内容,但以下结果仍为“错误:集群配置已存在” /mnt/pgdata
。
pg_createcluster 9.3 main -d /mnt/pgdata/data -l /mnt/pgdata/log --start-conf auto
我们对 Linux 总体来说还比较陌生,因此请具体地回答。
此外,我们还有以下问题:
- 使用直接挂载路径可以吗,还是使用符号链接更好?
- 我们还需要做其他什么或更改什么来在默认端口上使用这些默认数据目录设置 Postgres 9.3 并随服务器自动启动吗?
- 还有其他建议吗?
答案1
出现此错误的原因"Error: cluster configuration already exists"
是:该名称main
已分配给最初创建的集群。
如果其中没有任何数据,您可以在创建自己的数据之前删除它:
pg_dropcluster 9.3 main
这也将产生理想的效果,即您的新集群将被分配端口号5432
而不是非默认端口号5433
。
无论您使用直接挂载路径还是符号链接都无关紧要,但请注意,配置文件将在/etc/postgresql/<version>/<clustername>/
数据目录之外创建。
根据其手册页,pg_createcluster
命令需要版本和名称之前的选项,因此命令将是:
pg_createcluster -d /mnt/pgdata/data -l /mnt/pgdata/log --start-conf auto 9.3 main
此外,日志文件位于 中,/mnt/pgdata
因此无法访问logrotate
,因此它会无限增长。您可以查看/etc/logrotate.d/postgresql-common
它是如何配置来处理的/var/log/postgresql/*.log
答案2
在我的计算机上,这个问题通过以下方式解决:
mkdir /var/run/postgresql
chown postgres:postgres /var/run/postgres
service postgresql restart