Postgresql-serveren starter ikke. PostgreSql-tjenesten starter ikke

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

pg_ctl start [ -w] [ -t sekunder] [ -s ] [ -D datadir] [ -l filnavn] [ -o parametere] [ -s sti] [ -c ]

pg_ctl stopp [ -W] [ -t sekunder] [ -s ] [ -D datadir] [ -m s | f | jeg]

pg_ctl restart [ -w] [ -t sekunder] [ -s ] [ -D datadir] [ -c ] [ -m s | f | i ] [ -o parametere ]

pg_ctl last inn [ -s ] [ -D datadir ]

pg_ctl status [ -D datadir ]

pg_ctl promoter [ -s ] [ -D datadir ]

pg_ctl drepe signal_name prosess-id

pg_ctl register [ -N tjenestenavn] [ -U brukernavn] [ -P passord] [ -D datadir] [ -S a | d ] [ -w ] [ -t sekunder] [ -s ] [ -o parametere ]

pg_ctl avregistrer [ -N tjenestenavn ]

Serveren starter i startmodus. Prosessen kjører i bakgrunnen og standardinndata er assosiert med /dev/null (eller nul på Windows). Som standard, på Unix-lignende systemer, skrives serverutdata og feil til standardutdataenheten (ikke feil) pg_ctl. Utdataene fra pg_ctl bør omdirigeres til en fil eller prosess, for eksempel loggrotasjonsapplikasjonen rotatelogs ; ellers vil postgres skrive utdata til kontrollterminalen (i bakgrunnen) og forbli i skallprosessgruppen. På Windows blir serverutdata og feil omdirigert til terminalen som standard. Du kan endre denne virkemåten og dirigere serverutgangen til en fil ved å legge til -l-bryteren. Vi anbefaler å bruke -l-bryteren eller omdirigere utgangen.

For å stoppe serveren, bruk stop . Du kan stoppe i tre moduser, spesifisert av -m-flagget. Standardmodusen er "Smart", som venter på at alle aktive klienttilkoblinger og eksterne sikkerhetskopieringsprosesser er fullført. Hvis serveren kjører i varm standby-modus, vil gjenoppretting og streaming-replikering stoppe så snart alle klientøkter er fullført. "Rask"-modus venter ikke på at klientøktene lukkes og avbryter eksterne sikkerhetskopieringsprosesser. Alle aktive transaksjoner rulles tilbake og klienter tvinges til å koble fra, hvoretter serveren stopper. "Umiddelbar"-modus avbryter umiddelbart alle prosesser og stopper serveren, noe som fører til behovet for å gjenopprette etter en feil ved neste start.

For å stoppe og deretter starte serveren, brukes omstart. I dette tilfellet er flaggene til postgres-kommandoen tilgjengelige. omstart vil kanskje ikke fungere hvis en relativ bane til datalagringskatalogen ble spesifisert på kommandolinjen ved oppstart av serveren.

For å lese konfigurasjonen på nytt (postgresql.conf, pg_hba.conf, etc.), brukes reload, og postgres-prosessen mottar SIGHUP-systemsignalet. Dette lar deg bruke endringer uten å starte serveren helt på nytt.

For å sjekke statusen til klyngen brukes status. Hvis klyngen kjører, vil PID for prosessen vises, samt en kommando med argumentene som ble brukt ved oppstart. Hvis klyngen stoppes, vil prosessen returnere utgangsstatus 3. Hvis datalagringskatalogen ikke er spesifisert, vil prosessen returnere utgangsstatus 4.

For å bytte standby-serveren til primærmodus, bruk promotering . I dette tilfellet slutter serveren å fungere i gjenopprettingsmodus og begynner å fungere i lese-skrivemodus.

For å sende et signal til en prosess, brukes kill. Dette er spesielt nyttig i et Microsoft Windows-miljø som ikke har en kill-kommando i snapin-modulen. For en liste over tilgjengelige signaler, se --help.

