Il server Postgresql non si avvia. Il servizio PostgreSql non si avvia

pg_ctl init [ -s ] [ -D datadir] [-o opzioni initdb ]

pg_ctl inizio [ -w ] [ -t secondi] [ -s ] [ -D datadir] [-l nome del file] [-o parametri] [ -P sentiero] [ -C ]

pg_ctl stop [ -W ] [ -t secondi] [ -s ] [ -D datadir] [ -ms | f | io]

pg_ctl riavvio [ -w ] [ -t secondi] [ -s ] [ -D datadir] [ -c ] [ -ms | f | io] [-o parametri ]

pg_ctl ricarica [ -s ] [ -D datadir ]

stato pg_ctl [ -D datadir ]

pg_ctl promo [ -s ] [ -D datadir ]

pg_ctl uccidi nome_segnale processo_id

pg_ctl registro [ -N nomeservizio] [ -U nome utente] [ -P password] [ -D datadir] [ -S a | d] [-w] [-t secondi] [ -COSÌ parametri ]

pg_ctl annulla registrazione [ -N nomeservizio ]

Il server si avvia in modalità di avvio. Il processo viene eseguito in background e l'input standard è associato a /dev/null (o nul su Windows). Per impostazione predefinita, su sistemi simili a Unix, l'output del server e gli errori vengono scritti sul dispositivo di output standard (non errore) pg_ctl. L'output di pg_ctl dovrebbe essere reindirizzato a un file o processo, come l'applicazione di rotazione dei log rotatelogs ; in caso contrario, postgres scriverà l'output sul terminale di controllo (in background) e rimarrà nel gruppo di processi della shell. Su Windows, l'output e gli errori del server vengono reindirizzati al terminale per impostazione predefinita. Puoi modificare questo comportamento e indirizzare l'output del server su un file aggiungendo l'opzione -l. Ti consigliamo di utilizzare l'opzione -l o di reindirizzare l'output.

Per arrestare il server, utilizzare stop . Puoi fermarti in tre modalità, specificate dal flag -m. La modalità predefinita è "Smart", che attende il completamento di tutte le connessioni client attive e dei processi di backup remoto. Se il server è in esecuzione in modalità hot standby, il ripristino e la replica dello streaming verranno interrotti non appena tutte le sessioni client saranno completate. La modalità "Veloce" non attende la chiusura delle sessioni client e interrompe i processi di backup remoto. Viene eseguito il rollback di tutte le transazioni attive e i client vengono costretti a disconnettersi, dopodiché il server si arresta. La modalità "Immediata" interrompe immediatamente tutti i processi e arresta il server, il che comporta la necessità di ripristinare dopo un errore al successivo avvio.

Per arrestare e quindi riavviare il server, viene utilizzato il riavvio. In questo caso sono disponibili i flag del comando postgres. il riavvio potrebbe non funzionare se sulla riga di comando all'avvio del server è stato specificato un percorso relativo alla directory di archiviazione dei dati.

Per rileggere la configurazione (postgresql.conf, pg_hba.conf, ecc.), viene utilizzato il reload e il processo postgres riceve il segnale del sistema SIGHUP. Ciò consente di applicare le modifiche senza riavviare completamente il server.

Per verificare lo stato del cluster, viene utilizzato status. Se il cluster è in esecuzione, verrà visualizzato il PID del processo, nonché un comando con gli argomenti utilizzati all'avvio. Se il cluster viene arrestato, il processo restituirà lo stato di uscita 3. Se la directory di archiviazione dei dati non è specificata, il processo restituirà lo stato di uscita 4.

Per passare il server di standby alla modalità primaria, utilizzare promove. In questo caso, il server smette di funzionare in modalità di ripristino e inizia a funzionare in modalità di lettura-scrittura.

Per inviare un segnale a un processo, viene utilizzato kill. Ciò è particolarmente utile in un ambiente Microsoft Windows che non dispone di un comando kill nello snap-in. Per un elenco dei segnali disponibili, vedere --help .

