psql অবৈধ কমান্ড \ N এসকিএল পুনরুদ্ধার করার সময়


137

আমি আমার ডাম্প ফাইলটি পুনরুদ্ধার করার চেষ্টা করছি তবে এটির ফলে একটি ত্রুটি হয়েছে:

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

একটি সমাধান আছে কি? আমি অনুসন্ধান করেছি, কিন্তু আমি এর স্পষ্ট উত্তর পাইনি।

উত্তর:


198

পোস্টগ্রিস নুল মানটির বিকল্প প্রতীক হিসাবে "\ N" ব্যবহার করে। তবে সমস্ত পিএসকিএল কমান্ড ব্যাকস্ল্যাশ "\" প্রতীক দ্বারা শুরু হয়। সুতরাং আপনি এই বার্তাগুলি পেতে পারেন, যখন সম্ভবত অনুলিপি বিবৃতি ব্যর্থ হয় তবে ডাম্প লোড করা অবিরত থাকে। এই বার্তাটি শুধুমাত্র ভুয়া অ্যালার্ম। কপি বিবৃতি ব্যর্থ হওয়ার কারণে আপনাকে আগে একটি লাইন অনুসন্ধান করতে হবে।

"প্রথম ত্রুটি বন্ধ করুন" মোডে এবং ত্রুটিটি খুঁজে পেতে পিএসকিএল স্যুইচ করা সম্ভব:

psql -v ON_ERROR_STOP=1

7
হ্যাঁ, এই অবৈধ কমান্ড ত্রুটির সংখ্যা হিসাবে তৈরি করার একটি খুব, খুব সহজ ভুলটি খুব প্রথম হতে পারে প্রথম প্রথম ত্রুটিটিকে আঘাত করার বিষয়টি পুরোপুরি অস্পষ্ট করে।
ক্যারোম্যাগম্বম্ব

5
পোস্টগ্র্রেএসকিউএল থেকে এ জাতীয় বিভ্রান্তিকর সতর্কতা দেওয়া বেশ খারাপ, আপনার উত্তর আমাকে অনেক সময় বাঁচিয়েছিল!
ট্রেগোরেগ

50
@ ট্রেগোরেগ - হ্যাঁ, এটি বন্ধুত্বপূর্ণ নয় - আপনি "প্রথম ত্রুটি বন্ধ করুন" মোডে পিএসকিএল চালাতে পারেন। এটি "পিএসকিএল-ভি ওএন_আরআরআরপিওপিপি = 1" ডায়াগনস্টিক্সকে সহজতর করে
পাভেল স্টিহুল

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


সিপিইউ ব্যবহার অনেক কম, তাই না?
ক্যাটবাজার

15

আমি জানি এটি একটি পুরানো পোস্ট তবে আমি আরও একটি সমাধান পেয়েছি: পোস্টগিসটি আমার নতুন সংস্করণে ইনস্টল করা হয়নি, যা আমাকে পিজি_ডম্পে একই ত্রুটির কারণ করেছিল


1
কী জীবন রক্ষাকারী!
ম্যাচ্যাট

8

আমি অতীতেও এই ত্রুটিটি চালিয়েছি। পাভেল সঠিক, এটি সাধারণত একটি চিহ্ন যে পিজি_রেস্টোর দ্বারা নির্মিত স্ক্রিপ্টের কিছু ব্যর্থ হচ্ছে। সমস্ত "/ এন" ত্রুটির কারণে আপনি আউটপুটটির একেবারে শীর্ষে আসল সমস্যাটি দেখছেন না। আমার পরামর্শ:

  1. একটি একক, ছোট টেবিল সন্নিবেশ করা (যেমন, pg_restore --table=orders full_database.dump > orders.dump)
  2. আপনার যদি একটি ছোট না থাকে, তবে পুনরুদ্ধার স্ক্রিপ্টের বাইরে একগুচ্ছ রেকর্ড মুছুন - আমি কেবল নিশ্চিত করেছিলাম যে ./টি লোড হওয়ার শেষ সারিটি ছিল (উদাঃ উন্মুক্ত) orders.dump রেকর্ডগুলির একটি গুচ্ছটি এবং মুছুন)
  3. স্ট্যান্ডার্ড আউটপুট দেখুন, এবং একবার আপনি সমস্যাটি খুঁজে পেলে, আপনি সর্বদা টেবিলটি ফেলে রেখে পুনরায় লোড করতে পারেন

আমার ক্ষেত্রে, আমার কাছে এখনও "hstore" এক্সটেনশন ইনস্টল করা হয়নি, সুতরাং স্ক্রিপ্টটি একেবারে শীর্ষে ব্যর্থ হয়েছিল। আমি গন্তব্য ডেটাবেজে hstore ইনস্টল করেছি এবং আমি আবার ব্যবসায়ে ফিরে এসেছি।


"টিএনএক্স," আমার কাছে "hstore" এক্সটেনশনটি এখনও ইনস্টল করা হয়নি "।
আরশ ফাতাহজাদে

7

আপনি ইনসার্টস স্টেটমেন্ট ব্যবহার করে আপনার ডাম্প জেনারেট করতে পারবেন - ইনসার্ট প্যারামিটার দিয়ে।


2
এটি আমার পক্ষে কাজ করে! pg_dump --inserts $ DATABASE> $ ফাইল ফাইল
আবেল

4

Postgresql- (আপনার সংস্করণ) -পোস্টগিস-স্ক্রিপ্ট ইনস্টল করুন


4

আমার ক্ষেত্রেও আজ একই ঘটনা ঘটেছিল। --Inserts কমান্ড দিয়ে ডাম্প করে ইস্যু পরিচালনা করেছি।

আমি যা করি তা হ'ল:

1) সন্নিবেশ সহ পিজি_ডাম্প:

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

2) পিএসকিএল (আপনার ডাম্প করা ফাইল পুনরুদ্ধার করুন)

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

দ্রষ্টব্য -১) নিশ্চিত করুন যে আউটপুটফাইল যুক্ত করা আমদানির গতি বাড়িয়ে দেবে।

নোট -২) পিএসএকএল দিয়ে আমদানির আগে ঠিক একই নাম এবং কলামগুলির সাথে সারণী তৈরি করতে ভুলবেন না।


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

সুস 12 এ পোস্টগ্রিএসকিউএল 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 \Nপিএসএইচএল দিয়ে পুনরুদ্ধার করেছি। পুরানো ডাটাবেসের সাথে একই টেবিলস্পেস সেট করে সমাধান করেছি।

উদাহরণস্বরূপ, পুরানো ডাটাবেস ব্যাকআপের টেবিল স্পেস ছিল "pg_default", আমি একই ডাটাবেসটিকে নতুন ডাটাবেসে সংজ্ঞায়িত করেছি এবং উপরের ত্রুটিটি চলে গেছে!


0

আমি এই সমস্ত উদাহরণ অনুসরণ করেছি এবং তারা সকলে আমরা যে ত্রুটি সম্পর্কে কথা বলছি তাতে ব্যর্থ হয়েছিল:

পোস্টগ্রিসে অন্য একটি ডাটাবেস থেকে একটি টেবিল অনুলিপি করুন

সি-এর সাথে সিনট্যাক্সটি কী কাজ করেছিল তা এখানে দেখুন:

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