For å registrere seg som systemtjeneste under Microsoft Windows brukes register. -S-flagget setter tjenestens oppstartsmodus, enten "auto" (ved OS-oppstart) eller "demand" (på forespørsel).

For å fjerne en registrert tjeneste i Microsoft Windows, brukes avregistrering.

Alternativer

C
--kjernefil

På plattformer der dette støttes, vil serveren forsøke å fange minneøyeblikksbilder når det er krasj. Dette gjør det mulig å diagnostisere og forebygge potensielle problemer i fremtiden. -D datadir
--pgdata datadir

Angir plasseringen av klyngekonfigurasjonsfilene. Hvis det ikke er spesifisert, brukes verdien til PGDATA-miljøvariabelen. -l filnavn
--logg filnavn

Sender ut loggdata til filnavn. Filen opprettes hvis den ikke allerede eksisterer. I dette tilfellet er umask satt til 077, som hindrer andre brukere fra å få tilgang til denne filen. -m modus
--modus modus

Stiller inn klyngestoppmodus. modus tar verdiene smart , fast , eller immediate , eller den første bokstaven i hver tilgjengelig verdi, for eksempel s . Hvis flagget er utelatt, brukes smart. -o parametere

Spesifiserer flaggene som skal sendes til postgres.

Verdien må være innrammet med enkelt eller doble anførselstegn for å sikre integriteten til gruppen. -o initdb-alternativer

Spesifiserer flaggene som skal sendes til initdb.

Verdien må være omgitt av enkle eller doble anførselstegn for å sikre gruppens integritet. -s sti

Angir plasseringen av postgres-applikasjonen. Som standard brukes den samme banen der pg_ctl er plassert, eller hvis dette mislykkes, blir installasjonsbanen tatt. Oftest er det ikke nødvendig å bruke denne parameteren, bortsett fra i ikke-standardiserte situasjoner.

init aksepterer parametere som ligner på initdb. -s
--stille

Vis kun feil, uten informasjonsmeldinger. -t
--timeout

Maksimal tid (i sekunder) for å vente på at serveren starter eller stopper. Standard er 60 sekunder. -V
--versjon

Skriver ut versjonen av pg_ctl og avbryter kjøringen. -w

Venter på oppstart eller avslutning for å fullføre. Dette er standardmodus for stopp, men ikke start. Under oppstartsfasen prøver pg_ctl kontinuerlig å koble til serveren. Under stoppfasen sjekker pg_ctl for tilstedeværelsen av en PID-fil. Denne parameteren lar deg angi inngangen til et kontrollord for SSL ved serveroppstart. pg_ctl returnerer en utgangskode basert på resultatet av start- eller stoppoperasjonene. -W

Ignorer å vente på at serveren skal starte eller stoppe. Denne virkemåten er standard for oppstarts- og omstartmoduser. -?
--hjelp

Skriv ut hjelp for kommandoen pg_ctl og avbryt kjøringen.

Windows-spesifikke alternativer

N tjenestenavn

Navnet på systemtjenesten som skal registreres. Den brukes som system- og visningsverdi. -P passord

Passordet til brukeren som starter tjenesten. -S oppstartstype

Oppstartstype for systemtjeneste. Kan ta verdiene: auto , eller demand , eller representeres av den første bokstaven i navnet til hver gitt verdi. Standard er auto. -U brukernavn

Brukernavnet som tjenesten vil bli lansert under. For domenebrukere må du bruke notasjonen DOMAIN\brukernavn.

Jeg prøver å kjøre Postgres 9.2.4 som en tjeneste på Windows 7. Etter installasjon av postgres fungerer tjenesten fint. Etter å ha installert postgres som server for et annet program, sluttet imidlertid tjenesten å fungere. Når jeg prøver å starte tjenesten nå får jeg en melding som:

