在 CentOS 上更改 postgres 的数据目录

May*_*yak 7 postgresql centos

我在 CentOS 上安装了 postgres 9.2.18,它使用标准安装路径。现在我意识到在这个特定的分区上,没有足够的硬盘空间来进行一些更大的查询。

默认的 data_directory 位于:

/var/lib/pgsql/data


$ df -h /var/lib/pgsql
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root   50G   39G   12G  77% /
Run Code Online (Sandbox Code Playgroud)

所以,我想将数据目录移动到我的主存储库(它是一个仅供我自己使用的测试数据库)

$ df -h /home/mlu
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-home  395G  171G  224G  44% /home
Run Code Online (Sandbox Code Playgroud)

为此,我尝试过:

1) Copying postgres data using rsync:    
sudo rsync -av /var/lib/pgsql /home/mlu/postgres-data

2) Addressing the new path within postgresql.conf:
sudo -u postgres nano /var/lib/pgsql/data/postgresql.conf
  data_directory = '/home/mlu/postgres-data/pgsql/'

3) starting postgres:
sudo systemctl start postgresql
Run Code Online (Sandbox Code Playgroud)

由于 postgresql.conf 中的新 data_directory 路径,现在无法启动 postgres 服务。(它有效,如果我再次注释掉目录路径)

编辑:好的,我发现这是权限冲突。但是 rsync 不应该也只是复制了正确的权限吗?

sudo service postgresql.service status
Redirecting to /bin/systemctl status  postgresql.service.service
? postgresql.service - PostgreSQL database server
   Loaded: loaded (/usr/lib/systemd/system/postgresql.service; enabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since Tue 2018-02-13 18:34:54 CET; 21s ago
  Process: 27416 ExecStop=/usr/bin/pg_ctl stop -D ${PGDATA} -s -m fast (code=exited, status=0/SUCCESS)
  Process: 27484 ExecStart=/usr/bin/pg_ctl start -D ${PGDATA} -s -o -p ${PGPORT} -w -t 300 (code=exited, status=1/FAILURE)
  Process: 27473 ExecStartPre=/usr/bin/postgresql-check-db-dir ${PGDATA} (code=exited, status=0/SUCCESS)
 Main PID: 27290 (code=exited, status=0/SUCCESS)

Feb 13 18:34:53 axonlu-ws026.mappuls.int systemd[1]: Starting PostgreSQL database server...
Feb 13 18:34:53 axonlu-ws026.mappuls.int pg_ctl[27484]: FATAL:  could not read permissions of directory "/home/mlu/postgres-data/pgsql": Permission denied
Feb 13 18:34:54 axonlu-ws026.mappuls.int pg_ctl[27484]: pg_ctl: could not start server
Feb 13 18:34:54 axonlu-ws026.mappuls.int pg_ctl[27484]: Examine the log output.
Feb 13 18:34:54 axonlu-ws026.mappuls.int systemd[1]: postgresql.service: control process exited, code=exited status=1
Feb 13 18:34:54 axonlu-ws026.mappuls.int systemd[1]: Failed to start PostgreSQL database server.
Feb 13 18:34:54 axonlu-ws026.mappuls.int systemd[1]: Unit postgresql.service entered failed state.
Feb 13 18:34:54 axonlu-ws026.mappuls.int systemd[1]: postgresql.service failed.
Run Code Online (Sandbox Code Playgroud)

不知道为什么我的权限仍然被拒绝,因为 postgres 作为文件夹的所有者应该拥有所有必要的权限:

$ ls -l
total 4
drwxrwxrwx. 6 postgres postgres 4096 Aug  3  2017 pgsq
Run Code Online (Sandbox Code Playgroud)

Eva*_*oll 1

不知道为什么我仍然被拒绝权限,因为 postgres 应该拥有作为文件夹所有者的所有必要权利:

sudo rsync -av不保留权限。-p你需要为此使用,或者,

  1. 创建文件夹并将所有者设置为postgres
  2. 切换到postgres用户
  3. 复制文件。