पोस्टग्रेज डेटाबेस में सिंगल टेबल का बैकअप कैसे बनाएं?


160

क्या पोस्टग्रेज का उपयोग कर डेटाबेस के भीतर एक एकल तालिका का बैकअप बनाने का एक तरीका है? और कैसे? क्या यह pg_dump कमांड के साथ भी काम करता है?

जवाबों:


211

उपयोग --tableबताने के लिए pg_dumpक्या तालिका यह बैकअप के लिए है:

pg_dump --host localhost --port 5432 --username postgres --format plain --verbose --file "<abstract_file_path>" --table public.tablename dbname

9
और उस बैकअप फ़ाइल को कैसे पुनर्स्थापित करें। (.बैकअप), मैंने इस्तेमाल किया pg_restore --host localhost --port 5432 --username postgres --dbname "anydb" --table public.tablename -Ft --verbose "/path/filename.backup"लेकिन यह सामने आया:pg_restore: [tar archiver] corrupt tar header found in --
एंडरसन डोर्रेगारे लिनारेस

13
psql -U username -d database -1 -f your_dump.sql
रन्नौद

5
आपका क्या मतलब था: abstract_file_path?
बंदुनगेय

3
मुझे यकीन नहीं है कि इस जवाब को वोट क्यों दिया गया था, लोग खुद चीजों का निरीक्षण या कोशिश किए बिना +1 क्लिक करते हैं। इस उत्तर के साथ समस्या, जो इसे पूरी तरह से बेकार बना देती है, यह है कि दिया गया समाधान / आदेश तालिका (प्राथमिक कुंजी) पर बनाए गए अनुक्रम निर्यात नहीं करते हैं, और इसलिए आयात विफल हो जाता है। मुझे कहीं भी एक एकल उत्पादन पीजी डेटाबेस की जानकारी नहीं है जो अनुक्रमों के साथ प्राथमिक कुंजी का उपयोग नहीं करता है। यह आधा उत्तर है, प्रश्न का पूरी तरह से उत्तर देने में विफल रहता है और एकल तालिका को निर्यात / आयात करने के लिए अतिरिक्त कार्य की आवश्यकता होती है।
user10664542

1
इससे थोड़ा अलग सुडो मोड़ के साथ मैं फ़ाइल डंप पर एक अनुमति त्रुटि के साथ समाप्त हो गया (तार्किक पर्याप्त है क्योंकि उपयोगकर्ता पोस्टग्रैज में मेरी निर्देशिकाओं पर पहुंच नहीं है) और मेरे पास एक अज्ञात ध्वज त्रुटि थी --ignore-version। प्रशांत कुमार का जवाब, जो सरल है, मेरे लिए काम कर गया।
JL Peyret

84

यदि आप उबंटू में हैं,

  1. अपने पोस्टग्रेजुएट उपयोगकर्ता को लॉगिन करें sudo su postgres
  2. pg_dump -d <database_name> -t <table_name> > file.sql

सुनिश्चित करें कि आप आदेश जहां क्रियान्वित कर रहे हैं postgresउपयोगकर्ता लिखने की अनुमति (उदाहरण: /tmp)

संपादित करें

यदि आप किसी अन्य कंप्यूटर में .sql को डंप करना चाहते हैं, तो आपको .sql फ़ाइल में सहेजे जा रहे मालिक की जानकारी को छोड़ने पर विचार करना पड़ सकता है।

आप उपयोग कर सकते हैं pg_dump --no-owner -d <database_name> -t <table_name> > file.sql


1
क्या होगा यदि आप सभी तालिकाओं को चाहते हैं, प्रत्येक के नाम को निर्दिष्ट किए बिना?
शेकाइन

3
बस -t विकल्प को हटा दें! pg_dump -d <database_name> > file.sql
श्री हर्ष कप्पाला

4
मुझे नहीं पता कि क्यों -d विकल्प psql9.3 के लिए मान्य नहीं है और दिया गया कमांड मेरे लिए काम नहीं करता है। कार्य करना एक pg_dump -U उपयोगकर्ता नाम db_name -t table_name> fileName है
सीरियन कुकुबबे

pg_dump -t <table_name> <database_name> > file.sql
श्रीराम

@ user10664542: कृपया मैनुअल, विशेष रूप से इस खंड को पढ़ें: "इस उद्देश्य के लिए," तालिका "में विचार, भौतिक विचार, क्रम और विदेशी तालिकाओं को शामिल किया गया है"।
फ्रैंक हाइकेंस

42

