it-swarm.asia

كيفية استخدام psql بدون موجه كلمة المرور؟

كتبت سيناريو إلى فهارس 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.

هل يوجد حل تلقائي؟

83
Majid Azimi

لديك أربعة خيارات بخصوص كلمة المرور مطالبة:

  1. تعيين متغير بيئة PGPASSWORD. للحصول على التفاصيل ، راجع الدليل:
    http://www.postgresql.org/docs/current/static/libpq-envars.html
  2. استخدام ملف .pgpass لتخزين كلمة المرور. للحصول على التفاصيل ، راجع الدليل:
    http://www.postgresql.org/docs/current/static/libpq-pgpass.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
127
a_horse_with_no_name

مثال بسيط مع PGPASSWORD سيكون مثل:

PGPASSWORD=YOUR_PASSRORD psql -h YOUR_PG_Host -U YOUR_USER_NAME

آمل أن يساعد.

22
pdm

وفقًا لأذونات حسابك ، قد يفشل المثال بدون تحديد قاعدة البيانات ، لأنه يتم التحقق من أذونات المستخدم مقابل قاعدة البيانات التي تتصل بها. من الأفضل تحديد قاعدة البيانات بشكل صريح أيضًا.

# 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

إجابات مفيدة للغاية في هذا الموضوع. أنا فقط أضيف هذا لأوبونتو 18.04:

Sudo PGPASSWORD=yourpasswordHere -u postgres psql

سيأخذك هذا إلى postgres بدون مطالبة كلمة المرور ، دون الحاجة إلى تعيين أي متغيرات بيئة. هذا ليس إعداد دائم.

0
Dhiraj