Hoe kan ik psql bellen, zodat het niet vraagt om een wachtwoord ?
Dit is wat ik heb:
psql -Umyuser < myscript.sql
Ik kon echter niet het argument vinden dat het wachtwoord passeert, en dus prompt PSQL er altijd voor.
Antwoord 1, Autoriteit 100%
Mogelijk wilt u een samenvatting lezen van de manieren om te authenticeren aan PostgreSQL .
Om uw vraag te beantwoorden, zijn er verschillende manieren om een wachtwoord te bieden voor wachtwoordgerichte authenticatie:
-
Via het wachtwoord Prompt . Voorbeeld:
psql -h uta.biocommons.org -U foo Password for user foo:
-
in een PGPass-bestand . Zie libpq-pgpass . Formaat:
<host>:<port>:<database>:<user>:<password>
-
met de
PGPASSWORD
Milieuvariabele . Zie libpq-envars . Voorbeeld:export PGPASSWORD=yourpass psql ... # Or in one line for this invocation only: PGPASSWORD=yourpass psql ...
-
In de verbindingsreeksHet wachtwoord en andere opties kunnen worden opgegeven in de verbindingsreeks/URI. Zie app-psql. Voorbeeld:
psql postgresql://username:password@dbmaster:5433/mydb?sslmode=require
Antwoord 2, autoriteit 48%
PGPASSWORD=[your password] psql -Umyuser < myscript.sql
Antwoord 3, autoriteit 19%
U kunt deze opdrachtregel aan het begin van uw script toevoegen:
set PGPASSWORD=[your password]
Antwoord 4, autoriteit 14%
Dit is misschien een oude vraag, maar er is een alternatieve methode die niemand heeft genoemd. Het is mogelijk om het wachtwoord rechtstreeks in de verbindings-URI op te geven. De documentatie is hierte vinden, of hier.
U kunt uw gebruikersnaam en wachtwoord rechtstreeks opgeven in de verbindings-URI die is verstrekt aan psql
:
# postgresql://[user[:password]@][netloc][:port][/dbname][?param1=value1&...]
psql postgresql://username:password@localhost:5432/mydb
Antwoord 5, autoriteit 14%
Als u van plan bent meerdere hosts/database-verbindingen te hebben, kunt u de ~/ .pgpass-bestandis de juiste keuze.
Stappen:
- Maak het bestand met
vim ~/.pgpass
of vergelijkbaar. Voer uw informatie in het volgende formaat in:
hostname:port:database:username:password
Voeg geen stringcitaten toe rond uw veldwaarden. U kunt ook * als een jokerteken voor uw poort / databasevelden gebruiken. - U moet
chmod 0600 ~/.pgpass
om niet stil te worden genegeerd door PSQL. - Maak een alias in uw BASH-profiel dat uw PSQL-opdracht voor u uitvoert. Bijvoorbeeld:
alias postygresy='psql --host hostname database_name -U username'
De waarden moeten overeenkomen met die die u hebt ingevoerd naar het ~ / .pgpass-bestand. - Bron uw bashprofiel met
. ~/.bashrc
of vergelijkbaar. - Typ uw alias van de opdrachtregel.
Merk op dat als u een Variable Set van PGPassword = ” ” ” ‘hebt over het bestand.
Antwoord 6, Autoriteit 4%
Als u problemen ondervindt op Windows zoals ME (ik gebruik Windows 7 64-bit) en set PGPASSWORD=[Password]
Werkte niet.
Toen, zoals Kavaklioglu zei in een van de opmerkingen,
export PGPASSWORD=[password]
U moet dit bovenaan het bestand opslaan of vóór elk gebruik, zodat het is ingesteld voordat u wordt genoemd.
werkt zeker op Windows 🙂
Antwoord 7, Autoriteit 3%
U moet een wachtwoordbestand maken: zie http: // www .postgresql.org / docs / 9.0 / interactief / libpq-pgpass.html voor meer informatie.
Antwoord 8, Autoriteit 3%
Een alternatief voor het gebruik van PGPASSWORD
Milieuvariabele is het gebruik conninfo
string volgens de Documentatie
Een alternatieve manier om verbindingsparameters op te geven, is in een Conninfo
string of een URI, die wordt gebruikt in plaats van een database-naam. Dit
Mechanisme geeft u een zeer brede controle over de verbinding.
$ psql "host=<server> port=5432 dbname=<db> user=<user> password=<password>"
postgres=>
Antwoord 9, Autoriteit 2%
Gezien de beveiligingsproblemen over het gebruik van de Variabele PGPassword-omgeving, denk ik dat de beste algemene oplossing als volgt is:
- Schrijf uw eigen tijdelijke PGPASS-bestand met het wachtwoord dat u wilt gebruiken.
- Gebruik de variabele PGPASSFILE-omgeving om PSQL te vertellen om dat bestand te gebruiken.
- Verwijder het tijdelijke PGPASS-bestand
Er zijn hier een paar punten van opmerking. Stap 1 is er om mucking te voorkomen met het ~ / .pgpass-bestand van de gebruiker. U moet ook ervoor zorgen dat het bestand machtigingen 0600 of minder heeft.
Sommigen hebben voorgesteld gebruik te maken van BASH om dit te snellen als volgt:
PGPASSFILE=<(echo myserver:5432:mydb:jdoe:password) psql -h myserver -U jdoe -p 5432 mydb
Hiermee gebruikt u de syntaxis van & LT; () om te voorkomen dat u de gegevens naar een feitelijk bestand kunt schrijven. Maar het werkt niet omdat PSQL controleert welk bestand wordt gebruikt en zal een fout gooien als volgt:
WARNING: password file "/dev/fd/63" is not a plain file
Antwoord 10, Autoriteit 2%
het kan eenvoudig worden gedaan met behulp van PGPassword. Ik gebruik PSQL 9.5.10. In uw geval zou de oplossing
zijn
PGPASSWORD=password psql -U myuser < myscript.sql
Antwoord 11
Voortbouwend op mightybyte’s antwoordvoor degenen die niet vertrouwd zijn met *nixshell-scripting , hier is een werkend script:
#!/bin/sh
PGPASSFILE=/tmp/pgpasswd$$
touch $PGPASSFILE
chmod 600 $PGPASSFILE
echo "myserver:5432:mydb:jdoe:password" > $PGPASSFILE
export PGPASSFILE
psql mydb
rm $PGPASSFILE
Het dubbele dollarteken ($$
) in /tmp/pgpasswd$$
op regel 2 voegt het proces-ID-nummer toe aan de bestandsnaam, zodat dit script meer dan eens worden uitgevoerd, zelfs gelijktijdig, zonder bijwerkingen.
Let op het gebruik van het chmod
-commando op regel 4 – net als de “not a plain file“-fout die mightybytebeschreef, is er ook een “permissions“-fout als dit niet wordt gedaan.
Op regel 7 hoeft u de -h
mijnserver, de -p
mijnpoort, of -U
jdoevlag als u de standaardinstellingen gebruikt (localhost: 5432) en slechts één database heeft gebruiker. Wijzig voor meerdere gebruikers (maar de standaardverbinding) die regel in
psql mydb jdoe
Vergeet niet om het script uitvoerbaarte maken met
chmod +x runpsql
(of hoe je het scriptbestand ook hebt genoemd)
UPDATE:
Ik heb het advies van RichVelopgevolgd en het bestand onleesbaar gemaakt voordathet wachtwoord erin heeft gezet. Dat sluit een klein veiligheidsgat.
Bedankt!
Antwoord 12
U kunt dit nuttig vinden: Windows PSQL-opdrachtregel: is er een manier om wachtwoordloze aanmelding toe te staan?
Antwoord 13
8 jaar later …
Op mijn Mac moest ik een regel in het bestand plaatsen
~/.pgpass
zoals:
<IP>:<PORT>:<dbname>:<user>:<password>
Zie ook:
https://www.postgresql.org/docs/current/libpq-pgpass. html
https://wiki.postgresql.org/wiki/pgpass
Antwoord 14
Dit werkt ook voor andere PostGresql CLI’s, bijvoorbeeld kunt u PGBEch in niet-interactieve modus uitvoeren.
export PGPASSWORD=yourpassword
/usr/pgsql-9.5/bin/pgbench -h $REMOTE_PG_HOST -p 5432 -U postgres -c 12 -j 4 -t 10000 example > pgbench.out 2>&1 &
Antwoord 15
Ik vind, dat PSQL-wachtwoordprompt weergeeft, zelfs u definieert PGPASSWORD-variabele, maar u kunt -W-optie voor PSQL opgeven om het wachtwoord aan te laten.
Antwoord 16
Gebruik -W in de opdracht:
PSQL -H Localhost-P 5432 -U-gebruiker -W