কোনও পাসওয়ার্ড প্রম্পট ছাড়াই পিএসকিএল কীভাবে ব্যবহার করবেন?


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. পিজিপিএএসডওয়ার্ড এনভায়রনমেন্ট ভেরিয়েবল সেট করুন। বিস্তারিত জানার জন্য ম্যানুয়াল দেখুন:
    http://www.postgresql.org/docs/current/static/libpq-envars.html
  2. পাসওয়ার্ড সংরক্ষণ করার জন্য একটি .pgpass ফাইল ব্যবহার করুন। বিশদগুলির জন্য ম্যানুয়ালটি দেখুন:
    http://www.postgresql.org/docs/current/static/libpq-pgpass.html
  3. এই নির্দিষ্ট ব্যবহারকারীর জন্য "বিশ্বাসের প্রমাণীকরণ" ব্যবহার করুন :
  4. একটি সংযোগ ইউআরআই ব্যবহার করুন যাতে সমস্ত কিছু রয়েছে:
    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
হাই ইয়ান_হঃ, আপনার মন্তব্যের জন্য ধন্যবাদ এবং আমি সকলেই আপনার পয়েন্টগুলির সাথে একমত হই। গৃহীত উত্তরটি খুব ব্যাপক এবং এটি আমার সমস্যার সমাধান করে। আমি এই পুরানো পোস্টটিতে আমার উত্তর দেওয়ার কারণ হ'ল এটি এখনও আমার কাছে সোজা না, কারণ আমি বিশ্বাস করি অন্যেরও একই অনুভূতি থাকতে পারে।
pdm

এটি অবশ্যই গ্রহণযোগ্য উত্তরের একটি উত্তম সংযোজন ছিল - সহায়ক অনুস্মারক যে আমাদের স্থায়ীভাবে ENV ভারসেট সেট করার দরকার নেই।
কেভেলার

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

এই থ্রেডে খুব সহায়ক উত্তর। আমি কেবল এটি উবুন্টু 18.04 এর জন্য যুক্ত করছি:

sudo PGPASSWORD=yourpasswordHere -u postgres psql

এটি আপনাকে কোনও পরিবেশের ভেরিয়েবল সেট না করে পাসওয়ার্ড প্রম্পট ছাড়াই পোস্টগ্রাজে নিয়ে যাবে। এটি কোনও স্থায়ী সেটিং নয়।


এটি করবেন না: পিএস-শেফের আউটপুটে পাসওয়ার্ডটি দৃশ্যমান হবে।
কলিন টি হার্ট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.