pg_dump -h localhost -p 5432 -U postgres -d mydb -t my_table> backup.sql

आप एक ही तालिका का बैकअप ले सकते हैं, लेकिन मैं पूरे डेटाबेस का बैकअप लेने का सुझाव दूंगा और फिर आपको जिस भी तालिका की आवश्यकता होगी, उसे पुनर्स्थापित करना होगा। पूरे डेटाबेस का बैकअप रखना हमेशा अच्छा होता है।

Pg_dump का उपयोग करने के 9 तरीके


मुझे यकीन नहीं है कि इस जवाब को वोट क्यों दिया गया था, लोग खुद चीजों का निरीक्षण या कोशिश किए बिना +1 क्लिक करते हैं। इस उत्तर के साथ समस्या, जो इसे पूरी तरह से बेकार बना देती है, यह है कि दिया गया समाधान / आदेश तालिका (प्राथमिक कुंजी) पर बनाए गए अनुक्रमों का निर्यात नहीं करते हैं, और इसलिए आयात विफल हो जाता है। मुझे कहीं भी एकल उत्पादन पीजी डेटाबेस की जानकारी नहीं है जो अनुक्रमों के साथ प्राथमिक कुंजी का उपयोग नहीं करता है। यह आधा उत्तर है, प्रश्न का पूरी तरह से उत्तर देने में विफल रहता है और एकल तालिका को निर्यात / आयात करने के लिए अतिरिक्त कार्य की आवश्यकता होती है।
user10664542

जैसा कि ऊपर उल्लेख किया गया है, मेरे पास एक मजबूत संदेह उपयोगकर्ता 10664542 है, बिना किसी एसओ ने उसके नाम के उत्तर पोस्ट किए, यहां उसकी गहराई से बाहर है। जब अनुक्रम अतिरिक्त जटिलताएं लाता है, तो पर्याप्त उत्तोलन इसी तरह के उत्तरों पर होते हैं कि लोक शायद उन्हें काम कर रहे थे, भले ही उन्हें तथ्य के बाद अनुक्रम को समायोजित करना पड़ा हो। क्या मुझे अपने डंप को बहाल करना था, मैं max(id)अपनी मेज पर अनुक्रम की अंतिम आईडी को अपडेट करने के तरीकों की तलाश करूंगा। यह वह उत्तर है जिसके लिए मैंने काम किया और मुझे विश्वास है कि उत्पन्न एसक्यूएल को देखते हुए, कि मैं इसे बहाल कर सकता था।
JL Peyret

9

यदि आप एक ग्राफिकल यूजर इंटरफेस पसंद करते हैं, तो आप pgAdmin III (लिनक्स / विंडोज / ओएस एक्स) का उपयोग कर सकते हैं। बस अपनी पसंद की मेज पर राइट क्लिक करें, फिर "बैकअप"। यह आपके लिए एक pg_dumpकमांड बनाएगा ।

यहां छवि विवरण दर्ज करें

यहां छवि विवरण दर्ज करें

यहां छवि विवरण दर्ज करें


2

फ्रैंक हाइकेन के जवाब के अतिरिक्त, यदि आप INSERTइसके बजाय बयानों का उपयोग करना चाहते हैं copy from stdin, तो आपको --insertsध्वज को निर्दिष्ट करना चाहिए

pg_dump --host localhost --port 5432 --username postgres --format plain --verbose --file "<abstract_file_path>" --table public.tablename --inserts dbname

ध्यान दें कि मैंने --ignore-versionध्वज छोड़ दिया है , क्योंकि यह पदावनत है।


मुझे यकीन नहीं है कि इस जवाब को वोट क्यों दिया गया था, लोग खुद चीजों का निरीक्षण या कोशिश किए बिना +1 क्लिक करते हैं। इस उत्तर के साथ समस्या, जो इसे पूरी तरह से बेकार बना देती है, यह है कि दिया गया समाधान / आदेश तालिका (प्राथमिक कुंजी) पर बनाए गए अनुक्रमों का निर्यात नहीं करते हैं, और इसलिए आयात विफल हो जाता है। मुझे कहीं भी एकल उत्पादन पीजी डेटाबेस की जानकारी नहीं है जो अनुक्रमों के साथ प्राथमिक कुंजी का उपयोग नहीं करता है। यह आधा उत्तर है, प्रश्न का पूरी तरह से उत्तर देने में विफल रहता है और एकल तालिका को निर्यात / आयात करने के लिए अतिरिक्त कार्य की आवश्यकता होती है।
user10664542
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.