postgresql - 如何为普通用户取消对 postgres 服务器进程的监控

postgresql - 如何为普通用户取消对 postgres 服务器进程的监控

我正在尝试在 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

它运行了,我在控制台中看到了日志消息,并且我可以使用createdbpsql(只要我用 设置套接字文件-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

相关内容