2014-11-10 30 views
6

Sto cercando di configurare il server Postgresql 9.3 su Centos 7 (installazione via yum) all'interno di una directory personalizzata, che nel mio caso è una partizione crittografata (/ custom_taintainer/database) montata all'avvio. Per una certa ragione, Postgresql non si comporta come dovrebbe nel manuale e commette un errore all'avvio del servizio.Postgresql 9.3 su Centos 7 con PGDATA personalizzato

Nota: non vuole accettare la variabile d'ambiente PGDATA che ho impostato, e durante l'esecuzione

su - postgres -c '/usr/pgsql-9.3/bin/initdb' 

(dato che la directory PGDATA è di proprietà di postgres: Postgres) del cluster viene inizializzata all'interno della predefinita directory /var/lib/pgsql/9.3/data/ l'unico modo per cambiare la situazione sta usando

su - postgres -c '/usr/pgsql-9.3/bin/initdb --pgdata=$PGDATA' 

che inizializza la directory all'interno del contenitore personalizzato che sto usando. Questo è qualcosa che non riuscivo a capire, in quanto i documenti dicono che la variabile PGDATA viene presa in modo predefinito.

Problema: quando si esegue

service postgresql-9.3 start 

ottengo un errore con il registro

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. 

Il che significa che PostgreSQL, anche se il cluster viene inizializzata nella nuova directory $ PGDATA (/ custom_container/database) cerca ancora il cluster in /var/lib/pgsql/9.3/data/

Qualcuno ha provato questo comportamento Postgresql prima? Potrebbe essere che ho dimenticato alcune opzioni di configurazione o che il problema deriva dall'installazione di Postgresql?

Grazie in anticipo!

+0

provare 'echo $ PGDATA', è il risultato che visualizza il percorso corretto? –

+0

sì, mostra/custom_container/database –

+0

prova ad usare 'pg_ctl -D $ PGDATA start &' e vedere se funziona –

risposta

4

Sembra che il vero problema stava tramontando le variabili d'ambiente, che mi sono Lavorare nel thread: Centos 7 environment variables for Postgres service Il problema è la variabile PGDATA posto all'interno del custom/etc/systemd/system/postgresql-9.3.service che dovrebbe essere creato dal contenuto di /usr/lib/systemd/system/postgresql-9.3.service che utilizza la variabile predefinita PGDATA var.

+0

bello! e funziona anche con altre versioni! Mi chiedo se un metodo init alternativo possa essere usato per avviare un database, come con 'postgresql95-setup'. Non sei sicuro di come questi due metodi differiscano esattamente, ma oltre all'esecuzione di altre cose 'postgresql95-setup' esegue internamente 'initdb'. Non ho potuto comunque capire come alimentare l'opzione '-D', come:' usr/pgsql-9.5/bin/postgresql95-setup initdb -D 'genera errore:' systemctl: opzione non valida - 'D' ' – msciwoj

3

provare questo:

## Login with postgres user 
su - postgres 
export PGDATA=/your_path/data 
pg_ctl -D $PGDATA start & 
+0

OK, funziona dopo aver effettuato l'accesso e impostato manualmente la variabile. Ma dopo aver effettuato il login, il PGDATA viene resettato. C'è un modo per salvarlo in modo permanente? –

+0

inserisci il tuo profilo_bash_profile –

+0

Grazie, ora posso avviare manualmente postgres. Ma per qualche motivo il servizio postgresql-9.3 inizia ancora a cercare la directory predefinita e fa lo stesso errore di prima. C'è qualcosa che deve essere impostato in particolare affinché Postgres possa funzionare come un servizio? –

0

tenta di modificare il file /etc/init.d/postgresql-9.3: PGDATA =/vostro/custom/percorso

1

penso che il più "CentOS 7 modo" per farlo è quello di copiare il file di servizio :

sudo cp /usr/lib/systemd/system/postgresql-9.6.service /etc/systemd/system/postgresql-9.6.service 

quindi modificare il file /etc/systemd/system/postgresql-9.6.service:

# Location of database directory 
Environment=PGDATA=/mnt/volume/var/lib/pgsql/9.6/data/ 

Poi avviarlo sudo systemctl start postgresql-9.6 e ve rify:

# sudo ps -ax | grep postmaster 
0 ?  Ss  0:00 /usr/pgsql-9.6/bin/postmaster -D /mnt/volume/var/lib/pgsql/9.6/data/ 
Problemi correlati