sql को पुनर्स्थापित करते समय psql अमान्य कमांड \ N


137

मैं अपनी डंप फ़ाइल को पुनर्स्थापित करने का प्रयास कर रहा हूं, लेकिन इससे त्रुटि हुई:

psql:psit.sql:27485: invalid command \N

क्या कोई हल है? मैंने खोज की, लेकिन मुझे स्पष्ट उत्तर नहीं मिला।

जवाबों:


198

Postgres NULL मान के लिए विकल्प के रूप में "\ N" का उपयोग करता है। लेकिन सभी psql कमांड backslash "" प्रतीक द्वारा शुरू होता है। तो आप यह संदेश प्राप्त कर सकते हैं, जब संभवत: कॉपी स्टेटमेंट विफल हो जाता है, लेकिन डंप का लोड जारी रहता है। यह संदेश केवल गलत अलार्म है। COPY स्टेटमेंट विफल होने के कारण से पहले आपको एक लाइन खोजनी होगी।

Psql को "पहली त्रुटि पर रोकना" मोड में और त्रुटि खोजने के लिए स्विच करना संभव है:

psql -v ON_ERROR_STOP=1

7
हां, इन अवैध कमांड त्रुटियों की संख्या के रूप में करने के लिए एक बहुत, बहुत आसान गलती बहुत बड़ी हो सकती है पूरी तरह से पहली त्रुटि को जल्द से जल्द पूरा करना।
क्राउनग्म्बुम्ब

5
इस तरह की भ्रामक चेतावनी देने के लिए PostgreSQL से काफी बुराई है, आपके जवाब ने मुझे बहुत समय बचा लिया!
Tregoreg

50
@Tregoreg - हाँ, यह अनुकूल नहीं है - आप psql को "पहले त्रुटि पर रोकें" मोड में चला सकते हैं। यह निदान को आसान बनाता है "psql -v ON_ERROR_STOP = 1"
Pavel Stehule

2
तब हो सकता है जब उदा create table...शुरू में विफल रहता है, लेकिन लोडिंग जारी है।
जाकल

1
मैं उसी त्रुटि के कारण यहां आया था। मुझे जो पता लगा वह करना था: (pg_restore ... | psql ...) 2>&1 | less
THK

33

बाइनरी डंप से पुनर्स्थापित करने का प्रयास करते समय मैं एक ही त्रुटि संदेश जाता हूं। मैं बस pg_restoreअपने डंप को पुनर्स्थापित करता था और पूरी तरह से \Nत्रुटियों से बचता था , जैसे

pg_restore -c -F t -f your.backup.tar

स्विच का स्पष्टीकरण:

-f, --file=FILENAME output file name -F, --format=c|d|t backup file format (should be automatic) -c, --clean clean (drop) database objects before recreating


बहुत कम सीपीयू उपयोग, है ना?
20

15

मुझे पता है कि यह एक पुरानी पोस्ट है, लेकिन मैं एक और समाधान में आया: पोस्टगिस मेरे नए संस्करण पर स्थापित नहीं किया गया था, जिससे मुझे pg_dump पर एक ही त्रुटि हुई


1
क्या जीवन बचाने वाला!
matmat

8

मैं अतीत में भी इस त्रुटि में भाग चुका हूं। पावेल सही है, यह आमतौर पर एक संकेत है कि pg_restore द्वारा बनाई गई स्क्रिप्ट में कुछ विफल हो रहा है। सभी "/ N" त्रुटियों के कारण, आप आउटपुट के शीर्ष पर वास्तविक समस्या नहीं देख रहे हैं। मैं सुझाव देता हूँ:

  1. एकल, छोटी तालिका (जैसे pg_restore --table=orders full_database.dump > orders.dump) सम्मिलित करना
  2. यदि आपके पास एक छोटा सा नहीं है, तो पुनर्स्थापना स्क्रिप्ट में से रिकॉर्ड का एक गुच्छा हटा दें - मैंने अभी सुनिश्चित किया है। /। लोड होने की अंतिम पंक्ति थी (जैसे, orders.dumpरिकॉर्ड का एक गुच्छा हटाएं और खोलें )
  3. मानक आउटपुट देखें, और एक बार समस्या का पता चलने पर, आप हमेशा तालिका को छोड़ सकते हैं और पुनः लोड कर सकते हैं

मेरे मामले में, मेरे पास अभी तक "hstore" एक्सटेंशन स्थापित नहीं था, इसलिए स्क्रिप्ट बहुत ऊपर से विफल हो रही थी। मैंने गंतव्य डेटाबेस पर hstore स्थापित किया, और मैं व्यवसाय में वापस आ गया।


