আমি কীভাবে 'পিএসকিএল' -র সাথে ইন্টারেক্টিভভাবে একটি পাসওয়ার্ড নির্দিষ্ট করব?


337

আমি শেল স্ক্রিপ্ট দিয়ে ডেটাবেস তৈরি প্রক্রিয়াটি স্বয়ংক্রিয় করার চেষ্টা করছি এবং একটি জিনিস যা আমি পিএসএইচএল-তে পাসওয়ার্ড দেওয়ার সাথে সাথে একটি রোড ব্লকে আঘাত করেছি । শেল স্ক্রিপ্ট থেকে কোডটি এখানে দেওয়া হয়েছে:

psql -U $DB_USER -h localhost -c"$DB_RECREATE_SQL"

আমি কীভাবে psqlএকটি অ-ইন্টারেক্টিভ উপায়ে পাসওয়ার্ডটি পাস করব ?


1
আপনি একটি সংযোগ url ব্যবহার করতে পারেন। এই উত্তরগুলি stackoverflow.com/questions/3582552/postgres-connection-url এ দেখুন
পৌলদিওভানি

উত্তর:


141

থেকে সরকারী ডকুমেন্টেশন :

নিয়মিত পাসওয়ার্ড টাইপ করা এড়াতে ~ / .pgpass ফাইল থাকাও সুবিধাজনক। আরও তথ্যের জন্য বিভাগ 30.13 দেখুন ।

...

এই ফাইলটিতে নিম্নলিখিত ফর্ম্যাটটির লাইন থাকা উচিত:

hostname:port:database:username:password

বর্তমান সংযোগের পরামিতিগুলির সাথে মেলে এমন প্রথম লাইনের পাসওয়ার্ড ক্ষেত্রটি ব্যবহৃত হবে।


29
ধন্যবাদ, আমি পগপাস সম্পর্কে সচেতন, তবে এটি সমস্যার সমাধান করে না - ডাটাবেস পরিচালনা করার জন্য আমার একটি স্ব-অন্তর্ভুক্ত বাশ স্ক্রিপ্ট দরকার, সুতরাং কমান্ড লাইনের মাধ্যমে পিএসকিএল-তে তথ্য পাস করার বিষয়ে আমার প্রশ্ন।
অ্যালেক্স এন।

6
আমি মনে করি আপনার বাশ স্ক্রিপ্টটিতে অ্যাক্সেস রয়েছে এমন একটি .pgpass ফাইল সেট আপ করা আপনার একমাত্র বিকল্প। বা পাসওয়ার্ডগুলি একেবারেই ব্যবহার করবেন না - আপনি প্রমাণীকরণের মতো অন্য কোনও ফর্ম সেট করতে পারেন, যেমন পরিচয়, বা এসএসএল শংসাপত্র ব্যবহার করে।
ফ্লিমজি

এটাই আমি ভয় পেয়েছিলাম :) তথ্যের জন্য ধন্যবাদ!
অ্যালেক্স এন।

আর একটি বিকল্প আশা ব্যবহার করা হতে পারে। তবে আমি প্রত্যাশাটিকে সত্যই ঘৃণা করি :)
ফ্লিমজি

1
.Pgpass ফাইলটি পড়তে, লিখতে এবং চালিত করার জন্য গ্রুপ এবং অন্যান্য ব্যবহারকারীর অনুমতি অপসারণ করতে ভুলবেন না! চালানchmod go-rwx .pgpass
ভ্লাদিস্লাভস ডোভলেলেকস

610

পিএসকিএল কল করার আগে স্ক্রিপ্টের মধ্যে পিজিপিএএসডওয়ার্ড পরিবেশ পরিবর্তনশীল সেট করুন

PGPASSWORD=pass1234 psql -U MyUsername myDatabaseName

রেফারেন্সের জন্য দেখুন http://www.postgresql.org/docs/current/static/libpq-envars.html


সম্পাদন করা

Postgres 9.2-র সাথে সংযোগের স্ট্রিং বা ইউআরআই নির্দিষ্ট করার বিকল্প রয়েছে যা ব্যবহারকারীর নাম এবং পাসওয়ার্ড থাকতে পারে ।