"Service postgresql-x64-9.2 - PostgreSQL Server 9.2 på lokal datamaskin Datamaskinen startet og stoppet deretter. Noen tjenester stopper automatisk hvis de ikke er i bruk av andre tjenester eller programmer."

Når jeg prøver å kjøre et program som skal bruke en databaseserver, får jeg denne feilmeldingen:

"Det oppsto et problem under forsøk på å logge på eller opprette en produksjonsdatabase. Detaljer: Kunne ikke koble til serveren; Kan ha ikke vært i stand til å koble til den eksterne koblingen. Programmet skal nå lukkes"

Jeg møtte også denne feilen en gang da jeg åpnet det samme programmet:

"Det oppstod et problem under forsøk på å logge på eller opprette en produksjonsdatabase. Detaljer: FATAL: Kunne ikke laste pg_hba.conf. Programmet skal nå lukkes."

Jeg prøvde å starte en tjeneste registrert som lokalt system konto samt min egen konto (i postgres egenskaper egenskaper) til ingen nytte. Jeg prøvde også å starte datamaskinen på nytt. Etter mange problemer på Internett, lærte jeg at det er greit å sjekke pg_log-filen. Her er innholdet i den siste pg_log-oppføringen:

2013-05-29 14:59:45 MDT LOGG: databasesystemet ble avbrutt; sist kjent 2013-05-29 14:58:01 MDT 2013-05-29 14:59:45 MDT LOGG: databasesystemet ble ikke riktig stengt; automatisk gjenoppretting pågår 2013-05-29 14:59:45 MDT LOGG: registrering med null lengde ved 0/175BB98 2013-05-29 14:59:45 MDT LOGG: gjøre om er ikke nødvendig 2013-05-29 14:59 :45 MDT LOGG: databasesystemet er klart til å akseptere tilkoblinger 2013-05-29 14:59:45 MDT LOGG: autovakuumstarter startet 2013-05-29 15:07:00 MDT LOGG: lokale tilkoblinger støttes ikke av denne build 2013 -05-29 15:07:00 MDT KONTEKST: linje 1 i konfigurasjonsfilen "C:/PostgreSQL/data/pg_hba.conf" 2013-05-29 15:07:00 MDT FATAL: kunne ikke laste pg_hba.conf 2013- 05-29 15:07:00 MDT LOGG: lokale tilkoblinger støttes ikke av denne versjonen 2013-05-29 15:07:00 MDT KONTEKST: linje 1 i konfigurasjonsfilen "C:/PostgreSQL/data/pg_hba.conf" 2013 -05-29 15:07:00 MDT FATAL: kunne ikke laste inn pg_hba.conf 2013-05-29 15:09:03 MDT LOG: mottok rask avslutningsforespørsel 2013-05-29 15:09:03 MDT LOG: avbryter evt. aktive transaksjoner 2013-05-29 15:09:03 MDT LOGG: autovakuumstarteren slår seg av 2013-05-29 15:09:03 MDT LOGG: slår av 2013-05-29 15:09:03 MDT LOGG: databasesystemet er slå av

Det ser ut til å være problemer med filen pg_hba.conf, som ser slik ut:

Lokal alle alle trust vert alle alle 127.0.0.1 255.255.255.255 trust vert alle alle 0.0.0.0 0.0.0.0 trust

I henhold til en rekke forslag på internett, prøvde jeg å endre topplinjen til flere forskjellige alternativer (alle vertene stoler/verter alle 127.0.0.1/32 stoler/verter alle 192.168.0.100/24 ​​stoler på, etc.). Dette ga mening for meg siden loggfilen sa at lokale tilkoblinger ikke støttes av postgres og pekte også på denne linjen. Ingen av endringene mine hadde imidlertid noen effekt. Jeg prøvde å starte datamaskinen på nytt etter hver endring, men ingenting endret seg.

