Saya mencoba untuk mengotomatiskan proses pembuatan basis data dengan skrip shell dan satu hal yang saya temukan di blok jalan dengan meneruskan kata sandi ke psql . Berikut ini sedikit kode dari skrip shell:
psql -U $DB_USER -h localhost -c"$DB_RECREATE_SQL"
Bagaimana saya meneruskan kata sandi dengan psql
cara yang tidak interaktif?
bash
postgresql
command-line
Alex N.
sumber
sumber
Jawaban:
Dari dokumentasi resmi :
...
sumber
chmod go-rwx .pgpass
Setel variabel lingkungan PGPASSWORD di dalam skrip sebelum memanggil psql
Untuk referensi, lihat http://www.postgresql.org/docs/current/static/libpq-envars.html
Edit
Sejak Postgres 9.2 ada juga opsi untuk menentukan string koneksi atau URI yang dapat berisi nama pengguna dan kata sandi.
Menggunakan itu adalah risiko keamanan karena kata sandi terlihat dalam teks biasa ketika melihat baris perintah dari proses yang berjalan misalnya menggunakan
ps
(Linux), ProcessExplorer (Windows) atau alat serupa, oleh pengguna lain.Lihat juga pertanyaan ini tentang Administrator Database
sumber
space
di baris perintah sebelum karakter pertama dan perintah tidak akan disimpan dalam bash history. Bekerja untuk ubuntu / bash.docker run -e PGPASSWORD="$(pbpaste)" --rm postgres psql -h www.example.com dbname username -c 'SELECT * FROM table;'
dalam satu baris:
dengan perintah perintah sql seperti
"select * from schema.table"
atau lebih mudah dibaca:
sumber
PGPASSWORD='password' psql ....
yang juga memiliki manfaat dari variabel yang tidak dapat diakses setelah perintah selesai.export PGPASSWORD=YourNewPassword
bekerja untuk saya atas variasi lain.export PGPASSWORD
terdengar seperti ide yang sangat burukSaya cenderung lebih suka meneruskan URL ke psql :
Ini memberi saya kebebasan untuk memberi nama variabel lingkungan saya seperti yang saya inginkan dan menghindari membuat file yang tidak perlu.
Ini membutuhkan
libpq
. Dokumentasi dapat ditemukan di sini .sumber
Di Windows:
Tetapkan nilai untuk PGPASSWORD:
C:\>set PGPASSWORD=pass
Jalankan perintah:
C:\>psql -d database -U user
Siap
Atau dalam satu baris,
Perhatikan kurangnya ruang sebelum &&!
sumber
-w
.PGPASSWORD=xxxx psql -U username -d database -w -c "select * from foo;"
bekerja.Ini dapat dilakukan dengan membuat
.pgpass
file di direktori home Pengguna (Linux)..pgpass
format file:Anda juga dapat menggunakan wild card
*
sebagai ganti detail.Katakanlah saya ingin menjalankan
tmp.sql
tanpa meminta kata sandi.Dengan kode berikut Anda dapat dalam file * .sh
sumber
Alternatif untuk menggunakan
PGPASSWORD
variabel lingkungan adalah dengan menggunakanconninfo
string sesuai dengan dokumentasi :sumber
Menambahkan konten pg_env.sh ke .bashrc saya:
dengan penambahan (sesuai saran pengguna4653174)
sumber