J'essaie de configurer le serveur Postgresql 9.3 sur Centos 7 (installation via yum) dans un répertoire personnalisé, qui dans mon cas est une partition chiffrée (/ custom_container/database) montée au démarrage. Pour une certaine raison, Postgresql ne se comporte pas comme il se doit dans le manuel et commet une erreur au démarrage du service.
Remarque: Il ne veut pas accepter la variable d’environnement PGDATA que j’ai définie et
su - postgres -c '/usr/pgsql-9.3/bin/initdb'
(étant donné que le répertoire PGDATA appartient à postgres: postgres), le cluster est initialisé dans le répertoire par défaut /var/lib/pgsql/9.3/data/.La seule façon de changer qui utilise
su - postgres -c '/usr/pgsql-9.3/bin/initdb --pgdata=$PGDATA'
Ce qui initialise le répertoire dans le conteneur personnalisé que j'utilise. C'est quelque chose que je ne pouvais pas comprendre, car la documentation dit que la variable PGDATA est prise par défaut.
Problème: lors de l'exécution
service postgresql-9.3 start
Je reçois une erreur avec le journal
postgresql-9.3.service - PostgreSQL 9.3 database server
Loaded: loaded (/usr/lib/systemd/system/postgresql-9.3.service; disabled)
Active: failed (Result: exit-code) since Mon 2014-11-10 15:24:15 CET; 1s ago
Process: 2785 ExecStartPre=/usr/pgsql-9.3/bin/postgresql93-check-db-dir ${PGDATA} (code=exited, status=1/FAILURE)
Nov 10 15:24:15 CentOS-70-64-minimal systemd[1]: Starting PostgreSQL 9.3 database server...
Nov 10 15:24:15 CentOS-70-64-minimal postgresql93-check-db-dir[2785]: "/var/lib/pgsql/9.3/data/" is missing or empty.
Nov 10 15:24:15 CentOS-70-64-minimal postgresql93-check-db-dir[2785]: Use "/usr/pgsql-9.3/bin/postgresql93-setup initdb" to initialize t...ster.
Nov 10 15:24:15 CentOS-70-64-minimal postgresql93-check-db-dir[2785]: See %{_pkgdocdir}/README.rpm-dist for more information.
Nov 10 15:24:15 CentOS-70-64-minimal systemd[1]: postgresql-9.3.service: control process exited, code=exited status=1
Nov 10 15:24:15 CentOS-70-64-minimal systemd[1]: Failed to start PostgreSQL 9.3 database server.
Nov 10 15:24:15 CentOS-70-64-minimal systemd[1]: Unit postgresql-9.3.service entered failed state.
Cela signifie que Postgresql, même si le cluster est initialisé dans le nouveau répertoire $ PGDATA (/ custom_container/database), recherche toujours le cluster dans /var/lib/pgsql/9.3/data/
Est-ce que quelqu'un a déjà eu ce comportement postgresql auparavant? Est-il possible que j'ai oublié certaines options de configuration ou que le problème vienne de l'installation de Postgresql?
Merci d'avance!
Il semble que le vrai problème soit la définition des variables d’environnement, que j’ai eu à travailler dans le fil suivant: Variables d’environnement Centos 7 pour le service Postgres Il s’agit de la variable PGDATA définie dans le custom /etc/systemd/system/postgresql-9.3.service qui doit être créé à partir du contenu de /usr/lib/systemd/system/postgresql-9.3.service qui utilise la var par défaut de PGDATA.
essaye ça:
## Login with postgres user
su - postgres
export PGDATA=/your_path/data
pg_ctl -D $PGDATA start &
Je pense que la façon la plus "CentOS 7" de le faire est de copier le fichier de service:
Sudo cp /usr/lib/systemd/system/postgresql-9.6.service /etc/systemd/system/postgresql-9.6.service
Puis éditez le fichier /etc/systemd/system/postgresql-9.6.service :
# Location of database directory
Environment=PGDATA=/mnt/volume/var/lib/pgsql/9.6/data/
Puis lancez-le Sudo systemctl start postgresql-9.6
et vérifiez:
# Sudo ps -ax | grep postmaster
32100 ? Ss 0:00 /usr/pgsql-9.6/bin/postmaster -D /mnt/volume/var/lib/pgsql/9.6/data/
Vous devez créer un fichier postgresql.service
personnalisé dans /etc/systemd/system/
, qui remplace la variable d'environnement par défaut PGDATA
. Votre fichier de service personnalisé peut .include
le fichier de service postgresql par défaut. Il vous suffit donc d'ajouter ce que vous souhaitez modifier. De cette façon, les mises à niveau peuvent toujours modifier/améliorer? éléments dans le fichier de service par défaut, pendant que votre modification est préservée.
Voici comment je viens de le faire dans Centos 7:
cat <<END >/etc/systemd/system/postgresql.service
.include /lib/systemd/system/postgresql.service
[Service]
Environment=PGDATA=/mnt/postgres/data ## <== SET THIS TO YOUR WANTED $PGDATA
END
systemctl daemon-reload
systemctl restart postgresql.service
Vérifier :
ps -ax | grep [p]ostgres
Mettre à jour:
Plutôt que de créer manuellement le fichier et d'ajouter la ligne .include, vous pouvez également utiliser la méthode intégrée de systemd:
systemctl edit postgresql.service
Ceci ouvrira votre éditeur par défaut et sauvegardera vos modifications dans /etc/systemd/system/postgresql.service.d/override.conf
Essayez d’éditer le fichier /etc/init.d/postgresql-9.3:PGDATA=/votre/custom/path