Le répertoire racine contenant les données de postgres est définit par la valeur de la variable data_directory présente dans le fichier de configuration /etc/postgresql/9.6/main/postgresql.conf
data_directory = '/var/lib/postgresql/9.6/main'
Pour s'assurer que le serveur en cours d’exécution utilise ce répertoire, on peut utiliser le client postgres pour consulter la configuration effective:
su postgres # Lancer le client postgres en mode interactif psql SHOW data_directory; \q
Une fois le répertoire identifié, on peut arrêter le serveur
systemctl stop postgresql systemctl status postgresql
Déplacer les dossier via rsync afin de conserver les droits
rsync -av /var/lib/postgresql /new/path/
Ici le dossier /var/lib/postgresql et son contenu seront recréés à l'identique dans le répertoire /new/path/
Renommer l'ancien répertoire temporairement afin de conserver une copie en cas de problème
mv /var/lib/postgresql/9.6/main /var/lib/postgresql/9.6/main.backup
Modifier le fichier de configuration:
data_directory = '/new/path/postgresql/9.6/main'
Relancer le serveur
systemctl start postgresql systemctl status postgresql
Si tout fonctionne normalement, le serveur est en cours d’exécution. On peut comme en début de procédure consulter la nouvelle valeur effective de data_directory à l'aide du client psql.
Le dossier d'origine peut être supprimé:
rm -fr /var/lib/postgresql/9.6/main.backup