पासवर्ड प्रॉम्प्ट के साथ psql का उपयोग कैसे करें?


70

मैंने REINDEXएक डेटाबेस में अनुक्रमित करने के लिए एक स्क्रिप्ट लिखी । उनमें से एक यहां पर है:

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

समस्या यह है कि मैं इस स्क्रिप्ट को स्टैंडअलोन मोड में नहीं चला सकता। psqlहर बार जब यह चलता है पासवर्ड संकेत दे रहा है। इसकी भी दो सीमाएँ हैं:

  1. मैं बिना पासवर्ड वाले डेटाबेस पर उपयोगकर्ता नहीं बना सकता।

  2. क्योंकि REINDEXतालिकाओं में ताले, मुझे sleep <num>प्रत्येक के बीच उपयोग करना चाहिए REINDEX

क्या कोई स्वचालित समाधान है?

जवाबों:


110

पासवर्ड प्रॉम्प्ट के संबंध में आपके पास चार विकल्प हैं:

  1. PGPASSWORD वातावरण चर सेट करें। जानकारी के लिए मैनुअल देखें:
    http://www.postgresql.org/docs/current/static/libpq-invs.html
  2. पासवर्ड स्टोर करने के लिए एक .pgpass फ़ाइल का उपयोग करें। जानकारी के लिए मैनुअल देखें:
    http://www.postgresql.org/docs/current/static/libpq-pg.html.html
  3. उस विशिष्ट उपयोगकर्ता के लिए "विश्वास प्रमाणीकरण" का उपयोग करें:
    http://www.postgresql.org/docs/current/static/auth-methods.html#AUTH-TRUST
  4. एक कनेक्शन URI का उपयोग करें जिसमें सब कुछ है:
    http://www.postgresql.org/docs/current/static/libpq-connect.html#AEN42532

4
PostgreSQL 9.1 के बाद से peerस्थानीय कनेक्शन के लिए प्रमाणीकरण विधि भी है । वर्तमान में केवल लिनक्स, बीएसडी, ओएस एक्स या सोलारिस (विंडोज के लिए नहीं)।
इरविन ब्रान्डेसटेटर

1
.pgpassविकल्प पर एक नोट , आपको अभी भी उपयोगकर्ता नाम, डेटाबेस और होस्टनाम निर्दिष्ट करना होगा (यदि आप सामान्य रूप से है) psqlकमांड में
राफेल

3 के संबंध में, आपको विधि को संपादित करने की आवश्यकता है। इसके बारे में यहाँ बताया गया है: gist.github.com/p1nox/4953113
FuzzyAmi

आसानी export PGPASSWORD="your_pw"से संस्करण 1
gies0r

18

इसके साथ एक सरल उदाहरण PGPASSWORDकुछ इस प्रकार होगा:

PGPASSWORD=YOUR_PASSRORD psql -h YOUR_PG_HOST -U YOUR_USER_NAME

आशा है ये मदद करेगा।


4
हाय इयान_ एच, आपकी टिप्पणियों के लिए धन्यवाद और मैं आपकी बातों से सहमत हूं। स्वीकृत उत्तर बहुत व्यापक है और इससे मेरी समस्या हल हो गई। इस पुरानी पोस्ट के लिए मैंने अपना जवाब दिया, क्योंकि यह अभी भी मेरे लिए सीधा नहीं है, क्योंकि मेरा मानना ​​है कि दूसरों की भी यही भावना हो सकती है।
पीपीएम

यह निश्चित रूप से स्वीकृत उत्तर के लिए एक अच्छा जोड़ था - सहायक अनुस्मारक जिसे हमें स्थायी रूप से ईएनवी संस्करण सेट करने की आवश्यकता नहीं है।
केवलर

1

आपकी खाता अनुमतियों के आधार पर, डेटाबेस को निर्दिष्ट किए बिना उदाहरण विफल हो सकता है, क्योंकि उपयोगकर्ता अनुमतियाँ उस डेटाबेस से जुड़ी होती हैं जिसे आप कनेक्ट करते हैं। डेटाबेस को स्पष्ट रूप से निर्दिष्ट करना बेहतर है।

# 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

इस सूत्र में बहुत उपयोगी उत्तर। मैं इसे ubuntu 18.04 के लिए जोड़ रहा हूँ:

sudo PGPASSWORD=yourpasswordHere -u postgres psql

यह आपको पासवर्ड प्रॉम्प्ट के बिना किसी भी पर्यावरण चर को सेट करने के बिना पोस्टग्रेज में ले जाएगा। यह एक स्थायी सेटिंग नहीं है।


ऐसा न करें: पासवर्ड ps -ef के आउटपुट में दिखाई देगा।
कॉलिन टी हार्ट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.