web-dev-qa-db-fra.com

Changer la variable PostgreSQL PGDATA avec systemctl

Je veux changer le répertoire de données de postgres en /home/postgres/data éditer le postgresql.service au lieu de changer le fichier /etc/postgresql/10/main/postgresql.conf.

J'ai donc édité le service avec

Sudo systemctl edit postgresql.service

Et ajouté ces lignes:

[Service]
Environment=PGDATA=/home/postgres/data

Et redémarrez le service avec Sudo servicetl restart postgresql.service.

Mais le répertoire de données ne change pas.

Éditez également [email protected] et redémarrez mon ordinateur portable, mais le répertoire de données n'a pas changé.

Comment modifier le répertoire de données pour postgres à l'aide de services ou d'unités systemctl?

1
toledano

Le répertoire de données doit être défini dans les fichiers _postgresql.conf_.

Pourquoi?

Comme PostgreSQL est empaqueté sur Ubuntu, le _postgresql.service_ est un service qui peut gérer plusieurs instances de PostgreSQL exécutées simultanément (vous pouvez par exemple avoir _10/main_ et _10/main2_ ou _9.6/main_) et ils ne peuvent pas partager le même $ PGDATA, donc le définir globalement au niveau du service parapluie ne peut pas fonctionner.

En outre, la définir localement via des unités de service telles que _[email protected]_ poserait un problème aux commandes qui gèrent des instances de PG telles que pg_lsclusters ou pg_ctlcluster , comme on ne sait pas comment ils trouveraient quel est le répertoire de données de ces instances. Actuellement, ces commandes analysent les fichiers de configuration. Ils le font pour le répertoire de données mais également pour d'autres bits de données tels que le numéro de port ou les répertoires de socket de domaine Unix. Cette partie est fournie par le paquet postgresql-common , qui est assez indépendant de systemd (et est antérieur à son adoption).

1
Daniel Vérité