এটি ব্যবহার করা একটি সুরক্ষা ঝুঁকিপূর্ণ কারণ psঅন্য ব্যবহারকারীদের দ্বারা চলমান প্রক্রিয়া যেমন কমান্ড লাইনটি (লিনাক্স), প্রসেস এক্সপ্লোরার (উইন্ডোজ) বা অনুরূপ সরঞ্জাম ব্যবহার করে পাসওয়ার্ডটি সরল পাঠ্যে দৃশ্যমান ।

ডেটাবেস প্রশাসকদের এই প্রশ্নটি দেখুন


32
উদাহরণস্বরূপ এক লাইনে আপনি যেমন কিছু করতে পারেন: পিজিপিএএসডওয়ার্ড = পাস 1234 পিএসকিএল -উ মাই ইউজারনেম মাইউজারনেম
andyortlieb

3
আমি মনে করি যে এটি কেবল এসকিউএল স্ক্রিপ্ট চালানোর জন্য সবচেয়ে সুবিধাজনক উপায়।
zr870

2
আমি কেবল যুক্ত করতে পারি - spaceপ্রথম অক্ষরের আগে কমান্ড লাইনে একটি যুক্ত করতে পারি এবং কমান্ডটি বাশ ইতিহাসে সংরক্ষণ করা হবে না। উবুন্টু / বাশের জন্য কাজ করে।
টাল 18

5
বোনাস: ডকারের জন্য কাজ করে:docker run -e PGPASSWORD="$(pbpaste)" --rm postgres psql -h www.example.com dbname username -c 'SELECT * FROM table;'
বিলাল আকিল

3
সতর্ক থাকুন এবং সর্বদা পূর্ববর্তী স্থানটি যুক্ত করে রাখার বিষয়টি নিশ্চিত করুন অন্যথায় এটি আপনার বাশ ইতিহাস show / .bash_history ফাইলটিতে প্রদর্শিত হবে ...
রজারডপ্যাক

102
  • এক লাইনে:

    export PGPASSWORD='password'; psql -h 'server name' -U 'user name' -d 'base name' -c 'command'

    সঙ্গে কমান্ড এর মত SQL কমান্ড"select * from schema.table"

  • বা আরও পাঠযোগ্য:

    export PGPASSWORD='password'
    psql -h 'server name' -U 'user name' -d 'base name' \
         -c 'command' (eg. "select * from schema.table")

18
একটি লাইন সামান্য সরল করা যেতে পারে: PGPASSWORD='password' psql .... কমান্ডটি সম্পন্ন করার পরে ভেরিয়েবলটি অ্যাক্সেসযোগ্য না হওয়ার সুবিধাও রয়েছে।
গ্যারেট

3
export PGPASSWORD=YourNewPasswordঅন্যান্য প্রকরণের জন্য আমার জন্য কাজ।
মাইকুমাস

7
export PGPASSWORDসত্যিই খারাপ ধারণা বলে মনে হচ্ছে
হেসেন

1
এটি আপনার বাশ ইতিহাস the / .bash_history ফাইলের পাসওয়ার্ড সংরক্ষণ করবে (আপনি সাবধানে সবসময় পূর্ববর্তী স্থানটি যুক্ত না করলে) এবং আপনার বর্তমান পরিবেশে পাসওয়ার্ডটি রফতানি করবে FWIW: |
রজারডপ্যাক

68

আমি পিএসকিএল- তে কোনও ইউআরএল পাস করা পছন্দ করি :

psql "postgresql://$DB_USER:$DB_PWD@$DB_SERVER/$DB_NAME"

এটি আমার ইচ্ছেমতো আমার পরিবেশের ভেরিয়েবলগুলির নামকরণের স্বাধীনতা দেয় এবং অপ্রয়োজনীয় ফাইল তৈরি করা এড়িয়ে যায়।

এটি প্রয়োজন libpq। ডকুমেন্টেশন এখানে পাওয়া যাবে


আপনি pg_restore দিয়ে এরকম কিছু ব্যবহার করতে পারেন? ধন্যবাদ!
the_calderon

