विशिष्ट तालिकाओं और प्रविष्टियों के लिए एक डेटाबेस डंप बनाना Postgres


94

मेरे पास सैकड़ों तालिकाओं वाला एक डेटाबेस है, मुझे जो करने की आवश्यकता है वह निर्दिष्ट तालिकाओं को निर्यात करना है और डेटा के लिए एक sql फ़ाइल में स्टेटमेंट डालना है।

एकमात्र कथन जो मुझे पता है कि यह प्राप्त कर सकता है

pg_dump -D -a -t zones_seq interway > /tmp/zones_seq.sql

क्या मुझे यह कथन प्रत्येक तालिका के लिए चलाना चाहिए या सभी चयनित तालिकाओं को एक बड़े sql बड़ा में निर्यात करने के लिए एक समान कथन चलाने का एक तरीका है। ऊपर pg_dump केवल तालिका आवेषण को निर्यात नहीं करता है, मुझे दोनों की आवश्यकता है

किसी भी तरह की सहायता को आभार समझेंगे।

जवाबों:


160

मैनुअल से राइट : " मल्टीपल टेबल को कई-कई स्विच लिखकर चुना जा सकता है "

इसलिए आपको अपनी सभी तालिकाओं को सूचीबद्ध करने की आवश्यकता है

pg_dump --column-inserts -a -t zones_seq -t interway -t table_3 ... > /tmp/zones_seq.sql  

ध्यान दें कि यदि आपके पास एक ही उपसर्ग (या प्रत्यय) के साथ कई टेबल हैं, तो आप वाइल्डकार्ड्स का उपयोग उन्हें -tपैरामीटर के साथ चयन करने के लिए कर सकते हैं:

" इसके अलावा, तालिका पैरामीटर को psql के \ d कमांड द्वारा उपयोग किए गए समान नियमों के अनुसार एक पैटर्न के रूप में व्याख्या की जाती है "


20
-T स्विच उसी तरह है लेकिन इसका उपयोग तालिकाओं को बाहर करने के लिए किया जाता है। उपयोगी हो सकता है अगर आप सभी की जरूरत है लेकिन एक या दो टेबल आदि
स्कॉट Marlowe

4
ऐसा -Dलगता है कि पीजी 9.1 पर आगे गायब हो गया है
एपिगीन

5
-Dविकल्प था संस्करण 8.4 में हटा दिया । आपको --column-insertsअब इसके बजाय उपयोग करना होगा।
मल्लिक

1
Pg_dump --host 127.0.0.1 --port 5432 --username "<username>" - कॉलम-आवेषण --verbose --file "/ tmp / <filename.sql>" --table "<regex> * आज़माएं "" <tablename> "
थारिंदु जयसूर्या

22

यदि वे विशिष्ट तालिकाएँ किसी विशेष रेगेक्स से मेल खाती हैं, तो आप pg_dump में regex -t विकल्प का उपयोग कर सकते हैं।

pg_dump -D -a -t zones_seq -t interway -t "<regex>" -f /tmp/zones_seq.sql <DBNAME>

उदाहरण के लिए "परीक्षण" के साथ शुरू हुई तालिकाओं को डंप करने के लिए, आप उपयोग कर सकते हैं

pg_dump -D -a -t zones_seq -t interway -t "^test*" -f /tmp/zones_seq.sql <DBNAME>

3
अगर यह एक रेगीक्स था, तो क्या ^test.*इसके बजाय नहीं होना चाहिए ^test*?
msrd0

5
यह रेगेक्स नहीं है, यह पोस्टग्रेज के "पैटर्न" का उपयोग करता है, इसलिए यह वास्तव में होना चाहिए "test*": postgresql.org/docs/current/app-psql.html#APP-PSQL-PATTERNS
ellxcm

रेगेक्स का उपयोग करने के लिए तुच्छ नहीं, अवैध नियमित अभिव्यक्ति उत्पन्न करना : क्वांटिफायर ऑपरेंड अमान्य त्रुटि। लेकिन नियमित अभिव्यक्ति सही है ... केवल बहुत ही सरल रेगेक्स मान्य हैं
पीटर क्रस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.