আমি আমার ডাম্প ফাইলটি পুনরুদ্ধার করার চেষ্টা করছি তবে এটির ফলে একটি ত্রুটি হয়েছে:
psql:psit.sql:27485: invalid command \N
একটি সমাধান আছে কি? আমি অনুসন্ধান করেছি, কিন্তু আমি এর স্পষ্ট উত্তর পাইনি।
আমি আমার ডাম্প ফাইলটি পুনরুদ্ধার করার চেষ্টা করছি তবে এটির ফলে একটি ত্রুটি হয়েছে:
psql:psit.sql:27485: invalid command \N
একটি সমাধান আছে কি? আমি অনুসন্ধান করেছি, কিন্তু আমি এর স্পষ্ট উত্তর পাইনি।
উত্তর:
পোস্টগ্রিস নুল মানটির বিকল্প প্রতীক হিসাবে "\ N" ব্যবহার করে। তবে সমস্ত পিএসকিএল কমান্ড ব্যাকস্ল্যাশ "\" প্রতীক দ্বারা শুরু হয়। সুতরাং আপনি এই বার্তাগুলি পেতে পারেন, যখন সম্ভবত অনুলিপি বিবৃতি ব্যর্থ হয় তবে ডাম্প লোড করা অবিরত থাকে। এই বার্তাটি শুধুমাত্র ভুয়া অ্যালার্ম। কপি বিবৃতি ব্যর্থ হওয়ার কারণে আপনাকে আগে একটি লাইন অনুসন্ধান করতে হবে।
"প্রথম ত্রুটি বন্ধ করুন" মোডে এবং ত্রুটিটি খুঁজে পেতে পিএসকিএল স্যুইচ করা সম্ভব:
psql -v ON_ERROR_STOP=1
create table...
শুরুতে ব্যর্থ হলে ঘটতে পারে তবে লোডিং অব্যাহত থাকে।
(pg_restore ... | psql ...) 2>&1 | less
বাইনারি ডাম্প থেকে পুনরুদ্ধার করার চেষ্টা করার সময় আমি একই ত্রুটি বার্তায় যাই। আমি কেবল 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
আমি অতীতেও এই ত্রুটিটি চালিয়েছি। পাভেল সঠিক, এটি সাধারণত একটি চিহ্ন যে পিজি_রেস্টোর দ্বারা নির্মিত স্ক্রিপ্টের কিছু ব্যর্থ হচ্ছে। সমস্ত "/ এন" ত্রুটির কারণে আপনি আউটপুটটির একেবারে শীর্ষে আসল সমস্যাটি দেখছেন না। আমার পরামর্শ:
pg_restore
--table=orders full_database.dump > orders.dump
)orders.dump
রেকর্ডগুলির একটি গুচ্ছটি এবং মুছুন)আমার ক্ষেত্রে, আমার কাছে এখনও "hstore" এক্সটেনশন ইনস্টল করা হয়নি, সুতরাং স্ক্রিপ্টটি একেবারে শীর্ষে ব্যর্থ হয়েছিল। আমি গন্তব্য ডেটাবেজে hstore ইনস্টল করেছি এবং আমি আবার ব্যবসায়ে ফিরে এসেছি।
আপনি ইনসার্টস স্টেটমেন্ট ব্যবহার করে আপনার ডাম্প জেনারেট করতে পারবেন - ইনসার্ট প্যারামিটার দিয়ে।
আমার ক্ষেত্রেও আজ একই ঘটনা ঘটেছিল। --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
দ্রষ্টব্য -১) নিশ্চিত করুন যে আউটপুটফাইল যুক্ত করা আমদানির গতি বাড়িয়ে দেবে।
নোট -২) পিএসএকএল দিয়ে আমদানির আগে ঠিক একই নাম এবং কলামগুলির সাথে সারণী তৈরি করতে ভুলবেন না।
আমার সাম্প্রতিক অভিজ্ঞতায়, আসল সমস্যাটির সাথে পালানোর চরিত্র বা নিউলাইনগুলির সাথে কোনও সম্পর্ক না থাকলে এই ত্রুটি পাওয়া সম্ভব। আমার ক্ষেত্রে, আমি ডাটাবেস এ দিয়ে একটি ডাম্প তৈরি করেছিলাম
pg_dump -a -t table_name > dump.sql
এবং এটি ডাটাবেস বি-তে পুনরুদ্ধার করার চেষ্টা করছিলাম
psql < dump.sql
(যথাযথ এনভ ভার্সগুলি আপডেট করার পরে অবশ্যই)
আমি যা আবিষ্কার করেছি তা হ'ল ডাম্প, যদিও এটি ছিল data-only
( -a
বিকল্প) , যাতে সারণি কাঠামো স্পষ্টভাবে ডাম্পের অংশ না হয়), ছিল স্কিমা-নির্দিষ্ট। যে অর্থ ছিল নিজ হাতে ডাম্প পরিবর্তন ছাড়া, আমি থেকে উত্পন্ন একটি ডাম্প ব্যবহার করতে পারছিল না schema1.table_name
নিয়ে আসতে ' schema2.table_name
। নিজেই ডাম্পটি সংশোধন করা সহজ ছিল, স্কিমাটি প্রথম 15 লাইনগুলিতে নির্দিষ্ট করা হয়েছে।
সুস 12 এ পোস্টগ্রিএসকিউএল 10 ব্যবহার করার জন্য, আমি invalid command \N
ডিস্কের স্থান বাড়িয়ে ত্রুটিটি সমাধান করেছি । ডিস্কের জায়গার অভাবে আমার জন্য ত্রুটি ঘটছিল। আপনি যদি বলতে পারেন যে আপনি যদি ডিস্কের জায়গার বাইরে থাকেন তবে আপনি যদি ফাইল ডেটা df -h
আউটপুটে যাচ্ছেন তার দিকে তাকান । যদি ফাইল সিস্টেম / মাউন্ট 100% ব্যবহার করা হয় তবে এর মতো কিছু করার পরে psql -f db.out postgres
( https://www.postgresql.org/docs/current/static/app-pg-dumpall.html দেখুন ) আপনার সম্ভবত উপলব্ধ ডিস্কের স্থান বাড়াতে হবে ।
আমার একই সমস্যা ছিল, আমি একটি নতুন ডাটাবেস তৈরি করেছি এবং invalid command \N
পিএসএইচএল দিয়ে পুনরুদ্ধার করেছি। পুরানো ডাটাবেসের সাথে একই টেবিলস্পেস সেট করে সমাধান করেছি।
উদাহরণস্বরূপ, পুরানো ডাটাবেস ব্যাকআপের টেবিল স্পেস ছিল "pg_default", আমি একই ডাটাবেসটিকে নতুন ডাটাবেসে সংজ্ঞায়িত করেছি এবং উপরের ত্রুটিটি চলে গেছে!
আমি এই সমস্ত উদাহরণ অনুসরণ করেছি এবং তারা সকলে আমরা যে ত্রুটি সম্পর্কে কথা বলছি তাতে ব্যর্থ হয়েছিল:
পোস্টগ্রিসে অন্য একটি ডাটাবেস থেকে একটি টেবিল অনুলিপি করুন
সি-এর সাথে সিনট্যাক্সটি কী কাজ করেছিল তা এখানে দেখুন:
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;