Fortsæt med at læse, de bedste muligheder kommer sidst . Men lad os først afklare et par ting.
Kun lydløs for anmodningen om adgangskode
Hvis dit problem kun er adgangskodeprompten, kan du slå den fra. Jeg citerer manualen her:
-w --no-password
Udgiv aldrig en adgangskodeprompt. Hvis serveren kræver adgangskodegodkendelse, og en adgangskode ikke er tilgængelig på andre måder, såsom .pgpass fil, vil forbindelsesforsøget mislykkes. Denne mulighed kan være nyttig i batchjobs og scripts, hvor der ikke er nogen bruger til stede for at indtaste en adgangskode. (...)
Du behøver sandsynligvis ikke en adgangskode
Normalt er dette unødvendigt. Standarddatabasens superbruger postgres svarer normalt til systembrugeren af samme navn. Kører psql fra denne konto kræver ikke en adgangskode, hvis godkendelsesmetoden peer eller ident er indstillet i din pg_hba.conf fil. Du har sikkert en linje som denne:
local all postgres peer
Og som regel også:
local all all peer
Det betyder, at alle lokale brugeren kan logge på en alle database som databasebruger af samme navn uden adgangskode.
Men , er der en almindelig misforståelse her. Citerer igen:
Denne metode understøttes kun på lokale forbindelser .
Fed fremhævelse mine.
Du opretter forbindelse til localhost , som ikke er en "lokal forbindelse" , selvom den har ordet "lokal" i sig. Det er en TCP/IP-forbindelse til 127.0.0.1. Wikipedia på localhost:
På moderne computersystemer, localhost som et værtsnavn oversættes til en IPv4-adresse i 127.0.0.0/8 (loopback) netblok, normalt 127.0.0.1 eller ::1 i IPv6.
Simpel løsning til lokale forbindelser
Udelad parameteren -h fra psql påkaldelse. Citerer manualen på psql endnu en gang:
Hvis du udelader værtsnavnet, vil psql oprette forbindelse via en Unix-domæne-socket til en server på den lokale vært, eller via TCP/IP til localhost på maskiner, der ikke har Unix-domæne-sockets.
Windows
... har ikke Unix-domæne-sockets, pg_hba.conf linjer, der starter med local er ikke anvendelige på Windows. På Windows forbinder du via localhost som standard, hvilket bringer os tilbage til starten.
Hvis dine sikkerhedskrav er slappe, kan du bare stole på alle forbindelser via localhost :
host all all 127.0.0.1/32 trust
Jeg ville kun gøre det til fejlretning med fjernforbindelser slået fra. For mere sikkerhed kan du bruge SSPI-godkendelse på Windows. Tilføj denne linje til pg_hba.conf for "lokale" forbindelser:
host all all 127.0.0.1/32 sspi
Hvis du rent faktisk har brug for en adgangskode
Du kunne indstille en miljøvariabel , men dette frarådes , især til Windows. Manualen:
PGPASSWORD opfører sig på samme måde som adgangskodeforbindelsesparameteren. Brug af denne miljøvariabel anbefales ikke af sikkerhedsmæssige årsager, da nogle operativsystemer tillader ikke-rootbrugere at se procesmiljøvariabler via ps; overvej i stedet at bruge ~/.pgpass fil (se afsnit 32.15).
Manualen om psql :
En conninfo streng er et alternativ til at angive forbindelsesparametre:
$ psql "user=myuser password=secret_pw host=localhost port=5432 sslmode=require"
Eller en URI , som bruges i stedet for et databasenavn:
$ psql postgresql://myuser:example@sqldat.com:5432/mydb?sslmode=require
Adgangskodefil
Men det er normalt at foretrække at konfigurere en .pgpass fil i stedet for at indsætte adgangskoder i scriptfiler.
Læs det korte kapitel i manualen omhyggeligt. Bemærk især, at her ...
Et værtsnavn for localhost matcher både TCP (værtsnavn localhost ) og Unix-domæne-socket (pghost tomme eller standard socket directory) forbindelser, der kommer fra den lokale maskine.
Den nøjagtige vej afhænger af systemet. Denne fil kan gemme adgangskoder til flere kombinationer af rolle og port (DB-klynge):
localhost:5432:*:myadmin:myadminPasswd
localhost:5434:*:myadmin:myadminPasswd
localhost:5437:*:myadmin:myadminPasswd
...
På Windows maskiner leder efter filen i:
%APPDATA%\postgresql\pgpass.conf
%APPDATA% løser typisk:C:\Documents and Settings\My_Windows_User_Name\Application Data\ .