我正在尝试在Ubuntu上使用PostgreSQL。我安装了它,一切正常。但是,由于空间限制,我需要更改数据库的位置,所以我尝试了一个在线指南来完成它。
我继续停止postgresql,创建一个新的空目录并使用
赋予它权限chown postgres:postgres /my/dir/path
这也很好。然后我用了
initdb -D /my/dir/path
启用我的数据库。我还将postgresql.conf
文件中的path_data更改为我的新目录。
当我现在尝试启动数据库时,它会说:The postgresql server failed to start, please check the log file
。但是,没有日志文件!当我更改默认目录时,有些东西搞砸了。我该如何解决这个问题?
答案 0 :(得分:4)
首先:您可能会发现使用Ubuntu在pg_wrapper
中提供的自定义工具,pg_createcluster
,pg_dropcluster
,pg_ctlcluster
等,可以更轻松地在Ubuntu上管理您的Pg安装这些与Ubuntu启动脚本集成,并将配置移动到Ubuntu喜欢保留它的/etc/postgresql/
,而不是数据库中的PostgreSQL默认值。要移动存储实际文件的位置,请使用符号链接(见下文)。
当你遇到问题时,你是如何开始PostgreSQL的?
如果您是通过pg_ctl
启动它,它应该可以正常工作,因为您必须指定数据目录位置。但是,如果您正在使用您的发行版程序包脚本,则他们不知道您已移动了数据目录。
在Ubuntu上,您需要更改/etc/postgresql
中的配置,以告诉脚本数据目录的位置,可能是pg_ctl.conf
或start.conf
的相应版本。我不确定具体细节,因为我从来不需要这样做。这就是原因:
但是,还有更好的方法。使用旧数据库位置到新数据库位置的符号链接。 PostgreSQL和设置脚本很乐意遵循它,您不必更改任何配置。
cd /var/lib/postgresql/9.1/main
mv main main.old
ln -s /new/datadir/location main
我猜“9.1”是因为你没有提供你的Ubuntu版本或你的PostgreSQL版本。
另一种方法是使用mount -o bind
将新的datadir位置映射到旧位置,因此没有注意到差异。然后将绑定装载添加到/etc/fstab
以使其在重新启动后保持不变。如果其中一个工具不喜欢符号链接方法,则只需要这样做。我不认为pg_wrapper
等会出现问题。
您还应注意,由于您已手动使用initdb,因此新数据库的配置将直接位于数据库中,而不是/etc/postgresql/
中。
如果您只是使用Ubuntu集群管理脚本,那就更容易了。