"मेरे पास" hstore "एक्सटेंशन अभी तक स्थापित नहीं है", TNX।
अरश फतहजादे


4

Postgresql- (आपके संस्करण) -postgis- स्क्रिप्ट स्थापित करें


4

आज मेरे साथ भी वही हुआ। मैं --inserts कमांड के साथ डंपिंग कर मुद्दे को हैंडल करता हूं।

मैं क्या कर रहा हूँ:

1) आवेषण के साथ pg_dump:

pg_dump dbname --username=usernamehere --password --no-owner --no-privileges --data-only --inserts -t 'schema."Table"' > filename.sql

2) psql (अपनी डंप की गई फ़ाइल को पुनर्स्थापित करें)

psql "dbname=dbnamehere options=--search_path=schemaname" --host hostnamehere --username=usernamehere -f filename.sql >& outputfile.txt

नोट -1) सुनिश्चित करें कि outputfile जोड़ने से आयात की गति बढ़ जाएगी।

नोट -2) Psql के साथ आयात करने से पहले ठीक उसी नाम और कॉलम के साथ तालिका बनाना न भूलें।


2

मेरे हाल के अनुभव में, यह त्रुटि तब संभव है जब वास्तविक समस्या का भागने के पात्रों या नई कहानियों से कोई लेना-देना नहीं है। मेरे मामले में, मैंने डेटाबेस ए के साथ एक डंप बनाया
pg_dump -a -t table_name > dump.sql
था और इसे डेटाबेस बी के साथ पुनर्स्थापित करने की कोशिश कर रहा था
psql < dump.sql(उचित ईएनवी संस्करण को अपडेट करने के बाद, निश्चित रूप से)
मुझे आखिरकार पता चला कि यह डंप था, हालांकि यह data-only( -aविकल्प था) , ताकि टेबल संरचना स्पष्ट रूप से डंप का हिस्सा नहीं है), स्कीमा-विशिष्ट था। इसका मतलब था कि मैन्युअल रूप से डंप को संशोधित किए बिना, मैं schema1.table_nameपॉप्युलेट से उत्पन्न डंप का उपयोग नहीं कर सकता था schema2.table_name। डंप को मैन्युअल रूप से संशोधित करना आसान था, स्कीमा पहले 15 लाइनों या तो में निर्दिष्ट है।


1

ज्यादातर बार, समाधान postgres-contribपैकेज स्थापित करना है।


0

मेरे लिए SUSE 12 पर postgreSQL 10 का उपयोग करके, मैंने invalid command \Nडिस्क स्थान बढ़ाकर त्रुटि को हल किया । डिस्क स्थान की कमी मेरे लिए त्रुटि पैदा कर रही थी। आप बता सकते हैं कि क्या आप डिस्क स्थान से बाहर हैं यदि आप फ़ाइल सिस्टम को देखते हैं तो आपका डेटा df -hआउटपुट में जा रहा है । यदि फ़ाइल सिस्टम / माउंट 100% उपयोग में है, तो कुछ करने के बाद psql -f db.out postgres(देखें https://www.postgresql.org/docs/current/static/app-pg-dumpall.html ) आपको डिस्क स्थान उपलब्ध होने की संभावना है ।


0

मुझे एक ही समस्या थी, मैंने एक नया डेटाबेस बनाया और invalid command \Npsql के साथ पुनर्स्थापित किया। मैंने पुराने डेटाबेस के साथ एक ही टेबलस्पेस सेट करके इसे हल किया।

उदाहरण के लिए, पुराने डेटाबेस बैकअप में टेबलस्पेस "pg_default" था, मैंने उसी डेटाबेस को नए डेटाबेस में परिभाषित किया, और उपरोक्त त्रुटि हो गई!


0

मैंने इन सभी उदाहरणों का अनुसरण किया और वे सभी त्रुटि के साथ विफल हुए जिनके बारे में हम बात कर रहे हैं:

Postgres में एक डेटाबेस से दूसरे में टेबल कॉपी करें

क्या काम के साथ वाक्य रचना -C था , यहाँ देखें:

pg_dump -C -t tableName "postgres://$User:$Password@$Host:$Port/$DBName" | psql "postgres://$User:$Password@$Host:$Port/$DBName"

इसके अलावा अगर दोनों के बीच अलग-अलग स्कीमें हैं, तो मुझे लगता है कि एक डीबी के स्कीमा को बदलने के लिए दूसरों को मिलान करने के लिए टेबल की प्रतियां काम करने के लिए आवश्यक हैं, जैसे:

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