Perché PostgreSQL 9.3 non si avvia su Ubuntu?


13

Ho installato correttamente PostgreSQL 9.3 dal repository APT su 2 VM che eseguono Ubuntu 12.04 e 13.04 ... tuttavia, non riesco a farlo installare correttamente sul mio computer host che esegue Ubuntu 12.04.

L'installazione (questa volta) sembra essere andata bene, ma forse c'è un errore che non capisco:

* No PostgreSQL clusters exist; see "man pg_createcluster"
Setting up postgresql-9.3 (9.3.0-2.pgdg12.4+1) ...
Creating new cluster 9.3/main ...
  config /etc/postgresql/9.3/main
  data   /var/lib/postgresql/9.3/main
  locale en_US.UTF-8
  port   5432
update-alternatives: using /usr/share/postgresql/9.3/man/man1/postmaster.1.gz to provide /usr/share/man/man1/postmaster.1.gz (postmaster.1.gz) in auto mode.

Quindi provo ad aggiungermi come utente PostgreSQL, ma ottengo questo:

createuser: could not connect to database postgres: could not connect to server: No such file or directory
    Is the server running locally and accepting
    connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?

Non riesco a vedere PostgreSQL in esecuzione nel monitor di sistema e non esiste alcun file nella cartella / var / run / postgresql / ... completamente vuoto.

EDIT: sulle macchine virtuali, c'è un file in / var / run / postgresql / chiamato 9.3-main.pid

Non c'è nulla nel file di registro della macchina host che si trova / var / log / postgresql

Quindi ... cosa sta succedendo qui che non succede nella mia VM? Come ho detto, le altre installazioni sulle macchine virtuali, tra cui PostGIS e PGAdmin, sono state perfette ... non ho idea del perché questa macchina host non stia attraversando ...


Hai davvero una /var/run/postgresqldirectory? Ad un certo punto, dopo una corretta installazione, quella cartella mancava sul mio computer. Cosa dice la configurazione su quale directory dovrebbe usare?
Colin 't Hart,

@ Colin'tHart Ho quella directory ... tuttavia non c'è nulla in essa ... nelle VM, c'è un file creato chiamato 9.3-main.pid Dove troverei le informazioni di configurazione?
DPSSpatial

postgresql.confnella directory di configurazione, che secondo quanto sopra, è /etc/postgresql/9.3/main. Dovresti anche cercare nei file di registro, probabilmente in /var/log/postgresql.
Colin 't Hart,

@ Colin'tHart Il file di registro è vuoto ... Il file di configurazione - e penso che questo sia ciò che stai cercando - dice # Se external_pid_file non è impostato in modo esplicito, non viene scritto alcun file PID aggiuntivo. external_pid_file = '
/var/run/postgresql/9.3-main.pid

Esiste un file socket in quella directory o è davvero completamente vuoto?
Colin 't Hart,

Risposte:


16

Le mie impostazioni locali non sono state configurate correttamente quando è stato installato PostgreSQL. L'eliminazione e la reinstallazione non sono state di aiuto. Ho seguito le istruzioni qui e questo ha fatto il trucco per me.

Parti essenziali delle informazioni collegate riprodotte di seguito:

Il problema si è manifestato nel modo seguente:

warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
...
are supported and installed on your system.

Il primo è stato molto facile da risolvere eseguendo:

#dpkg-reconfigure locales

... e scegliendo i locali preferiti.

Ma dopo ciò PostgreSQL ha ancora rifiutato di iniziare. Ciò è dovuto al fatto che il processo di installazione ha tentato di creare un cluster al momento dell'installazione, ma a causa delle localizzazioni errate ciò non è stato fatto. Quindi dobbiamo ripetere questo passaggio eseguendo:

#pg_createcluster 9.3 main --start

(Per la versione 9.3 di PostgreSQL)

Dopo questo passaggio PostgreSQL si avvia in modo impeccabile tramite

#/etc/init.d/postgresql start

2
Salvato la mia vita. È davvero schifoso che lo spurgo e la reinstallazione non siano d'aiuto anche quando le impostazioni internazionali vengono corrette. Questo ha sprecato 2 ore della mia vita :(
Escher,

Nel caso in cui pg_createclustersi dice che il cluster già esistente è necessario farlo cadere prima (questo cancellerà tutti i dati in esso, in modo da assicurarsi di avere una copia di backup): pg_dropcluster 9.3 main.
Florian Brucker,

6

Spero che tu abbia già risolto questo problema, ma sto riscontrando un problema simile che sembra avere una fonte diversa e forse la mia esperienza mi aiuterà se hai ancora problemi.

Il mio problema con 9.3 su Ubuntu riguarda il dir socket che è un dir transitorio in / run. Fondamentalmente, lo script init.d dovrebbe occuparsi della creazione della directory socket in / run / postgresql se non esiste durante l'azione di avvio. Questo sarà sempre lo stato delle cose dopo un riavvio.

