pg_restore - ক্রিয়েটকে কেন উপেক্ষা করে? ত্রুটি: ব্যর্থ: FATAL: ডাটাবেস "new_db" বিদ্যমান নেই


16

আমি নিম্নলিখিত কমান্ড চালানোর চেষ্টা করছি:

sshpass  -p "pass" ssh  x@1.2.3.4 "pg_dump -Fc -U foo some_db" | pg_restore --create --dbname=new_db

আমি পাই:

failed: FATAL:  database "new_db" does not exist

উত্তর:


19

এটি কারণ pg_restore কাজ করে।

pg_restore ম্যানুয়ালটি নীচের হিসাবে পড়ুন:

-C, --create ডাটাবেসে পুনরুদ্ধার করার আগে এটি তৈরি করুন। যদি - ক্ল্যানটিও নির্দিষ্ট করা থাকে তবে লক্ষ্যযুক্ত ডাটাবেসটি সংযুক্ত হওয়ার আগে এটি ড্রপ করে পুনরায় তৈরি করুন।

এই বিকল্পটি ব্যবহার করা হলে, -d নামের ডাটাবেসটি কেবলমাত্র প্রাথমিক DROP DATABASE এবং CREATE DATABASE কমান্ড জারি করতে ব্যবহৃত হয়সংরক্ষণাগারে প্রদর্শিত ডাটাবেসের নামটিতে সমস্ত ডেটা পুনরুদ্ধার করা হয়েছে

-D প্রদত্ত ডাটাবেসে পুনরুদ্ধার করবে যদি এবং কেবল -C ব্যবহার না করা হয়। যদি-সি ব্যবহার করা হয় তবে ডেটাবেসটি "লঞ্চপ্যাড" হিসাবে ব্যবহার করা হবে, গন্তব্য হিসাবে নয়।


6
স্পষ্ট করার জন্য: একটি স্বেচ্ছাসেবী ডাটাবেসের নাম তৈরি করে এটি দিয়ে পুনরায় পুনরুদ্ধার করার কোনও উপায় নেই pg_restore। -সি বিকল্পটি কেবল একটি ডাটাবেস তৈরি করতে পারে যার নাম ডাম্প ফাইলে ডাটাবেসের নামের সাথে মেলে। একটি স্বেচ্ছাসেবক ডাটাবেস পুনরুদ্ধার করতে, আপনি চালানোর CREATE DATABASE new_db;আগে আপনাকে পিএসকিএল চালাতে হবে pg_restore --dbname=new_db
লুক

আমার আদেশdocker-compose -p dump_import -f docker/dump_import.yml run --rm be bash -c 'waitforit -host=postgres -port=5432 -timeout=30 && export PGPASSWORD=$DATABASE_PASSWORD && createdb --echo --port=$DATABASE_PORT -host=$DATABASE_HOST --username=$DATABASE_USER $DATABASE_NAME && pg_restore --format=c --dbname=$DATABASE_URL_WITHOUT_QUERY tmp/full.dump && echo "Import done"'
srghma

5
সরঞ্জামগুলি যখন সহজ হতে পারে তখন কেন বিভ্রান্তিকর হতে হবে?
অগস্টিন রিডিংগার 16'19

8

সংক্ষেপে, আপনি যে কোনওটি চান (বিদ্যমানটি পরিষ্কার করুন): (ডাটাবেসের নামটি নোট করুন postgres)

pg_restore -c -d postgres db.dump

বা (নতুন তৈরি)

pg_restore -C -d postgres db.dump

বা (স্পষ্টভাবে নতুন তৈরি করুন)

createdatabase the_database
pg_restore -d the_database db.dump

আরও তথ্যের জন্য এসসিও কী বলেছিল তা দেখুন।


আপনার প্রথম পরামর্শটি 9.1 এ কার্যকর হয়নি:pg_restore: [archiver] -C and -c are incompatible options
পিটসান

আমি নিশ্চিত করতে পারি যে এটি (সম্পাদনার পরে এবং "পোস্টগ্রিস"-এর ভুল বানান ঠিক করার পরে) কাজ করে। pg_restore -C -d postgres db.dumpভয়াবহ লাগতে পারে তবে পোস্টগ্রিস ডাটাবেসে এটি কিছুই করে না, এটি কেবল এটি প্রাথমিক সংযোগের জন্য ব্যবহার করে।
জিলক

0

কিছুটা স্পষ্ট করে বলতে গেলে, এটিই আমি করলাম যা আমার জন্য সমস্যার সমাধান করেছিল:

  1. আপনি যে নামটি চান তার সাথে একটি খালি ডাটাবেস তৈরি করুন: (আমার ক্ষেত্রে ব্যবহারকারীর নামটি 'পোস্টগ্রিস' ছিল)

    psql -U [username]

এটি আপনাকে আপনার পাসওয়ার্ডের জন্য অনুরোধ করবে। এই মুহুর্তে আপনি [ব্যবহারকারীর নাম] হিসাবে লগ ইন করা হবে। নিম্নলিখিত টাইপ করুন:

    CREATE DATABASE [dbname];

এখন সেশনটি থেকে প্রস্থান করুন এবং আপনার নিয়মিত টার্মিনাল সেশনে ফিরে যান।

  1. আপনি সবেমাত্র তৈরি করা ডাটাবেসের নাম হিসাবে আপনি যে টার্গেট ডাটাবেসের নাম সেট করেছেন সেটি ফাইল থেকে ডাটাবেস পুনরুদ্ধার করুন।

    cat [your_file_path/filename] | psql -U [username] [dbname]

[[Your_file_path / filename]] যেখানে আপনি পুনরুদ্ধার করতে চান ডিবি ফাইল বা পাঠ্য ফাইলের অবস্থান।


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