Fix: psql: kunne ikke koble til serveren: Ingen slik fil eller katalog
PostgreSQL markedsfører seg selv som den mest avanserte applikasjonsplattformen med åpen kildekode, og Debian Linux har absolutt mange pakker som gjør det enda mer komplekst. Du kan også finne båtlast av pakker for PostgreSQL hvis du jobber med Ubuntu Server eller noen av de forskjellige Ubuntu-spinnene, siden de er basert på Debians kjerne. Dette nivået av kompleksitet og utvikling gjør "kunne ikke koble til server" og "ingen slik fil eller katalog" advarsler som mye mer irriterende.
Heldigvis er dette vanligvis enkle tilfeller av tillatelsesproblemer forårsaket av det faktum at PostgreSQL ønsker at en bruker som heter postgres, skal holde på disse katalogene. Ved å bruke et enkelt kommandolinjetriks, kan du fikse dette nesten umiddelbart. Du må gjennomgå noen få grunnleggende diagnostiske kontroller på forhånd, men bare for å være sikker på at dette faktisk er problemet du er imot.
Å fikse PostgreSQL kunne ikke koble til serverfeil
Forsøk først å starte PostgreSQL-systemet manuelt. Noen ganger er dette nok til å fikse ting, og hvis ikke, får du i det minste en feilmelding å jobbe fra. Mer enn sannsynlig starter du bare systemet på nytt ved å utstede psql-kommandoen som postgres-bruker.
Du vil kanskje oppdage at dette ryddet opp. Ellers kan det hende du får en linje som sier "psql: kunne ikke koble til serveren: Ingen slik fil eller katalog", noe som betyr at du har problemer med tillatelse. Hvis du får denne feilmeldingen, får du også litt annen spion.
Sjekk servicestatus hvis du har fått denne meldingen for å være sikker på at modulene er lastet inn. Det burde de være, men hvis ikke, vil du kanskje starte på nytt. Hvis du får en melding som heter "Loaded: loaded (/lib/systemd/system/postgresql.service; enabled)", så kjører de. Prøve sudo service postgresql start på nytt bare for å gjøre en kort omstart og se om det korrigerer noe. Det gjør det vanligvis ikke, men det kan være verdt å prøve, avhengig av.
Forutsatt at det ikke har hjulpet, ta en titt inne i PostgreSQL-loggen for å se etter feil. I det usannsynlige tilfellet du finner noe om pakkefeil, kan det hende du mangler en av SQL-modulene. Dette er vanligvis ikke årsaken til disse problemene, men det kan absolutt ikke skade å se i det minste. Mer enn sannsynlig vil du faktisk komme over noe som advarer deg om at "Tillatelser skal være u = rwx (0700)" og
at "datakatalogen" /var/lib/postgresql/9.6/main "har tilgang til gruppe eller verden", selv om du kanskje ser et annet versjonsnummer, avhengig av hvilken SQL-server du kjører.
Dette er fordi Debian og lignende distribusjoner forventer at postgres bruker og gruppe styrer disse katalogene med 0700 tillatelser og alle filer gjennom 0600 tillatelser for sikkerhets skyld. Alt du trenger å gjøre er å kjøre følgende kommando på terminalen for å fikse tillatelser:
sudo chown -R postgres: postgres /var/lib/postgresql/9.6/ && sudo chmod -R u = rwX, go = /var/lib/postgresql/9.6/
Husk at det bør være store bokstaver X og ikke de vanligste små bokstavene x du sannsynligvis er mer kjent med på grunn av den spesifikke måten du vil ønske å angi disse alternativene for filtillatelse på. Mens du trenger root-tilgang for å gjøre dette, bør inkluderingen av disse to sudo-merkene være mer enn nok til å gi deg selv de riktige tillatelsene når du kjører som en vanlig bruker. Dette er viktig siden Ubuntu og de forskjellige Linux-implementeringene ble spunnet fra Ubuntu, hash ut hovedrotkontoen, så du må gjøre ting på denne måten.
Når denne kommandoen er ferdig, kan du starte tjenesten på nytt med sudo service postgresql start på nytt fra terminalen, og du burde ikke ha noen feil denne gangen. Hvis du skulle ta en titt på loggen, burde ikke advarslene om tillatelsesproblemer være der lenger heller.
Dette er en feil som oppstår som et resultat av ganske spesifikke forhold, så du bør ikke oppleve det igjen etter at du har korrigert det første gang, forutsatt at du ikke prøver å gjøre noe manuelt som involverer tillatelsesmanipulering av PostgreSQL-katalogene. Det er ingen situasjon der dette egentlig burde være nødvendig uansett, utenom å rette opp dette problemet i utgangspunktet.