कमांड लाइन तर्कों का उपयोग करके एक PostgreSQL .sql फ़ाइल चलाएँ


540

मेरे पास हजारों INSERT स्टेटमेंट्स वाली कुछ .sql फाइलें हैं और उन्हें एक टेबल पर जोड़ने के लिए इन पोस्टर्स को मेरे PostgreSQL डेटाबेस पर चलाने की आवश्यकता है। फाइलें इतनी बड़ी हैं कि उन्हें खोलना और INSERT के बयानों को एक संपादक विंडो में कॉपी करना और उन्हें वहां चलाना असंभव है। मैंने इंटरनेट पर पाया कि आप अपने PostgreSQL इंस्टॉल के बिन फ़ोल्डर में नेविगेट करके निम्नलिखित का उपयोग कर सकते हैं:

psql -d myDataBase -a -f myInsertFile

मेरे मामले में:

psql -d HIGHWAYS -a -f CLUSTER_1000M.sql

फिर मुझे अपने उपयोगकर्ता के लिए पासवर्ड मांगा जाता है, लेकिन मैं कुछ भी दर्ज नहीं कर सकता और जब मैं प्रवेश करता हूं तो मुझे यह त्रुटि मिलती है:

psql: FATAL: पासवर्ड प्रमाणीकरण उपयोगकर्ता "myUsername" के लिए विफल रहा

यह मुझे पासवर्ड दर्ज करने की अनुमति क्यों नहीं देगा। क्या इसका कोई रास्ता है क्योंकि यह महत्वपूर्ण है कि मैं इन लिपियों को चला सकूं?

मैंने निम्नलिखित संरचना के साथ अपने pg_hba.conf फ़ाइल में एक नई प्रविष्टि जोड़कर इस समस्या को हल किया:

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

Pg_hba.conf फ़ाइल आमतौर पर आपके PostgreSQL इंस्टॉल के 'डेटा' फ़ोल्डर में मिल सकती है।


6
आपके पास पहले से ही आपका जवाब है लेकिन सिर्फ मामले में ... "मैं कुछ भी दर्ज नहीं कर सकता", क्या आप इस तथ्य के बारे में बात कर रहे होंगे कि आपका पासवर्ड टाइप करने से कुछ भी नहीं दिखता है? इस मामले में यह सामान्य है, आम तौर पर पासवर्ड टाइप करना और एंटर करना काम करना चाहिए ...
Lacvelyne Lachance

मुझे ITIS ( itis.gov ) की एक प्रति स्थापित करने में इसी तरह की समस्या थी । डेटाबेस मौजूद नहीं था, इसलिए मैं इसके नाम का उपयोग नहीं कर सका। जिस तरह से PostgreSQL काम करता है, मैं ऐसा कर सकता है: psql --port = 5554 --username = जड़ --file = ITIS.sql Template1
Cyberknight

जवाबों:


157

पासवर्ड की आपूर्ति करने के लिए आपके पास चार विकल्प हैं:

  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. PostgreSQL 9.1 के बाद से आप एक कनेक्शन स्ट्रिंग का भी उपयोग कर सकते हैं :
    https://www.postgresql.org/docs/current/static/libpq-connect.html#LIBPQ-CONNSTRING

नमस्ते। मैंने अब भरोसा करने के लिए सेटिंग्स सेट कर दी हैं, लेकिन मुझे लगता है कि सॉफ्टवेयर लॉगिन करने के लिए मेरी विंडोज़ उपयोगकर्ता नाम का उपयोग करने की कोशिश कर रहा है। मैं एक ऐसी भूमिका का उपयोग करना चाहता हूं जिसे मैंने अपने पोस्टग्रैस्क्ल डेटाबेस में सेटअप किया है। क्या यह बताने का एक तरीका है कि कमांड चलाने के लिए किस भूमिका का उपयोग करना है?
CSharpened

2
@CSharpened: -uमैनुअल में प्रलेखित पैरामीटर का उपयोग करें
a_horse_with_no_name

# 2 बेहद सरल है। होस्ट में केवल एक पंक्ति जोड़ें: पोर्ट: db: उपयोगकर्ता: फ़ाइल में पास करें और आपका काम हो गया। अच्छा काम।
क्रिल

494

बेशक, आपको प्रमाणीकरण के लिए एक घातक त्रुटि मिलेगी, क्योंकि आप एक उपयोगकर्ता नाम शामिल नहीं करते हैं ...

यह एक कोशिश करो, यह मेरे लिए ठीक है :)

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

यदि डेटाबेस दूरस्थ है, तो होस्ट के साथ एक ही कमांड का उपयोग करें

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

4
ध्यान दें कि प्रदान किया गया उपयोगकर्ता नाम एक मान्य पोस्टग्रेज भूमिका है। डिफ़ॉल्ट वर्तमान में उपयोगकर्ता में लॉग इन है।
मथायस क्रुल

8

5
@ यहां AlikElzin-kilaka -aकी जरूरत नहीं है। यह "सभी गैर
रिक्त

यह स्वीकृत उत्तर होना चाहिए।
कोस्तनोस

316

आपको इसे इस तरह करना चाहिए:

\i path_to_sql_file

देख:

यहां छवि विवरण दर्ज करें


2
मुझे मिलता हैPermission denied
Zac

4
chmod 777 myfileत्रुटि Permission deniedतय करने के बाद
उलुगबेक रो'ज़िम्बोएव

5
@Zac यदि आपकी अनुमति से इनकार कर दिया है एक विंडोज़ मशीन पर, आप गलत स्लैश का उपयोग कर सकते हैं।
pgsandstrom

