it-swarm.asia

Bagaimana cara menggunakan psql tanpa prompt kata sandi?

Saya menulis skrip untuk REINDEX indeks dalam database. Ini salah satunya:

echo -e "\nreindex for unq_vbvdata_vehicle started at: `date "+%F %T"`" >> ${LOG_FILE}
psql -U ${USERNAME} -h ${HOSTNAME} -d ${DBNAME} -c "REINDEX INDEX scm_main.unq_vbvdata_vehicle;"
if [[ ${?} -eq 0 ]]; then
    echo "reindex for unq_vbvdata_vehicle finished at: `date "+%F %T"`" >> ${LOG_FILE}
else
    echo "reindex for unq_vbvdata_vehicle failed" >> ${LOG_FILE}
    exit 1
fi

Masalahnya adalah saya tidak bisa menjalankan skrip ini dalam mode mandiri. psql meminta kata sandi setiap kali dijalankan. Ada juga dua batasan:

  1. Saya tidak dapat membuat pengguna di basis data tanpa kata sandi.

  2. Karena REINDEX mengunci tabel, saya harus menggunakan sleep <num> di antara setiap REINDEX.

Apakah ada solusi otomatis?

83
Majid Azimi

Anda memiliki empat pilihan tentang kata sandi Prompt:

  1. atur variabel lingkungan PGPASSWORD. Untuk detailnya lihat manual:
    http://www.postgresql.org/docs/current/static/libpq-envars.html
  2. gunakan file .pgpass untuk menyimpan kata sandi. Untuk detailnya lihat manual:
    http://www.postgresql.org/docs/current/static/libpq-pgpass.html
  3. gunakan "trust trust" untuk pengguna tertentu:
    http://www.postgresql.org/docs/current/static/auth-methods.html#AUTH-TRUST
  4. gunakan koneksi URI yang berisi segalanya:
    http://www.postgresql.org/docs/current/static/libpq-connect.html#AEN42532
127

Contoh sederhana dengan PGPASSWORD akan berupa sesuatu seperti:

PGPASSWORD=YOUR_PASSRORD psql -h YOUR_PG_Host -U YOUR_USER_NAME

Semoga ini bisa membantu.

22
pdm

Bergantung pada izin akun Anda, contoh tanpa menentukan basis data mungkin gagal, karena izin pengguna diperiksa terhadap basis data yang Anda sambungkan. Lebih baik secara eksplisit menentukan database juga.

# this can fail.
PGPASSWORD=YOUR_PASSRORD psql -h YOUR_PG_Host -U YOUR_USER_NAME    

# this is more likely to work, assuming given account has permissions to that database.
PGPASSWORD=YOUR_PASSRORD psql -h YOUR_PG_Host -U YOUR_USER_NAME -d YOUR_DATABASE  
2
mtoonen

Jawaban yang sangat membantu di utas ini. Saya hanya menambahkan ini untuk ubuntu 18.04:

Sudo PGPASSWORD=yourpasswordHere -u postgres psql

Ini akan membawa Anda ke postgres tanpa kata sandi Prompt, tanpa harus mengatur variabel lingkungan apa pun. Ini bukan pengaturan permanen.

0
Dhiraj