web-dev-qa-db-fra.com

Postgresql 9.3 sur Centos 7 avec PGDATA personnalisé

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!

8
Vitaly Stanchits

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.

5
Vitaly Stanchits

essaye ça:

 ## Login with postgres user
 su - postgres
 export PGDATA=/your_path/data
 pg_ctl -D $PGDATA start &
3
Bagus Trihatmaja

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/
3

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

3
mivk

Essayez d’éditer le fichier /etc/init.d/postgresql-9.3:PGDATA=/votre/custom/path

0
Oleksii Karpeliuk