Şifre istemi olmadan psql nasıl kullanılır?


70

REINDEXVeritabanındaki indekslere bir senaryo yazdım . İşte onlardan biri:

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

Sorun şu ki bu betiği bağımsız modda çalıştıramıyorum. psqlher çalıştığında şifre soruyor. Ayrıca iki sınırlama vardır:

  1. Veritabanında şifresiz bir kullanıcı oluşturamıyorum.

  2. Çünkü REINDEXkilitleri tablolar, kullanmalıyım sleep <num>her biri arasında REINDEX.

Herhangi bir otomatik çözüm var mı?

Yanıtlar:


111

Şifre istemi ile ilgili dört seçeneğiniz var:

  1. PGPASSWORD ortam değişkenini ayarlayın. Ayrıntılar için kılavuza bakınız:
    http://www.postgresql.org/docs/current/static/libpq-envars.html
  2. şifreyi saklamak için bir .pgpass dosyası kullanın. Ayrıntılar için kılavuza bakınız:
    http://www.postgresql.org/docs/current/static/libpq-pgpass.html
  3. Bu kullanıcı için "güven kimlik doğrulaması" kullanın:
    http://www.postgresql.org/docs/current/static/auth-methods.html#AUTH-TRUST
  4. her şeyi içeren bir bağlantı URI'sini kullanın:
    http://www.postgresql.org/docs/current/static/libpq-connect.html#AEN42532

4
PostgreSQL 9.1’den bu yana peeryerel bağlantılar için de doğrulama yöntemi vardır. Şu anda sadece Linux, BSD, OS X veya Solaris için (Windows değil).
Erwin Brandstetter

1
Seçeneğe ilişkin bir not, .pgpassyine de psqlkomutta kullanıcı adı, veritabanı ve ana bilgisayar adı belirtmeniz gerekir (normalde bunu yaparsanız)
raphael

3 ile ilgili olarak, yöntemi düzenlemeniz gerekir. burada açıklanmıştır: gist.github.com/p1nox/4953113
FuzzyAmi

Kolayca export PGPASSWORD="your_pw"sürüm 1 gitmek için kullanın
gies0r

18

Basit bir örnek PGPASSWORDşöyle bir şey olacak:

PGPASSWORD=YOUR_PASSRORD psql -h YOUR_PG_HOST -U YOUR_USER_NAME

Umarım yardımcı olur.


4
Merhaba Ian_H, yorumlarınız için teşekkür ederim ve hepiniz puanlarınıza katılıyorum. Kabul edilen cevap çok kapsamlı ve bu benim sorunumu çözdü. Cevabımı bu eski yazıya vermemin sebebi, başkalarının da aynı hissi olabileceğine inandığım için hala kolay değil.
pdm

Bu kesinlikle kabul edilen cevaba iyi bir katkı oldu - ENV değişkenlerini kalıcı olarak belirlememiz gerekmediğine dair faydalı bir hatırlatma.
kevlarr

1

Hesap izinlerinize bağlı olarak, veritabanını belirtmeden örnek, kullanıcı izinleri bağlandığınız veritabanına göre kontrol edildiğinden başarısız olabilir. Veritabanının da açıkça belirtilmesi daha iyidir.

# 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  

0

Bu konuda çok yararlı cevaplar. Bunu sadece ubuntu 18.04 için ekliyorum:

sudo PGPASSWORD=yourpasswordHere -u postgres psql

Bu, herhangi bir ortam değişkeni ayarlamanıza gerek kalmadan, şifre istemi olmadan kayıt defterlerine götürür. Bu kalıcı bir ayar değil.


Yapmayın: Parola ps -ef çıktısında görünecektir.
Colin, Hart,
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.