1
@ ccalderon911217 দৃশ্যত আপনি করতে পারেন: stackoverflow.com/a/28359470/1388292
জ্যাক Gaudin

@ জ্যাক্কসগাউডিন হ্যাঁ আমার পরীক্ষা! ধন্যবাদ!
the_calderon

26

উইন্ডোজে:

  1. পিজিপিএএসডওয়ার্ডকে মান নির্ধারণ করুন: C:\>set PGPASSWORD=pass

  2. আপনার আদেশ প্রদান করুন: C:\>psql -d database -U user

প্রস্তুত

বা এক লাইনে,

set PGPASSWORD=pass&& psql -d database -U user

&& এর আগে জায়গার অভাব নোট করুন!


1
আমি এটি চেষ্টা করেছিলাম, এবং এটি কার্যকর হয়নি। তবুও একটি পাসওয়ার্ড চাওয়া হচ্ছে।
অ্যান্টিপ্যাটার্ন

1
@ এন্টিপটার্ন আপনাকে অবশ্যই বিকল্পটি পাস করতে হবে -w
mljrg

1
PGPASSWORD=xxxx psql -U username -d database -w -c "select * from foo;"কাজ করে।
স্টিভ শিপওয়ে

21

এটি .pgpass(লিনাক্স) ব্যবহারকারীর হোম ডিরেক্টরিতে একটি ফাইল তৈরি করে করা যেতে পারে । .pgpass ফাইলের বিন্যাস:

<databaseip>:<port>:<databasename>:<dbusername>:<password>

*বিশদের জায়গায় আপনি ওয়াইল্ড কার্ডও ব্যবহার করতে পারেন ।

বলুন আমি tmp.sqlপাসওয়ার্ড না প্রেরণে চালাতে চেয়েছিলাম ।

নিম্নলিখিত কোডের সাহায্যে আপনি * .sh ফাইল করতে পারেন

echo "192.168.1.1:*:*:postgres:postgrespwd" > $HOME/.pgpass
echo "` chmod 0600 $HOME/.pgpass `"

echo " ` psql -h 192.168.1.1 -p 5432  -U postgres  postgres  -f tmp.sql `        

11
"` Chmod 0600 $ HOME / .pgpass? "প্রতিধ্বনিটির বিন্দুটি কী? কীভাবে কেবল chmod 0600 $ হোম / .pgpass সম্পর্কে?
ভ্লাদ প্যাট্রেশেভ

12

PGPASSWORDপরিবেশ পরিবর্তনশীল ব্যবহারের বিকল্প হ'ল ডকুমেন্টেশনconninfo অনুসারে স্ট্রিংটি ব্যবহার করা :

সংযোগের পরামিতিগুলি নির্দিষ্ট করার একটি বিকল্প উপায় হ'ল সংযুক্তি স্ট্রিং বা একটি ইউআরআই, যা ডাটাবেসের নামের পরিবর্তে ব্যবহৃত হয়। এই প্রক্রিয়া আপনাকে সংযোগের উপর খুব বিস্তৃত নিয়ন্ত্রণ দেয়।

$ psql "host=<server> port=5432 dbname=<db> user=<user> password=<password>"

postgres=>

আপনাকে ধন্যবাদ, এটি আমার জন্য দুর্দান্তভাবে কাজ করেছে
গ্রেপিট

4

আমার .bashrc এ pg_env.sh এর সামগ্রী যুক্ত করা হয়েছে:

cat /opt/PostgreSQL/10/pg_env.sh

#!/bin/sh
# The script sets environment variables helpful for PostgreSQL

export PATH=/opt/PostgreSQL/10/bin:$PATH
export PGDATA=/opt/PostgreSQL/10/data
export PGDATABASE=postgres
export PGUSER=postgres
export PGPORT=5433
export PGLOCALEDIR=/opt/PostgreSQL/10/share/locale
export MANPATH=$MANPATH:/opt/PostgreSQL/10/share/man

সংযোজন (ব্যবহারকারী হিসাবে 65653174 পরামর্শ হিসাবে)

export PGPASSWORD='password'
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.