我正在尝试在Ubuntu上使用PostgreSQL。 我安装了它,一切工作正常。 但是,由于空间限制,我需要更改数据库的位置,所以我尝试了一个在线指南。
我继续停止postgresql,创build一个新的空目录,并通过使用权限
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
。 但是,没有日志文件! 当我更改默认目录时,有些东西搞砸了。 我该如何解决?
首先:使用Ubuntu提供的自定义工具作为pg_wrapper
: pg_createcluster
, pg_dropcluster
, pg_ctlcluster
等的一部分,可能会更容易在Ubuntu上管理您的Pg安装。这些与Ubuntu启动脚本集成并将配置移动到/etc/postgresql/
其中Ubuntu喜欢保留它,而不是数据库中的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,所以你的新的datadir将直接在datadir中,而不是在/etc/postgresql/
。
如果您只是使用Ubuntu集群管理脚本,那将更容易一些。