Per registrarsi come servizio di sistema in Microsoft Windows, viene utilizzato il registro. Il flag -S imposta la modalità di avvio del servizio, "auto" (all'avvio del sistema operativo) o "demand" (su richiesta).

Per rimuovere un servizio registrato in Microsoft Windows, viene utilizzato l'annullamento della registrazione.

Opzioni

C
--core-file

Sulle piattaforme in cui ciò è supportato, il server tenterà di acquisire istantanee della memoria in caso di arresti anomali. Ciò consente di diagnosticare e prevenire potenziali problemi in futuro. -D datadir
--pgdata datadir

Specifica il percorso dei file di configurazione del cluster. Se non specificato, viene utilizzato il valore della variabile d'ambiente PGDATA. -l nome del file
--tronco d'albero nome del file

Invia i dati di registro a nomefile. Il file viene creato se non esiste già. In questo caso, umask è impostato su 077, che impedisce ad altri utenti di accedere a questo file. -M modalità
--modalità modalità

Imposta la modalità di arresto del cluster. modalità accetta i valori smart, fast o immediate oppure la prima lettera di ogni valore disponibile, come s. Se il flag viene omesso, viene utilizzato smart. -o parametri

Specifica i flag che verranno passati a postgres.

Il valore deve essere racchiuso tra single o virgolette doppie per garantire l’integrità del gruppo. -o opzioni initdb

Specifica i flag che verranno passati a initdb.

Il valore deve essere racchiuso tra virgolette singole o doppie per garantire l'integrità del gruppo. -P sentiero

Specifica il percorso dell'applicazione postgres. Per impostazione predefinita, viene utilizzato lo stesso percorso in cui si trova pg_ctl oppure, se fallisce, viene utilizzato il percorso di installazione. Molto spesso non è necessario utilizzare questo parametro, tranne che in situazioni non standard.

init accetta parametri simili a initdb . -S
--silenzioso

Visualizza solo gli errori, senza messaggi informativi. -T
--tempo scaduto

Il tempo massimo (in secondi) di attesa per l'avvio o l'arresto del server. Il valore predefinito è 60 secondi. -V
--versione

Stampa la versione di pg_ctl e interrompe l'esecuzione. -w

Attende il completamento dell'avvio o dello spegnimento. Questa è la modalità predefinita per le operazioni di arresto ma non di avvio. Durante la fase di avvio, pg_ctl tenta continuamente di connettersi al server. Durante la fase di stop pg_ctl verifica la presenza di un file PID. Questo parametro consente di impostare l'immissione di una parola di controllo per SSL all'avvio del server. pg_ctl restituisce un codice di uscita in base al risultato delle operazioni di avvio o arresto. -W

Ignora l'attesa dell'avvio o dell'arresto del server. Questo comportamento è l'impostazione predefinita per le modalità di avvio e riavvio. -?
--aiuto

Stampa l'aiuto per il comando pg_ctl e interrompe l'esecuzione.

Opzioni specifiche di Windows

N nomeservizio

Il nome del servizio di sistema da registrare. Viene utilizzato come valore di sistema e di visualizzazione. -P password

Password dell'utente che avvia il servizio. -S tipo di avvio

Tipo di avvio del servizio di sistema. Può assumere i valori: auto o demand oppure essere rappresentato dalla prima lettera del nome di ciascun valore specificato. L'impostazione predefinita è automatica. -U nome utente

Il nome utente con cui verrà avviato il servizio. Per gli utenti del dominio, è necessario utilizzare la notazione DOMINIO\nomeutente.

Sto provando a eseguire Postgres 9.2.4 come servizio su Windows 7. Dopo aver installato Postgres il servizio funziona correttamente. Tuttavia, dopo aver installato Postgres come server per un altro programma, il servizio ha smesso di funzionare. Quando provo ad avviare il servizio ora ricevo un messaggio che:

"Servizio postgresql-x64-9.2 - PostgreSQL Server 9.2 sul computer locale Il computer si è avviato e poi si è arrestato. Alcuni servizi si arrestano automaticamente se non sono utilizzati da altri servizi o programmi."

Quando provo a eseguire un programma che dovrebbe utilizzare un server di database, ottengo questo errore:

"Si è verificato un problema durante il tentativo di accesso o di creazione di un database di produzione. Dettagli: impossibile connettersi al server; potrebbe non essere stato in grado di connettersi al connettore remoto. L'applicazione ora dovrebbe chiudersi"

Ho riscontrato anche questo errore una volta durante l'apertura dello stesso programma:

"Si è verificato un problema durante il tentativo di accesso o di creazione di un database di produzione. Dettagli: FATAL: impossibile caricare pg_hba.conf. L'applicazione ora dovrebbe chiudersi."

Ho provato ad avviare un servizio registrato come sistema locale account così come il mio account (nelle proprietà delle proprietà Postgres) senza alcun risultato. Ho anche provato a riavviare il computer. Dopo molti problemi su Internet, ho imparato che è bene controllare il file pg_log. Ecco il contenuto dell'ultima voce pg_log:

29-05-2013 14:59:45 LOG MDT: il sistema di database è stato interrotto; l'ultima volta è stata conosciuta il 29-05-2013 14:58:01 MDT 29-05-2013 14:59:45 MDT LOG: il sistema di database non è stato chiuso correttamente; ripristino automatico in corso 29-05-2013 14:59:45 LOG MDT: registrazione con lunghezza zero a 0/175BB98 29-05-2013 14:59:45 LOG MDT: la ripetizione non è richiesta 29-05-2013 14:59 :45 LOG MDT: il sistema di database è pronto per accettare connessioni 29-05-2013 14:59:45 LOG MDT: avvio automatico dell'aspirapolvere avviato 29-05-2013 15:07:00 LOG MDT: le connessioni locali non sono supportate da questa build 2013 -05-29 15:07:00 MDT CONTEXT: riga 1 del file di configurazione "C:/PostgreSQL/data/pg_hba.conf" 2013-05-29 15:07:00 MDT FATAL: impossibile caricare pg_hba.conf 2013- 29-05-15:07:00 LOG MDT: le connessioni locali non sono supportate da questa build 29-05-2013 15:07:00 CONTESTO MDT: riga 1 del file di configurazione "C:/PostgreSQL/data/pg_hba.conf" 2013 -29-05-15:07:00 MDT FATAL: impossibile caricare pg_hba.conf 29-05-2013 15:09:03 LOG MDT: ricevuta richiesta di arresto rapido 29-05-2013 15:09:03 LOG MDT: interruzione qualsiasi transazioni attive 29-05-2013 15:09:03 LOG MDT: arresto del launcher autovacuum 29-05-2013 15:09:03 LOG MDT: arresto 29-05-2013 15:09:03 LOG MDT: il sistema di database è fermare

Sembra che ci siano problemi con il file pg_hba.conf, che assomiglia a questo:

Locale tutti tutti attendibilità host tutti tutti 127.0.0.1 255.255.255.255 attendibilità host tutti tutti 0.0.0.0 0.0.0.0 attendibilità

Seguendo i numerosi suggerimenti su Internet, ho provato a modificare la riga superiore in diverse alternative (tutti gli host tutti trust/host tutti 127.0.0.1/32 trust/host tutti 192.168.0.100/24 ​​trust, ecc.). Questo aveva senso per me poiché il file di registro diceva che le connessioni locali non sono supportate da Postgres e puntava anche a questa riga. Tuttavia, nessuna delle mie modifiche ha avuto alcun effetto. Ho provato a riavviare il computer dopo ogni modifica, ma non è cambiato nulla.

Quando ho cercato esempi di come appare tipicamente un file pg_hba.conf, gli esempi sembravano leggermente diversi dal mio file. Ho notato che nel file del programma PostgreSQL, oltre a pg_hba.conf, c'era anche un file 20130529-150444-old-pg_hba.conf, che assomigliava molto di più agli esempi che ho trovato online. Questo file ha diverse righe di commenti prima di queste ultime righe:

# TIPO DATABASE INDIRIZZO UTENTE METODO # Connessioni locali IPv4: ospita tutti tutti 127.0.0.1/32 md5 # Connessioni locali IPv6: ospita tutti tutti::1/128 md5 # Consenti connessioni di replica da localhost, da parte di un utente con il # privilegio di replica. #postgres replica host 127.0.0.1/32 md5 #postgres replica host::1/128 md5

Speravo che questo fosse il file pg_hba.conf originale e, se avessi sostituito il nuovo file con il contenuto di quello vecchio, postgres avrebbe ripreso a funzionare. Non esiste una tale fortuna. Speravo che più file di errore venissero registrati nel file pg_log per vedere se l'errore riportato in precedenza fosse scomparso o se qualcosa fosse cambiato, ma non venivano registrati più file.

Ho cercato un servizio online per giorni e non ho trovato nulla che funzionasse. Mi dispiace per questo domanda lunga, ma volevo essere approfondito e includere tutte le informazioni pertinenti. Apprezzerei se qualcuno potesse far luce su questo problema o offrire suggerimenti.

Questo messaggio è destinato principalmente a me personalmente e al nostro team di supporto, perché... un problema simile a quello descritto di seguito si verifica con una frequenza invidiabile ed è necessario ricordare i passaggi fondamentali per risolverlo.

Quindi, la storia inizia con il fatto che il 30 dicembre alle 11-30 ho ricevuto una chiamata con il messaggio che uno dei nostri clienti non avvia il nostro sistema perché non riesce a connettersi al database (usiamo PostgreSql versione 8.1 come DBMS) . Le persone lo spiegano dicendo che un'ora fa le luci si sono spente e il computer si è spento in modo errato e, dopo averlo acceso, tutto ha smesso di funzionare :)

I buoni utenti del nostro sistema sanno dove si trova il pulsante di avvio e sanno che non ci sono due orologi nel sistema, "uno con i numeri e l'altro con la sabbia". Pertanto l'unica cosa che ho potuto fare telefonicamente è stata provare ad avviare manualmente il servizio DBMS, ma il risultato è stato che il servizio non si avviava. Ho dovuto inoltrare Internet a quel computer (sui computer su cui è installato il nostro sistema Internet non dovrebbe esserci) per potermi connettere in remoto.

Dopo la connessione a computer remoto Ho provato ad avviare il servizio e ho ricevuto il seguente messaggio: "Il servizio PostgreSql Database Server 8.1" su "Computer locale" è stato avviato e quindi interrotto. Alcuni servizi si interrompono automaticamente se non hanno nulla da fare, come il servizio Registri delle prestazioni e Avvisi. Hmm...

Il problema è che in quel momento questa era l'unica informazione disponibile... I log di PostgreSql sono vuoti, non ci sono voci al loro interno e anche i log di sistema sono vuoti.

Il debug dei servizi non è un processo semplice, quindi molti sviluppatori forniscono meccanismi per avviare un'applicazione di servizio come una normale applicazione console utilizzando le chiavi riga di comando. E PostgreSql non fa eccezione a questo riguardo; per eseguirlo è necessario utilizzare il seguente comando (Suggerimento: questo comando può essere eseguito solo da un utente non amministrativo del sistema, tuttavia, se te ne dimentichi, PostgreSql te lo ricorderà molto rapidamente):

postgres -D " "

Lo eseguiamo e guardiamo il messaggio di errore. Nel mio caso, il messaggio suonava più o meno così:

FATAL - dati fasulli nel file di blocco "postmaster.pid"

Certo, sono stato fortunato, il problema si è rivelato risolvibile. Per qualche motivo file specificato si è rivelato vuoto e ho dovuto copiarne il contenuto da un'istanza funzionante del DBMS, il che non è stato difficile.

La morale di questo messaggio è che se il database ha fallito, o si sono verificati altri problemi con il sistema, prima di reinstallare il DBMS (o l'intero sistema) e perdere tutti i dati, dovresti almeno provare a scoprire cosa sta succedendo Il problema è che forse ci sono tutte le possibilità che sarai in grado di ripristinare le tue prestazioni che non sono le stesse in modi radicali.

ZY Buon anno nuovo a tutti e auguro che i vostri sistemi siano stabili e affidabili e non vi rovinino il sonno, ma anche se si sono verificati dei problemi, avete sempre avuto delle opzioni pronte per affrontare questa situazione.

Questo messaggio è destinato principalmente a me personalmente e al nostro team di supporto, perché... un problema simile a quello descritto di seguito si verifica con una frequenza invidiabile ed è necessario ricordare i passaggi fondamentali per risolverlo.

Quindi, la storia inizia con il fatto che il 30 dicembre alle 11-30 ho ricevuto una chiamata con il messaggio che uno dei nostri clienti non avvia il nostro sistema perché non riesce a connettersi al database (usiamo PostgreSql versione 8.1 come DBMS) . Le persone lo spiegano dicendo che un'ora fa le luci si sono spente e il computer si è spento in modo errato e, dopo averlo acceso, tutto ha smesso di funzionare :)

I buoni utenti del nostro sistema sanno dove si trova il pulsante di avvio e sanno che non ci sono due orologi nel sistema, "uno con i numeri e l'altro con la sabbia". Pertanto l'unica cosa che ho potuto fare telefonicamente è stata provare ad avviare manualmente il servizio DBMS, ma il risultato è stato che il servizio non si avviava. Ho dovuto inoltrare Internet a quel computer (sui computer su cui è installato il nostro sistema Internet non dovrebbe esserci) per potermi connettere in remoto.

Dopo essermi connesso al computer remoto, ho provato ad avviare il servizio e ho ricevuto il seguente messaggio: "Il servizio PostgreSql Database Server 8.1" su "Computer locale" è stato avviato e quindi interrotto. Alcuni servizi si interrompono automaticamente se non hanno nulla da fare, come il servizio Registri delle prestazioni e Avvisi. Hmm...

Il problema è che in quel momento questa era l'unica informazione disponibile... I log di PostgreSql sono vuoti, non ci sono voci al loro interno e anche i log di sistema sono vuoti.

Il debug dei servizi non è un processo semplice, quindi molti sviluppatori forniscono meccanismi per avviare un'applicazione di servizio come una normale applicazione console utilizzando le opzioni della riga di comando. E PostgreSql non fa eccezione a questo riguardo; per eseguirlo è necessario utilizzare il seguente comando (Suggerimento: questo comando può essere eseguito solo da un utente non amministrativo del sistema, tuttavia, se te ne dimentichi, PostgreSql te lo ricorderà molto rapidamente):

postgres -D " "

Lo eseguiamo e guardiamo il messaggio di errore. Nel mio caso, il messaggio suonava più o meno così:

FATAL - dati fasulli nel file di blocco "postmaster.pid"

Certo, sono stato fortunato, il problema si è rivelato risolvibile. Per qualche motivo, il file specificato si è rivelato vuoto e avevo bisogno di copiarne il contenuto da un'istanza funzionante del DBMS, il che non è stato difficile.

La morale di questo messaggio è che se il database ha fallito, o si sono verificati altri problemi con il sistema, prima di reinstallare il DBMS (o l'intero sistema) e perdere tutti i dati, dovresti almeno provare a scoprire cosa sta succedendo il problema è che forse ci sono tutte le possibilità che tu possa ripristinare la tua funzionalità in modi meno radicali.

ZY Buon anno nuovo a tutti e auguro che i vostri sistemi siano stabili e affidabili e non vi rovinino il sonno, ma anche se si sono verificati dei problemi, avete sempre avuto delle opzioni pronte per affrontare questa situazione.