Da jeg så etter eksempler på hvordan en pg_hba.conf-fil vanligvis ser ut, så eksemplene litt annerledes ut enn filen min. Jeg la merke til at i PostgreSQL-programfilen, i tillegg til pg_hba.conf, var det også en fil 20130529-150444-old-pg_hba.conf, som lignet mye mer på eksemplene jeg fant på nettet. Denne filen har flere linjer med kommentarer før disse siste linjene:

# TYPE DATABASE BRUKERADRESSE METODE # IPv4 lokale tilkoblinger: vert for alle alle 127.0.0.1/32 md5 # IPv6 lokale tilkoblinger: vert alle alle::1/128 md5 # Tillat replikeringstilkoblinger fra localhost, av en bruker med # replikeringsrettigheten. #vertsreplikering postgres 127.0.0.1/32 md5 #vertsreplikering postgres::1/128 md5

Jeg håpet at dette var den originale pg_hba.conf-filen, og hvis jeg erstattet den nye filen med innholdet i den gamle, ville postgres begynne å fungere igjen. Det er ingen slik flaks. Jeg håpet at flere feilfiler ville bli logget i pg_log-filen for å se om den tidligere rapporterte feilen hadde forsvunnet eller om noe hadde endret seg, men ingen flere filer ble logget.

Jeg søkte etter en nettjeneste i flere dager, og ingenting jeg fant fungerte. Beklager dette langt spørsmål, men jeg ønsket å være grundig og inkludere all relevant informasjon. Jeg vil sette pris på om noen kan kaste lys over dette problemet eller komme med forslag.

Denne meldingen er først og fremst ment for meg personlig og for vårt støtteteam, fordi... Et problem som ligner på det som er beskrevet nedenfor, oppstår med misunnelsesverdig frekvens, og du må huske de grunnleggende trinnene for å løse det.

Så, historien begynner med det faktum at 30. desember kl. 11-30 fikk jeg en oppringning med en melding om at en av våre klienter ikke startet systemet vårt fordi det ikke kunne koble til databasen (vi bruker PostgreSql versjon 8.1 som en DBMS ). Folk forklarer dette ved å si at for en time siden slukket lysene og datamaskinen slo seg feil, og etter å ha slått den på sluttet alt å fungere :)

Gode ​​brukere av systemet vårt vet hvor startknappen er og vet at det ikke er to klokker i systemet, «den ene med tall og den andre med sand». Derfor var det eneste jeg fikk gjort over telefonen å prøve å starte DBMS-tjenesten manuelt, men resultatet ble at tjenesten ikke startet. Jeg måtte videresende Internett til den datamaskinen (på datamaskiner der Internett-systemet vårt er installert burde det ikke være det) for å kunne koble til eksternt.

Etter å ha koblet til ekstern datamaskin Jeg prøvde å starte tjenesten og fikk følgende melding: "The PostgreSql Database Server 8.1 service" på "Local Computer" ble startet og deretter stoppet. Noen tjenester stopper automatisk hvis de ikke har noe å gjøre, for eksempel tjenesten for ytelseslogger og varsler." Hmm...

Problemet er at på den tiden var dette den eneste tilgjengelige informasjonen... PostgreSql-loggene er tomme, det er ingen oppføringer i dem, og systemloggene er også tomme.

Feilsøkingstjenester er ikke en enkel prosess, så mange utviklere tilbyr mekanismer for å starte en tjenesteapplikasjon som en vanlig konsollapplikasjon ved å bruke nøkler kommandolinje. Og PostgreSql er intet unntak i denne forbindelse; for å kjøre må du bruke følgende kommando (hint: denne kommandoen kan bare kjøres fra en ikke-administrativ bruker av systemet, men hvis du glemmer dette, vil PostgreSql veldig raskt minne deg på dette):

postgres -D " "

Vi kjører den og ser på feilmeldingen. I mitt tilfelle lød meldingen omtrent slik:

FATAL - falske data i låsefilen "postmaster.pid"

