我正在尝试在 Debian 上的主目录中设置 PostgreSQL 集群。
编辑:我认为这是个好主意,原因如下:
- 我并不经常使用 Postgres,因此目前没有启用该服务。我只是在真正需要时才
systemd
启动它。service
- 默认数据目录位于我的根分区,该分区相当小。因此,我想将其移动到我的主分区,该分区很大。
我已经创建了集群并可以成功启动服务器,但似乎无法对其进行守护进程化。
这是我使用 Debian 自定义包装器命令创建集群的方法:
$ PG_CLUSTER_CONF_ROOT=/home/user/.local/etc/postgresql pg_createcluster -u user -d /home/user/.local/var/lib/postgresql -s /home/user/.local/var/run/postgresql -l /home/user/.local/var/log/postgresql -p 5434 --start-conf manual --locale en_GB.UTF-8 9.5 mycluster
install: cannot change owner and permissions of ‘/home/user/.local/etc/postgresql/9.5’: Operation not permitted
Creating new cluster 9.5/mycluster ...
config /home/user/.local/etc/postgresql/9.5/mycluster
data /home/user/.local/var/lib/postgresql
locale en_GB.UTF-8
socket /home/user/.local/var/run/postgresql
port 5434
Warning: The parent /var/run/postgresql of the selected
stats_temp_directory is not writable for the cluster owner. Not adding this
setting in postgresql.conf.
(我手动添加了该stats_temp_directory
选项。)
我现在可以像这样启动集群(再次使用 Debian 包装器命令):
$ PG_CLUSTER_CONF_ROOT=/home/user/.local/etc/postgresql pg_ctlcluster --foreground 9.5 mycluster start
它运行了,我在控制台中看到了日志消息,并且我可以使用createdb
和psql
(只要我用 设置套接字文件-h
并用 设置端口-p
,就可以了)。
但是如果没有这个选项,我无法让它启动--foregound
。它会等待一小会儿,然后说:
The PostgreSQL server failed to start. Please check the log output:
我尝试过设置日志文件,都像这样:
$ PG_CLUSTER_CONF_ROOT=/home/user/.local/etc/postgresql pg_ctlcluster -o '-r /home/user/.local/var/log/postgresql/server.log' 9.5 mycluster start
像这样:
$ PG_CLUSTER_CONF_ROOT=/home/user/.local/etc/postgresql pg_ctlcluster 9.5 mycluster start -- -l /home/user/.local/var/log/postgresql/server.log
但我仍然得到相同的结果。并且没有创建日志文件。
答案1
在您的情况下,绕过 Debian/Ubuntu 的 postgres 包装器可能会更简单。
如何使用以下命令初始化并启动私有 postgres 集群:
$ mkdir $HOME/pg
$ /usr/lib/postgresql/9.5/bin/initdb -D $HOME/pg
$ vi $HOME/pg/postgresql.conf
# change `port` and `unix_socket_directories`, for example:
port= 5495
unix_socket_directories = '/tmp'
# start the server, will run in background and processes belonging to $USER
$ /usr/lib/postgresql/9.5/bin/pg_ctl -D $HOME/pg -l /path/to/logfile start
# use it (initdb has already created a superuser from your $USER name)
$ psql -p 5495 -h/tmp -d postgres
# stop the server
$ /usr/lib/postgresql/9.5/bin/pg_ctl -D $HOME/pg -l /path/to/logfile stop