J'ai une installation postgres 9.2.18 sur CentOS qui a utilisé le chemin d'installation standard. Maintenant, je me suis rendu compte que sur cette partition particulière, il n'y a pas suffisamment d'espace sur le disque dur pour certaines requêtes plus importantes.
Le répertoire data_directory par défaut est activé:
/var/lib/pgsql/data
$ df -h /var/lib/pgsql
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 50G 39G 12G 77% /
Donc, je voudrais déplacer le répertoire de données vers mon référentiel personnel (c'est une base de données de test uniquement pour moi)
$ df -h /home/mlu
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-home 395G 171G 224G 44% /home
Pour ce faire, j'ai essayé:
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
Le démarrage du service postgres ne fonctionne pas maintenant, en raison du nouveau chemin data_directory dans le postgresql.conf. (Cela fonctionne, si je commente à nouveau le chemin du répertoire)
EDIT: Ok, j'ai compris que c'est un conflit de permission. Mais rsync ne devrait-il pas simplement avoir également copié la bonne autorisation?
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.
Je ne sais pas pourquoi j'obtiens toujours une autorisation refusée, car postgres devrait avoir tous les droits nécessaires en tant que propriétaire du dossier:
$ ls -l
total 4
drwxrwxrwx. 6 postgres postgres 4096 Aug 3 2017 pgsq
SELinux bloque l'accès? Vérifiez votre /var/log/audit/audit.log.
Il peut être nécessaire de corriger le contexte SELinux pour le nouveau répertoire:
semanage fcontext --add --equal /var/lib/pgsql /home/mlu/postgres-data/pgsql
restorecon -rv /home/mlu/postgres-data/pgsql/
Je ne sais pas pourquoi j'obtiens toujours une autorisation refusée, car postgres devrait avoir tous les droits nécessaires en tant que propriétaire du dossier:
Non Sudo rsync -av
ne conserve pas les autorisations. Vous devez utiliser -p
pour cela ou,
postgres
postgres