जवाबों:
ऐसा इसलिए है क्योंकि यह जिस तरह से pg_restore काम करता है।
pg_restore मैनुअल निम्नानुसार पढ़ता है:
-C, --create इसमें रिस्टोर करने से पहले डेटाबेस बनाएं। यदि --clean भी निर्दिष्ट है, तो इसे जोड़ने से पहले लक्ष्य डेटाबेस को छोड़ें और पुन: बनाएँ।
जब इस विकल्प का उपयोग किया जाता है, तो -d नाम के डेटाबेस का उपयोग केवल प्रारंभिक DROP DATABASE और CREATE DATABASE आदेश जारी करने के लिए किया जाता है । सभी डेटा को डेटाबेस नाम में संग्रहीत किया जाता है जो संग्रह में दिखाई देता है ।
-D दिए गए डेटाबेस में पुनर्स्थापित करेगा यदि और केवल अगर -सी का उपयोग नहीं किया जाता है। यदि -सी का उपयोग किया जाता है, तो डेटाबेस का उपयोग "लॉन्चपैड" के रूप में किया जाता है, गंतव्य के रूप में नहीं।
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"'
संक्षेप में, आप या तो (स्वच्छ मौजूदा) चाहते हैं: (डेटाबेस का नाम नोट करें 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
अधिक विवरण के लिए देखें कि SCO ने क्या कहा।
pg_restore: [archiver] -C and -c are incompatible options
pg_restore -C -d postgres db.dump
डरावना लग सकता है, लेकिन यह डेटाबेस को स्थगित करने के लिए कुछ भी नहीं करता है, यह केवल प्रारंभिक कनेक्शन के लिए इसका उपयोग करता है।
थोड़ा और स्पष्ट होने के लिए, यह वही है जो मैंने किया था जो मेरे लिए समस्या का समाधान करता है:
इच्छित नाम के साथ एक खाली डेटाबेस बनाएं: (मेरे मामले में उपयोगकर्ता नाम 'पोस्टग्रेज' था)
psql -U [username]
यह तब आपको अपने पासवर्ड के लिए संकेत देगा। इस बिंदु पर आपको [उपयोगकर्ता नाम] के रूप में लॉग इन किया जाएगा। निम्नलिखित टाइप करें:
CREATE DATABASE [dbname];
अब सत्र से बाहर निकलें और अपने नियमित टर्मिनल सत्र पर वापस जाएं।
आपके द्वारा बनाए गए लक्ष्य डेटाबेस नाम को उस डेटाबेस के नाम के रूप में डेटाबेस से पुनर्स्थापित करें, जिसे आपने अभी बनाया था।
cat [your_file_path/filename] | psql -U [username] [dbname]
जहां [your_file_path / फ़ाइल नाम] db फ़ाइल या पाठ फ़ाइल का स्थान है जिसे आप पुनर्स्थापित करना चाहते हैं।
-F
विकल्प का उपयोग करके बैकअप बनाते समय आपको बैकअप को पुनर्स्थापित करने के लिए pg_restore का उपयोग करना होगा जब तक कि आप उपयोग न करें -F p
जो वर्ग वाक्य के साथ एक सादे पाठ फ़ाइल का उत्पादन करता है।
pg_restore
। -सी विकल्प केवल एक डेटाबेस बना सकता है जिसका नाम डंप फ़ाइल में डेटाबेस के नाम से मेल खाता है। एक मनमाना डेटाबेस को पुनर्स्थापित करने के लिए, आपको चलानेCREATE DATABASE new_db;
से पहले psql में चलना होगाpg_restore --dbname=new_db
।