কমান্ড লাইন আর্গুমেন্ট ব্যবহার করে একটি PostgreSQL .sQL ফাইল চালান


540

আমার কাছে কয়েক হাজার এসকিএল ফাইল রয়েছে যার মধ্যে হাজার হাজার INSERT বিবৃতি রয়েছে এবং এগুলিকে একটি সারণিতে যুক্ত করার জন্য এই পোস্টগুলিকে আমার পোস্টগ্রাইএসকিউএল ডাটাবেসে চালানো দরকার। ফাইলগুলি এত বড় যে এগুলি খুলতে এবং INSERT বিবৃতিগুলি সম্পাদক উইন্ডোতে অনুলিপি করা এবং সেখানে চালানো অসম্ভব। আমি ইন্টারনেটে খুঁজে পেয়েছি যে আপনি আপনার পোস্টগ্র্যাস এসকিউএল ইনস্টলের বিন ফোল্ডারে নেভিগেট করে নিম্নলিখিতটি ব্যবহার করতে পারেন:

psql -d myDataBase -a -f myInsertFile

আমার ক্ষেত্রে:

psql -d HIGHWAYS -a -f CLUSTER_1000M.sql

তারপরে আমাকে আমার ব্যবহারকারীর জন্য একটি পাসওয়ার্ড জিজ্ঞাসা করা হয়েছে, তবে আমি কিছুই প্রবেশ করতে পারছি না এবং যখন আমি এন্টার চাপি তখন আমি এই ত্রুটিটি পাই:

পিএসকিএল: FATAL: "আমার ব্যবহারকারীর" ব্যবহারকারীর জন্য পাসওয়ার্ড প্রমাণীকরণ ব্যর্থ হয়েছে

কেন এটি আমাকে একটি পাসওয়ার্ড প্রবেশ করতে দিবে না। আমি কি এই স্ক্রিপ্টগুলি চালাতে পারি তা সমালোচনামূলক বলে কোনও পথ রয়েছে?

নিম্নলিখিত কাঠামোর সাথে আমার pg_hba.conf ফাইলটিতে একটি নতুন এন্ট্রি যুক্ত করে আমি এই সমস্যাটি ঘটিয়েছি:

# IPv6 local connections:
host    myDbName    myUserName ::1/128    trust

Pg_hba.conf ফাইলটি সাধারণত আপনার PostgreSQL ইনস্টলের 'ডেটা' ফোল্ডারে পাওয়া যায়।


6
আপনার কাছে ইতিমধ্যে আপনার জবাব আছে তবে কেবলমাত্র ... "আমি কিছুই প্রবেশ করতে পারছি না", আপনি কি এই কথাটির সাথে কথা বলছেন যে আপনার পাসওয়ার্ড টাইপ করলে কিছুই দেখা যায় না? এই ক্ষেত্রে এটি সাধারণ, সাধারণত পাসওয়ার্ড টাইপ করা এবং এন্টার
চাপলে

আইটিআইএসের একটি অনুলিপি ( itis.gov ) ইনস্টল করতে আমার একই সমস্যা হয়েছিল । ডাটাবেসটি উপস্থিত ছিল না, তাই আমি এর নামটি ব্যবহার করতে পারিনি। পোস্টগ্রেএসকিউএল যেভাবে কাজ করে সে কারণে, আমি এটি করতে পেরেছিলাম: পিএসকিএল --পোর্ট = 5554 - ব্যবহারকারীর নাম = রুট - ফাইল = আইটিআইএস.এসকিএল টেমপ্লেট 1
সাইবারকাইট

উত্তর:


157

পাসওয়ার্ড সরবরাহের জন্য আপনার চারটি পছন্দ রয়েছে:

  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. PostgreSQL 9.1 যেহেতু আপনি একটি সংযোগ স্ট্রিংও ব্যবহার করতে পারেন :
    https://www.postgresql.org/docs/current/static/libpq-connect.html#LIBPQ-CONNSTRING

ওহে. আমি এখন সেটিংসকে বিশ্বাসের জন্য সেট করেছি তবে আমি লক্ষ্য করেছি যে সফ্টওয়্যারটি লগইন করার জন্য আমার উইন্ডোটির ব্যবহারকারীর নাম ব্যবহার করার চেষ্টা করছে। আমি আমার পোস্টগ্রেএসকিএল ডাটাবেসে সেটআপ করেছি এমন একটি ভূমিকা ব্যবহার করতে চাই। কমান্ডটি চালানোর জন্য কোন ভূমিকাটি ব্যবহার করা উচিত তা বলার কোনও উপায় আছে?
সিশার্পেনড

2
@ সিশপেনড: -uম্যানুয়ালটিতে নথি হিসাবে প্যারামিটারটি ব্যবহার করুন
a_horse_with_no_name

# 2 অত্যন্ত সহজ। হোস্টযুক্ত একটি পংক্তি যুক্ত করুন: পোর্ট: ডিবি: ব্যবহারকারী: একটি ফাইলে পাস করুন এবং আপনার কাজ শেষ। চমৎকার কাজ.
Kriil

493