2
मेरे पास विंडोज़ पर यह त्रुटि थी और यह स्लैश निकला, जैसा कि @pgsandstrom ने उल्लेख किया है। गलत स्लैश = बजाय आगे स्लैश का उपयोग करें, और पथ पर कोई उद्धरण नहीं। \ ic: /dev/script.sql
डेव

50

PostgreSQL सर्वर एक अंतर स्थान पर स्थित है जब * .sql फ़ाइलों को निष्पादित करने के लिए इसका उपयोग करें:

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

फिर आपको उपयोगकर्ता का पासवर्ड दर्ज करने के लिए कहा जाता है।

EDIT: @zwacky द्वारा प्रदान की गई टिप्पणी के आधार पर अपडेट किया गया


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
psql -h <host> -d <database> -U <user_name> -p <port> -a -q -w -f <file> .sql
vishu9219

3
@ Lu32 आप फ्लैग-ए भी छोड़ सकते हैं (जिसका अर्थ है "सभी गैर-रिक्त इनपुट लाइनों को मानक आउटपुट पर प्रिंट करें क्योंकि वे पढ़े जाते हैं")। EDIT ने परीक्षण किया, बिना -a यह कम प्रिंट करता है, लेकिन फिर भी बहुत अधिक जानकारी। तो -q झंडा सही है, जैसा कि vishu9219 ने कहा।
रौनी लिलेमेट्स

41

यदि आप लिनक्स शेल में psql में लॉग इन हैं तो कमांड है:

\i fileName.sql

एक निरपेक्ष मार्ग के लिए और

\ir filename.sql

जहाँ आप psql कहा जाता है से रिश्तेदार पथ के लिए।


जैसा कि @Florian कहता है, एक बार लॉग इन करने पर आप किसी फ़ाइल को निष्पादित कर सकते हैं। अपनी एसक्यूएल में किसी भी टिप्पणी लाइनों को या तो दो तरीकों से चिह्नित करना याद रखें ... - लाइन के अंत में टिप्पणी क) - एक लाइन टिप्पणी या बी) / * कई लाइन टिप्पणियां * /
सुमित एस

26

अपने डेटाबेस पर टर्मिनल लॉग इन करें और यह प्रयास करें:

database-# >@pathof_mysqlfile.sql

या

database-#>-i pathof_mysqlfile.sql

या

database-#>-c pathof_mysqlfile.sql

यह समाधान मेरे लिए अधिक ठोस है; नहीं एक के रूप में चिह्नित answe
एलेक्स

16

आप कमांड लाइन पर ही उपयोगकर्ता का नाम और PASSSWORD दोनों दे सकते हैं।

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

यह काम करता है यदि आप पर्यावरण चर सेट नहीं करना चाहते हैं या अजीब पास फ़ाइलों का उपयोग करना चाहते हैं। =)
मार्टिन

13

आप इसे इस तरह से भी कर सकते हैं:

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

यदि आपके पास sudoमशीन पर पहुंच है और यह उत्पादन स्क्रिप्ट के लिए अनुशंसित नहीं है, तो केवल अपनी मशीन पर परीक्षण के लिए यह सबसे आसान तरीका है।


9

लिनक्स में PostgreSQL के लिए कमांड लाइन पर एसक्यूएल चलाने के तरीके पर चलें:

एक टर्मिनल खोलें और सुनिश्चित करें कि आप psqlकमांड चला सकते हैं :

psql --version
which psql

मेरा संस्करण 9.1.6 में स्थित है /bin/psql

नामक एक सादा टेक्स्टफाइल बनाएं mysqlfile.sql

उस फ़ाइल को संपादित करें, वहां एक भी लाइन लगाएं:

select * from mytable;

इस आदेश को कमांडलाइन पर चलाएं (अपने उपयोगकर्ता नाम और pgadmin और kurz_prod के लिए अपने डेटाबेस का नाम):

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

निम्नलिखित परिणाम मुझे टर्मिनल पर मिलता है (मैं पासवर्ड के लिए प्रेरित नहीं हूं):

select * from mytable;

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

(2 rows)

आप उपयोगकर्ता कैसे सेट करते हैं? यह एक नई .sql फ़ाइल पर पहली बार स्थापित करने और चलाने के लिए है। हमेशा गलत पासवर्ड कहता है
mKane

4

आप कमांड प्रॉम्प्ट खोल सकते हैं और व्यवस्थापक के रूप में चला सकते हैं। फिर टाइप करें

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

Password for user postgres: दिखा देंगे।

अपना पासवर्ड टाइप करें और एंटर करें। मैं पासवर्ड नहीं देख सकता था कि मैं क्या टाइप कर रहा था, लेकिन इस बार जब मैं प्रेस करता हूं तो यह काम करता है। वास्तव में मैं डेटाबेस में डेटा लोड कर रहा था।


मुझे लगता है कि आपका मतलब है-d "postgres"
amphetamachine

@amphetamachine -d डेटाबेस नाम के लिए, जाँचpsql --help
Yaz

1

मैंने लिखा कि मेरी स्क्रिप्ट कहाँ है (निर्देशिका में स्थित है)

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

-u user वह भूमिका कहां है जो उस डेटाबेस का मालिक है जहां मैं स्क्रिप्ट निष्पादित करना चाहता हूं, उसके बाद कंसोल से psqlजुड़ता है, आखिरकार मुझे लोड करता है जहां स्क्रिप्ट से सभी इनपुट को प्रतिध्वनित करता है और में से कमांड निष्पादित करता है , फिर बाहर निकलें।psql-d my_databasemydatabase-a -f file.sql-a-ffile.sqlmydatabase

मैं उपयोग कर रहा हूँ: psql (PostgreSQL) 10.12 पर (Ubuntu 10.12-0ubuntu0.18.04.1)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.