Il problema è, tuttavia, che lo script init.d verrà chiuso prima di eseguire l'azione di avvio se la directory socket non esiste. Questo perché la chiamata a pg_lsclusters avrà esito negativo senza la directory socket, che a sua volta impedisce all'azione di avvio di creare mai la directory socket.

Non ho capito quale sia la soluzione migliore, ma se trasferisco la logica per la creazione della directory socket dall'azione di avvio a prima della chiamata a pg_lsclusters, sono in grado di avviare il server dopo il riavvio senza problemi.

Ecco la parte dell'azione iniziale che gestisce la creazione della directory socket:

# create socket directory
if [ -d /var/run/postgresql ]; then
  chmod 2775 /var/run/postgresql
else
  install -d -m 2775 -o postgres -g postgres /var/run/postgresql
  [ -x /sbin/restorecon ] && restorecon -R /var/run/postgresql || true
fi

Pubblicherò un aggiornamento se la causa principale di questo diventa chiara per me, perché questo chiaramente non può essere il comportamento previsto.

APPENDICE:

Penso che il motivo per cui stavo incontrando questo problema è perché non avevo un buon valore configurato per unix_socket_directories . In 9.2 questa opzione di configurazione era unix_socket_directory, che ho rimosso anziché passare a unix_socket_directories. Da quando ho impostato un valore per unix_socket_directories, non ho avuto problemi con l'avvio del server.


grazie @ tdg5 !!! Non l'ho risolto, ma penso che dipenda da diverse installazioni errate sul mio computer. L'installazione dal repository Apt di PostgreSQL su una nuova installazione di Ubuntu ha risolto i miei problemi ...
DPSSpatial

3
@mapBaker - Ho aggiornato la mia risposta per includere la causa principale del problema di avvio di PG 9.3 nella mia situazione particolare. Forse sarà utile anche per te.
tdg5,

1
Il mio PG9.3 non è stato avviato dopo il riavvio. L'aggiunta della riga "unix_socket_directories = '/ var / run / postgresql'" a postgresql.conf di 9.3 ha risolto il problema. Grazie
alfonx,

Grazie! Ci sto lavorando da un po ', felice di trovare questa pepita!
Serban Tanasa,

3

Ho avuto diversi problemi con il file socket, nel tuo caso /var/run/postgresql/.s.PGSQL.5432

assicurarsi che la directory / var / run / postgresql esista e sia scrivibile prima di avviare postgresql per maggiori informazioni, consultare questa discussione .

inoltre, durante la connessione utilizzare -h flag:

psql -h localhost 

e vedere se questo lo risolve.


1

Questo sembra risolvere il problema su Ubuntu:

Modifica postgresql.conf:

unix_socket_directories='/var/run/postgresql

Adesso fallo service postgresql start


1

Sono nuovo in PSQL ma ho risolto il problema modificando start.conf Avevo commentato l'impostazione "auto" per gestire manualmente il server, ma ha bisogno di un valore: auto, manuale o disabilitato.

EGD.


1

Da parte mia lo script di avvio non è corretto. I file di configurazione sono installati in /etc/postgresql/9.3/main ma lo script /usr/share/postgresql-common/init.d-functions sta cercando in

for c in /etc/postgresql/"$2"/*; do 

Sostituisci questa riga con

for c in /etc/postgresql/"$2"/main; do

-2

Tutti,

dopo alcuni scavi, ho trovato (a) la soluzione qui:

http://ubuntuforums.org/showthread.php?t=869080

Che conteneva queste istruzioni:

Esegui nel terminale:

sudo mkdir -p /usr/local/pgsql/data
sudo chown -R postgres:postgres /usr/local/pgsql/
sudo su - postgres
cd /usr/lib/postgresql/9.3/bin/
./initdb -D /usr/local/pgsql/data
./postgres -D /usr/local/pgsql/data

Ora il mio server è attivo e funzionante !!!

EDIT : dopo un riavvio, il server non è ancora in esecuzione ...

Sono apprezzati tutti i pensieri sul perché avessi bisogno di eseguirlo!


Sei sicuro che sia 9.3 in esecuzione? Il numero della versione sembra sospetto ...
dezso

@dezso scusa ho dimenticato di cambiare la versione # quando ho incollato in quei comandi ... questo è tutto su v9.3 ...
DPSSpatial

Potrebbe essere necessario specificare la porta. La porta predefinita è utilizzata dalla vecchia installazione di Postgres. La tua nuova installazione sta utilizzando la porta 5433 molto probabilmente, ma puoi verificarlo leggendo il file di configurazione postgresql:/etc/postgresql/9.3/main/postgresql.conf
user35581

1
Questa può essere una soluzione alternativa ma chiaramente non una buona soluzione. Questo tipo risolve il problema dba.stackexchange.com/a/91511/8099
sorin
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.