2013-08-20 7 views
8

मुझे PostgreSQL डेटाबेस की एकाधिक तालिकाओं से SQL फ़ाइलों को निकालने की आवश्यकता है। , जैसा कि आप देख, सभी तालिकाओं कि उपसर्ग thr के साथ शुरू एक एकीकृत फ़ाइल (db_dump.sql) को निर्यात किया जा रहा हैPostgreSQL - प्रत्येक तालिका को एक अलग फ़ाइल में डंप करें

pg_dump -t 'thr_*' -s dbName -U userName > /home/anik/psqlTest/db_dump.sql 

हालांकि: यह क्या मैं अब तक के साथ आ गया है। मेरे पास एसक्यूएल निकालने के लिए कुल मिलाकर लगभग 9 0 टेबल हैं, इसलिए यह आवश्यक है कि डेटा अलग फाइलों में संग्रहीत किया जाए।

मैं यह कैसे कर सकता हूं? अग्रिम में धन्यवाद।

+2

आपको समझाने की जरूरत है * क्यों * आप 90 अलग-अलग फाइलें चाहते हैं - MySQL, आंशिक बैकअप को निर्यात करें? यदि आप बैकअप/निर्यात करने का प्रयास कर रहे हैं तो IMSoP का उत्तर प्रत्येक तालिका के लिए एक ही स्नैपशॉट की गारंटी नहीं देगा। –

+0

@ रिचर्डहुस्टन अच्छा बिंदु, मैंने गैर-परमाणु के बारे में सोचा नहीं था। मुझे लगता है कि आप डीबी से एक "कस्टम" बैकअप बना सकते हैं और उसके बाद 'pg_restore' का उपयोग करके अलग-अलग टेबल निकाल सकते हैं। – IMSoP

उत्तर

13

यदि आप टेबल की सूची को हार्ड-कोड करने में खुश हैं, लेकिन बस प्रत्येक को एक अलग फ़ाइल में रखना चाहते हैं, तो आप pg_dump कमांड को कई बार चलाने के लिए शेल स्क्रिप्ट लूप का उपयोग कर सकते हैं, प्रत्येक बार तालिका नाम में प्रतिस्थापित कर सकते हैं

for table in table1 table2 table3 etc; 
do pg_dump -t $table -U userName dbName > /home/anik/psqlTest/db_dump_dir/$table.sql; 
done; 

संपादित: पाश दौर यह दृष्टिकोण गतिशील psql के माध्यम से एक प्रश्न चल रहा है और एक हार्ड-कोडेड सूची के बजाय लूप में परिणाम खिला द्वारा तालिकाओं की सूची प्राप्त करने के लिए बढ़ाया जा सकता है:

for table in $(psql -U userName -d dbName -t -c "Select table_name From information_schema.tables Where table_type='BASE TABLE' and table_name like 'thr_%'"); 
do pg_dump -t $table -U userName dbName > /home/anik/psqlTest/db_dump_dir/$table.sql; 
done; 

यहां psql -t -c "SQL"SQL चलाता है और बिना किसी शीर्षलेख या पाद लेख वाले परिणाम आउटपुट करता है; चूंकि केवल एक कॉलम चुना गया है, $(command) द्वारा कैप्चर आउटपुट की प्रत्येक पंक्ति पर एक टेबल नाम होगा, और आपका खोल एक समय में उनके माध्यम से लूप होगा।

+0

मैं टेबल नाम पैरामीटर में वाइल्डकार्ड का उपयोग करूँगा। हार्ड कोडिंग 90 टेबल नाम! तब तक मैं एक बूढ़ा आदमी बनूंगा। :) –

+1

@HasanIqbalAnik वैकल्पिक रूप से आप टेबल की सूची के लिए खोल स्क्रिप्ट से डीबी से पूछ सकते हैं और फिर सूची के माध्यम से लूप कर सकते हैं। –

+0

@HasanIqbalAnik \t मैंने सोचा कि आप यह कह सकते हैं, यही कारण है कि मैंने जवाब की शुरुआत में चेतावनी को जोड़ा। मैंने सूची के लिए पहली बार डीबी से पूछताछ करने के लिए अपना जवाब संपादित कर दिया है, क्योंकि इगोर सुझाव देता है। – IMSoP

0

यह bash स्क्रिप्ट तालिका के अनुसार एक फ़ाइल के साथ एक बैकअप करना होगा: (सही पोस्ट टिप्पणी करने के लिए पर्याप्त नहीं प्रतिष्ठा) मैं कुछ सुधार और अपने खुद के इस्तेमाल के लिए कुछ संशोधनों के साथ अपनी स्क्रिप्ट का इस्तेमाल किया

#!/bin/bash 

# Config: 
DB=dbName 
U=userName 
# tablename searchpattern, if you want all tables enter "": 
P="" 
# directory to dump files without trailing slash: 
DIR=~/psql_db_dump_dir 

mkdir -p $DIR 
AUTH="-d $DB -U $U" 
TABLES="$(psql -d $DB -U $U -t -c "SELECT table_name FROM information_schema.tables WHERE table_type='BASE TABLE' AND table_name LIKE '%$P%' ORDER BY table_name")" 
for table in $TABLES; do 
    echo backup $table ... 
    pg_dump $ -t $table > $DIR/$table.sql; 
done; 
echo done 
0

, दूसरों के लिए उपयोगी हो सकता है:

#!/bin/bash 

# Config: 
DB=rezopilotdatabase 
U=postgres 
# tablename searchpattern, if you want all tables enter "": 
P="" 
# directory to dump files without trailing slash: 
DIR=~/psql_db_dump_dir 

mkdir -p $DIR 
TABLES="$(psql -d $DB -U $U -t -c "SELECT table_name FROM 
information_schema.tables WHERE table_type='BASE TABLE' AND table_name 
LIKE '%$P%' ORDER BY table_name")" 
for table in $TABLES; do 
    echo backup $table ... 
    pg_dump $DB -U $U -w -t $table > $DIR/$table.sql; 
done; 
echo done 

(मुझे लगता है कि आप pg_dumb आदेश में $ डीबी जोड़ने के लिए भूल गया, और मैं एक डब्ल्यू कहा, एक स्वचालित स्क्रिप्ट के लिए, यह बेहतर है एक psw शीघ्र मुझे लगता है कि नहीं , इसके लिए, मैंने इसमें ~/.pgpass फ़ाइल बनाई है जिसमें मेरा पासवर्ड है मैंने उपयोगकर्ता को कमांड के लिए यह भी बताया कि कौन सा पासवर्ड लाने के लिए .pgpass) उम्मीद है कि यह किसी दिन किसी की मदद करेगा।

संबंधित मुद्दे