Selvfølgelig var jeg heldig, problemet viste seg å kunne løses. Av en eller annen grunn spesifisert fil viste seg å være tom, og jeg trengte å kopiere innholdet fra en fungerende forekomst av DBMS, noe som ikke var vanskelig.

Moralen i denne meldingen er at hvis databasen har sviktet, eller det har oppstått andre problemer med systemet, bør du i det minste prøve å finne ut hva som er DBMS (eller hele systemet) på nytt problemet er, kanskje er det ikke alle sjanser for at du vil kunne gjenopprette ytelsen din på radikale måter.

ZY Godt nytt år alle sammen og ønsker at systemene dine er stabile og pålitelige og ikke ødelegger søvnen din, men selv om det oppsto noen problemer, hadde du alltid alternativer klare til å håndtere denne situasjonen.

Denne meldingen er først og fremst ment for meg personlig og for vårt støtteteam, fordi... Et problem som ligner på det som er beskrevet nedenfor, oppstår med misunnelsesverdig frekvens, og du må huske de grunnleggende trinnene for å løse det.

Så, historien begynner med det faktum at 30. desember kl. 11-30 fikk jeg en oppringning med en melding om at en av våre klienter ikke startet systemet vårt fordi det ikke kunne koble til databasen (vi bruker PostgreSql versjon 8.1 som en DBMS ). Folk forklarer dette ved å si at for en time siden slukket lysene og datamaskinen slo seg feil, og etter å ha slått den på sluttet alt å fungere :)

Gode ​​brukere av systemet vårt vet hvor startknappen er og vet at det ikke er to klokker i systemet, «den ene med tall og den andre med sand». Derfor var det eneste jeg fikk gjort over telefonen å prøve å starte DBMS-tjenesten manuelt, men resultatet ble at tjenesten ikke startet. Jeg måtte videresende Internett til den datamaskinen (på datamaskiner der Internett-systemet vårt er installert burde det ikke være det) for å kunne koble til eksternt.

Etter å ha koblet til den eksterne datamaskinen, prøvde jeg å starte tjenesten og fikk følgende melding: "The PostgreSql Database Server 8.1 service" på "Local Computer" ble startet og deretter stoppet. Noen tjenester stopper automatisk hvis de ikke har noe å gjøre, for eksempel tjenesten for ytelseslogger og varsler." Hmm...

Problemet er at på den tiden var dette den eneste tilgjengelige informasjonen... PostgreSql-loggene er tomme, det er ingen oppføringer i dem, og systemloggene er også tomme.

Feilsøkingstjenester er ikke en enkel prosess, så mange utviklere tilbyr mekanismer for å starte en tjenesteapplikasjon som en vanlig konsollapplikasjon ved hjelp av kommandolinjebrytere. Og PostgreSql er intet unntak i denne forbindelse; for å kjøre må du bruke følgende kommando (hint: denne kommandoen kan bare kjøres fra en ikke-administrativ bruker av systemet, men hvis du glemmer dette, vil PostgreSql veldig raskt minne deg på dette):

postgres -D " "

Vi kjører den og ser på feilmeldingen. I mitt tilfelle lød meldingen omtrent slik:

FATAL - falske data i låsefilen "postmaster.pid"

Selvfølgelig var jeg heldig, problemet viste seg å kunne løses. Av en eller annen grunn viste den angitte filen seg å være tom, og jeg trengte å kopiere innholdet fra en fungerende forekomst av DBMS, noe som ikke var vanskelig.

Moralen i denne meldingen er at hvis databasen har sviktet, eller det har oppstått andre problemer med systemet, bør du i det minste prøve å finne ut hva som er DBMS (eller hele systemet) på nytt problemet er at det kanskje er stor sjanse for at du vil kunne gjenopprette funksjonaliteten din på mindre radikale måter.

ZY Godt nytt år alle sammen og ønsker at systemene dine er stabile og pålitelige og ikke ødelegger søvnen din, men selv om det oppsto noen problemer, hadde du alltid alternativer klare til å håndtere denne situasjonen.