অবশ্যই, আপনি প্রমাণীকরণের জন্য মারাত্মক ত্রুটি পাবেন, কারণ আপনি কোনও ব্যবহারকারীর নাম অন্তর্ভুক্ত করবেন না ...

এটি ব্যবহার করে দেখুন, এটা আমার জন্য ঠিক আছে :)

psql -U username -d myDataBase -a -f myInsertFile

ডাটাবেস দূরবর্তী হলে হোস্টের সাথে একই কমান্ডটি ব্যবহার করুন

psql -h host -U username -d myDataBase -a -f myInsertFile

4
নোট করুন যে প্রদত্ত ব্যবহারকারীর নামটি একটি বৈধ পোস্টগ্রিজের ভূমিকা হতে হবে। ডিফল্ট বর্তমানে লগ ইন ব্যবহারকারী।
ম্যাথিয়াস ক্রল


5
@ অ্যালিকেলজিন-কিলাকার -aদরকার নেই এখানে। এটি "সমস্ত অযৌক্তিক ইনপুট লাইনগুলি স্ট্যান্ডার্ড আউটপুটে পড়ার সাথে সাথে এটি মুদ্রণ করুন"
এমজেস্পায়ার

এটি হ'ল গ্রহণযোগ্য উত্তর।
Kostanos

316

আপনার এটি করা উচিত:

\i path_to_sql_file

দেখা:

এখানে চিত্র বিবরণ লিখুন


2
আমি পেয়েছিPermission denied
জ্যাক

4
করার পরে chmod 777 myfileত্রুটি Permission deniedঠিক করা হয়েছিল
উলুগব্যাক রোজিম্বয়েভ

5
@ জ্যাক যদি আপনার অনুমতিটি যদি উইন্ডোজ মেশিনে ঘটে থাকে তবে আপনি ভুল স্ল্যাশ ব্যবহার করছেন।
pgsandstrom

2
উইন্ডোজগুলিতে আমার এই ত্রুটি ছিল এবং এটি @ প্যাগস্যান্ডস্ট্রোমের উল্লেখ অনুসারে স্ল্যাশ হিসাবে পরিণত হয়েছিল। ভুল স্ল্যাশগুলি = পরিবর্তে ফরোয়ার্ড স্ল্যাশ ব্যবহার করুন, এবং পথে কোনও উদ্ধৃতি নেই। \ আইসি: /dev/script.sql
ডেভ

50

পোস্টগ্রিএসকিউএল সার্ভারটি যখন কোনও পার্থক্যের জায়গায় অবস্থিত থাকে * * এসকিউএল ফাইলগুলি কার্যকর করতে এটি ব্যবহার করুন:

psql -h localhost -d userstoreis -U admin -p 5432 -a -q -f /home/jobs/Desktop/resources/postgresql.sql

-h PostgreSQL server IP address
-d database name
-U user name
-p port which PostgreSQL server is listening on
-f path to SQL script
-a all echo
-q quiet

তারপরে আপনাকে ব্যবহারকারীর পাসওয়ার্ড প্রবেশ করতে অনুরোধ জানানো হবে।

সম্পাদনা: @ জওয়াকি কর্তৃক প্রদত্ত মন্তব্যের ভিত্তিতে আপডেট হয়েছে


5
@ ChickenWing24 -a: সব প্রতিধ্বনি, -q: শান্ত, -f: ফাইল
zwacky

এইটি আমার নিজের সমস্যার সমাধান করেছে, দুর্দান্ত
টেমি 'টপসি' বেলো

45
export PGPASSWORD=<password>
psql -h <host> -d <database> -U <user_name> -p <port> -a -w -f <file>.sql

1
আউটপুট ছাড়াই আমি কীভাবে এটি করতে পারি
Lu32

2
পিএসকিএল-এইচ <হোস্ট> -ডি <ডেটাবেস> -উ <ইউজার_নেম> -পি <port> -a -q -w -f <file>।
এসকিএল

3
@ Lu32 আপনি পতাকাটিও ছেড়ে দিতে পারেন - যার অর্থ "সমস্ত অজস্র ইনপুট লাইনগুলি পড়ার সাথে সাথে স্ট্যান্ডার্ড আউটপুটে মুদ্রণ করুন")। সম্পাদনা পরীক্ষিত, ছাড়াই এটি কম প্রিন্ট করে, তবে এখনও অনেক বেশি তথ্য। সুতরাং বিশ -9219 যেমনটি বলেছে তেমন-বুদ্ধি পতাকাঙ্কিতটি সঠিক।
রুনি লিলিমেটস

41

আপনি যদি লিনাক্স শেলটিতে পিএসকিএল-এ লগ ইন করেন তবে কমান্ডটি হ'ল:

\i fileName.sql

পরম পথের জন্য এবং

\ir filename.sql

আপেক্ষিক পাথের জন্য যেখানে আপনি পিএসএকএল কল করেছেন।


