Jak określić hasło do "psql" nieinteraktywnie?

Próbuję zautomatyzować proces tworzenia bazy danych za pomocą skryptu powłoki i jedna rzecz, którą Uderzyłem w blokadę z przekazaniem hasła dopsql . Oto fragment kodu ze skryptu powłoki:

psql -U $DB_USER -h localhost -c"$DB_RECREATE_SQL"

Jak przekazać hasło do psql w nieinteraktywny sposób?

Author: Peter Mortensen, 2011-06-19

9 answers

Z oficjalnej dokumentacji :

Jest również wygodne, aby mieć~/.plik pgpass, aby uniknąć regularnego wpisywania haseł. Więcej informacji można znaleźć w sekcji 30.13 .

...

Ten plik powinien zawierać wiersze w następującym formacie:

hostname:port:database:username:password

Zostanie użyte pole password z pierwszej linii odpowiadającej bieżącym parametrom połączenia.

 171
Author: Flimzy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-20 17:28:48

Ustaw zmienną środowiskową PGPASSWORD wewnątrz skryptu przed wywołaniem psql

PGPASSWORD=pass1234 psql -U MyUsername myDatabaseName

W celach informacyjnych patrz http://www.postgresql.org/docs/current/static/libpq-envars.html


Edit

Od wersji Postgres 9.2 istnieje również możliwość podania ciągu połączenia lub URI, który może zawierać nazwę Użytkownika i hasło.

Używanie tego jest Zagrożeniem bezpieczeństwa, ponieważ hasło jest widoczne w postaci zwykłego tekstu, gdy patrzy się na wiersz poleceń uruchomionego procesu, np. używając ps (Linux), ProcessExplorer (Windows) lub podobnych narzędzi, przez innych użytkowników.

Zobacz także to pytanie naadministratorzy baz danych

 710
Author: a_horse_with_no_name,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-20 20:30:16
  • W jednym wierszu:

    export PGPASSWORD='password'; psql -h 'server name' -U 'user name' -d 'base name' -c 'command'
    

    Z poleceniem poleceniem sql takim jak "select * from schema.table"

  • Lub bardziej czytelny:

    export PGPASSWORD='password'
    psql -h 'server name' -U 'user name' -d 'base name' \
         -c 'command' (eg. "select * from schema.table")
    
 115
Author: user4653174,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-10 10:08:40

Wolę przekazać URL do psql :

psql "postgresql://$DB_USER:$DB_PWD@$DB_SERVER/$DB_NAME"

Daje mi to swobodę nazywania zmiennych środowiskowych tak, jak chcę i pozwala uniknąć tworzenia niepotrzebnych plików.

To wymaga libpq. Dokumentację można znaleźć tutaj .

 88
Author: Jacques Gaudin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-03-04 20:35:42

W Systemie Windows:

  1. Przypisz wartość do PGPASSWORD: C:\>set PGPASSWORD=pass

  2. Polecenie Uruchom: C:\>psql -d database -U user

Gotowe

Lub w jednym wierszu,

set PGPASSWORD=pass&& psql -d database -U user

Zwróć uwagę na brak miejsca przed && !

 33
Author: JAGJ jdfoxito,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-04 15:02:08

Można to zrobić, tworząc plik .pgpass w katalogu domowym użytkownika (Linux). .pgpass format pliku:

<databaseip>:<port>:<databasename>:<dbusername>:<password>

Możesz również użyć dzikiej karty * zamiast szczegółów.

Powiedzmy, że chciałem uruchomić tmp.sql bez pytania o hasło.

Z poniższym kodem możesz w pliku*. SH

echo "192.168.1.1:*:*:postgres:postgrespwd" > $HOME/.pgpass
echo "` chmod 0600 $HOME/.pgpass `"

echo " ` psql -h 192.168.1.1 -p 5432  -U postgres  postgres  -f tmp.sql `        
 24
Author: Srini,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-16 15:14:06

Alternatywą dla użycia zmiennej środowiskowej PGPASSWORD jest użycie ciągu znaków conninfo zgodnie z dokumentacją :

Alternatywnym sposobem określenia parametrów połączenia jest conninfo string lub URI, który jest używany zamiast nazwy bazy danych. To mechanizm daje bardzo szeroką kontrolę nad połączeniem.

$ psql "host=<server> port=5432 dbname=<db> user=<user> password=<password>"

postgres=>
 22
Author: ubi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-03-04 20:36:26

Jeśli nie jest za późno, aby dodać większość opcji w jednej odpowiedzi:

Istnieje kilka opcji:

  1. ustaw go w pliku pgpass. link
  1. Ustaw zmienną środowiskową i pobierz ją stamtąd:

    export PGPASSWORD='password'

A następnie uruchom psql, aby się zalogować lub nawet uruchomić polecenie stamtąd:

 psql -h clustername -U username -d testdb
  1. W systemie windows musisz użyć "set":

    Set PGPASSWORD=pass a następnie zaloguj się do psql bash.

 9
Author: Raj Verma,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-09-02 06:25:52

Dodano treść pg_env.sh za moje .bashrc:

cat /opt/PostgreSQL/10/pg_env.sh

#!/bin/sh
# The script sets environment variables helpful for PostgreSQL

export PATH=/opt/PostgreSQL/10/bin:$PATH
export PGDATA=/opt/PostgreSQL/10/data
export PGDATABASE=postgres
export PGUSER=postgres
export PGPORT=5433
export PGLOCALEDIR=/opt/PostgreSQL/10/share/locale
export MANPATH=$MANPATH:/opt/PostgreSQL/10/share/man

Z dodatkiem (wg sugestii user4653174)

export PGPASSWORD='password'
 8
Author: Rob,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-04-17 11:47:15