Fortsätt läsa, de bästa alternativen kommer sist . Men låt oss förtydliga ett par saker först.
Tysta bara lösenordsbegäran
Om problemet bara är lösenordsuppmaningen kan du tysta det. Jag citerar manualen här:
-w--no-passwordGe aldrig en lösenordsuppmaning. Om servern kräver lösenordsautentisering och ett lösenord inte är tillgängligt på andra sätt som t.ex.
.pgpassfil, kommer anslutningsförsöket att misslyckas. Det här alternativet kan vara användbart i batch-jobb och skript där ingen användare är närvarande för att ange ett lösenord. (...)
Du behöver förmodligen inget lösenord
Normalt är detta onödigt. Standarddatabassuperanvändaren postgres motsvarar vanligtvis systemanvändaren med samma namn. Kör psql från det här kontot kräver inget lösenord om autentiseringsmetoden peer eller ident är inställda i din pg_hba.conf fil. Du har förmodligen en rad så här:
local all postgres peer
Och vanligtvis också:
local all all peer
Det betyder att alla lokala användare kan logga in på en all databas som databasanvändare med samma namn utan lösenord.
Men , det finns en vanlig missuppfattning här. Citerar igen:
Den här metoden stöds endast på lokala anslutningar .
Fet betoning min.
Du ansluter till localhost , som inte är en "lokal anslutning" , även om det har ordet "lokal" i sig. Det är en TCP/IP-anslutning till 127.0.0.1. Wikipedia på localhost:
På moderna datorsystem,
localhostsom ett värdnamn översätts till en IPv4-adress i127.0.0.0/8(loopback) nätblock, vanligtvis127.0.0.1, eller::1i IPv6.
Enkel lösning för lokala anslutningar
Utelämna parametern -h från psql åkallan. Citerar manualen på psql ännu en gång:
Om du utelämnar värdnamnet ansluter psql via en Unix-domänsocket till en server på den lokala värden, eller via TCP/IP till
localhostpå maskiner som inte har Unix-domänsockets.
Windows
... har inte Unix-domänsockets, pg_hba.conf rader som börjar med local är inte tillämpliga på Windows. På Windows ansluter du via localhost som standard, vilket för oss tillbaka till början.
Om dina säkerhetskrav är slappa kan du bara lita på alla anslutningar via localhost :
host all all 127.0.0.1/32 trust
Jag skulle bara göra det för felsökning med fjärranslutningar avstängda. För lite mer säkerhet kan du använda SSPI-autentisering på Windows. Lägg till den här raden i pg_hba.conf för "lokala" anslutningar:
host all all 127.0.0.1/32 sspi
Om du faktiskt behöver ett lösenord
Du kunde ställ in en miljövariabel , men detta är avskräckt , speciellt för Windows. Manualen:
PGPASSWORDfungerar på samma sätt som lösenordsanslutningsparametern. Användning av denna miljövariabel rekommenderas inte av säkerhetsskäl, eftersom vissa operativsystem tillåter icke-rotanvändare att se processmiljövariabler via ps; överväg istället att använda~/.pgpassfil (se avsnitt 32.15).
Manualen om psql :
En conninfo string är ett alternativ för att ange anslutningsparametrar:
$ psql "user=myuser password=secret_pw host=localhost port=5432 sslmode=require"
Eller en URI , som används istället för ett databasnamn:
$ psql postgresql://myuser:example@sqldat.com:5432/mydb?sslmode=require
Lösenordsfil
Men det är vanligtvis att föredra att ställa in en .pgpass fil istället för att lägga in lösenord i skriptfiler.
Läs det korta kapitlet i manualen noggrant. Observera särskilt att här ...
Ett värdnamn för
localhostmatchar både TCP (värdnamnlocalhost) och Unix-domänsocket (pghosttomma eller standardsocket-katalogen) anslutningar som kommer från den lokala maskinen.
Exakt väg beror på systemet. Den här filen kan lagra lösenord för flera kombinationer av roll och port (DB-kluster):
localhost:5432:*:myadmin:myadminPasswd
localhost:5434:*:myadmin:myadminPasswd
localhost:5437:*:myadmin:myadminPasswd
...
På Windows maskiner letar efter filen i:
%APPDATA%\postgresql\pgpass.conf
%APPDATA% löser vanligtvis till:C:\Documents and Settings\My_Windows_User_Name\Application Data\ .