@ ফ্লোরিয়ান যেমন বলেছে, একবার লগ ইন করলে আপনি কোনও ফাইল চালিয়ে দিতে পারেন। আপনার এসকিউএল-তে কোনও মন্তব্য লাইন দুটি উপায় হিসাবে চিহ্নিত করতে ভুলবেন না ...-- লাইনের শেষে মন্তব্য করুন) - এক লাইনের মন্তব্য বা খ) / * একাধিক লাইন মন্তব্য * /
সুমিত এস

26

টার্মিনালটি আপনার ডেটাবেজে লগ ইন করুন এবং এটি ব্যবহার করে দেখুন:

database-# >@pathof_mysqlfile.sql

অথবা

database-#>-i pathof_mysqlfile.sql

অথবা

database-#>-c pathof_mysqlfile.sql

এই সমাধানটি আমার পক্ষে আরও দৃ solid়; উত্তর হিসাবে চিহ্নিত হিসাবে চিহ্নিত নয়
AlexG

16

আপনি কমান্ড লাইনেই ব্যবহারকারীর নাম এবং পাসওয়ার্ড উভয়ই দিতে পারেন।

   psql "dbname='urDbName' user='yourUserName' password='yourPasswd' host='yourHost'" -f yourFileName.sql

আপনি যদি পরিবেশের ভেরিয়েবলগুলি সেট করতে বা অদ্ভুত পাস ফাইলগুলি ব্যবহার না করতে চান তবে এটি কাজ করে। =)
মার্টিন

13

আপনি এমনকি এটি এইভাবে করতে পারে:

sudo -u postgres psql -d myDataBase -a -f myInsertFile

যদি আপনার sudoমেশিনে অ্যাক্সেস থাকে এবং এটি কেবল নিজের মেশিনে পরীক্ষার জন্য উত্পাদন স্ক্রিপ্টগুলির জন্য প্রস্তাবিত না হয় তবে এটি সহজতম উপায়।


9

লিনাক্সে পোস্টগ্রেএসকিউএল-এর কমান্ড লাইনে কীভাবে একটি এসকিউএল চালানো যায় সে সম্পর্কে হাঁটুন:

একটি টার্মিনাল খুলুন এবং নিশ্চিত করুন যে আপনি psqlকমান্ডটি চালাতে পারেন :

psql --version
which psql

খনিটি 9.1.6 সংস্করণে অবস্থিত /bin/psql

নামক একটি সরল পাঠ্য ফাইল তৈরি করুন mysqlfile.sql

ফাইলটি সম্পাদনা করুন, সেখানে একটি একক লাইন রাখুন:

select * from mytable;

কমান্ডলাইনে এই কমান্ডটি চালান (আপনার ব্যবহারকারীর নাম এবং আপনার ডেটাবেজের নাম প্যাগাডমিন এবং কুর্জ_প্রডের জন্য)

psql -U pgadmin -d kurz_prod -a -f mysqlfile.sql

টার্মিনালে আমি প্রাপ্ত ফলাফলটি নীচে রয়েছে (আমাকে একটি পাসওয়ার্ডের জন্য অনুরোধ করা হয়নি):

select * from mytable;

test1
--------
hi
me too

(2 rows)

আপনি কিভাবে একটি ব্যবহারকারী সেট আপ করবেন? এটি আমার প্রথমবারের মতো নতুন। এসকিউএল ফাইলটিতে ইনস্টল এবং চালানো। সর্বদা ভুল পাসওয়ার্ড বলে
mKane

4

আপনি একটি কমান্ড প্রম্পট খুলতে এবং প্রশাসক হিসাবে চালাতে পারেন। তারপরে টাইপ করুন

../bin>psql -f c:/...-h localhost -p 5432 -d databasename -U "postgres"

Password for user postgres: প্রদর্শিত হবে।

আপনার পাসওয়ার্ড টাইপ করুন এবং লিখুন। আমি কী লিখছি তা আমি পাসওয়ার্ডটি দেখতে পাচ্ছিলাম না, তবে এবার আমি এন্টার টিপলে এটি কাজ করে। আসলে আমি ডাটাবেসে ডেটা লোড করছিলাম।


আমি মনে করি আপনি বোঝাতে চেয়েছেন-d "postgres"
অ্যামপেটামচাইন

-d ডাটাবেস নামের জন্য এমফিটামাচাইন , চেক করুনpsql --help
ইয়াজ

1

আমি লিখেছিলাম যে (আমার স্ক্রিপ্টটি যেখানে আছে সেখানে অবস্থিত)

::someguy@host::$sudo -u user psql -d my_database -a -f file.sql 

যেখানে -u user হয় ভূমিকা যারা ডাটাবেসের যেখানে আমি স্ক্রিপ্ট তারপর চালানো চান মালিক psqlসাথে সংযোগ করে psqlযে পরে কনসোল -d my_databaseমধ্যে লোড আমাকে mydatabaseপরিশেষে -a -f file.sqlযেখানে -aস্ক্রিপ্ট থেকে সমস্ত ইনপুট echo এবং -fথেকে কমান্ডগুলো file.sqlমধ্যে mydatabase, তারপর প্রস্থানের।

আমি ব্যবহার করছি: পিএসকিএল (পোস্টগ্রিএসকিউএল) 10.12 অন (উবুন্টু 10.12-0ubuntu0.18.04.1)

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