अन्य संभावित समाधानों की समीक्षा
शामिल केवल आवेषण
sqlite3 database.db3 .dump | grep '^INSERT INTO "tablename"'
आसान लागू करने के लिए, लेकिन यदि आपके किसी भी कॉलम सहित यह विफल हो जाएगा Ude नई लाइनों
SQLite डालने मोड
for t in $(sqlite3 $DB .tables); do
echo -e ".mode insert $t\nselect * from $t;"
done | sqlite3 $DB > backup.sql
यह एक अच्छा और अनुकूलन समाधान है, लेकिन अगर आपके कॉलम की तरह spatialite
में 'ज्यामिति' प्रकार ब्लॉब ऑब्जेक्ट यह काम नहीं करता Diff स्कीमा
sqlite3 some.db .schema > schema.sql
sqlite3 some.db .dump > dump.sql
grep -v -f schema.sql dump > data.sql
सुनिश्चित नहीं हैं कि क साथ डंप y, लेकिन मेरे लिए काम नहीं कर रहा
एक और (नया) संभव समाधान
शायद वहाँ इस सवाल का एक सर्वश्रेष्ठ उत्तर नहीं है, लेकिन एक है कि मेरे लिए काम कर रहा है आवेषण grep है खाता है कि नए हो को ध्यान में रखकर एक expression like this
grep -Pzo "(?s)^INSERT.*\);[ \t]*$"
साथ स्तंभ मानों में लाइनों टेबल चयन करने के लिए फेंक दिया जा है .dump
एक तरह तर्क तालिका नाम से मेल करने मानते हैं, लेकिन अगर यह पर्याप्त नहीं है शायद एक सरल स्क्रिप्ट बेहतर विकल्प
है
TABLES='table1 table2 table3'
echo '' > /tmp/backup.sql
for t in $TABLES ; do
echo -e ".dump ${t}" | sqlite3 database.db3 | grep -Pzo "(?s)^INSERT.*?\);$" >> /tmp/backup.sql
done
या, कुछ और अधिक विदेशी कुंजी का सम्मान करते हैं और केवल एक ही लेन-देन
TABLES='table1 table2 table3'
echo 'BEGIN TRANSACTION;' > /tmp/backup.sql
echo '' >> /tmp/backup.sql
for t in $TABLES ; do
echo -e ".dump ${t}" | sqlite3 $1 | grep -Pzo "(?s)^INSERT.*?\);$" | grep -v -e 'PRAGMA foreign_keys=OFF;' -e 'BEGIN TRANSACTION;' -e 'COMMIT;' >> /tmp/backup.sql
done
echo '' >> /tmp/backup.sql
echo 'COMMIT;' >> /tmp/backup.sql
में सभी डंप संपुटित को ध्यान में रखें कि अगर );
एक स्ट्रिंग कॉलम
में से किसी में मौजूद है ग्रेप अभिव्यक्ति असफल हो जायेगी को सविस्तार
sqlite3 -bail database.db3 < /tmp/backup.sql
किस प्रारूप में?विशेष रूप से कुछ भी, या आप सिर्फ मानव पठनीय बैकअप की तलाश में हैं? कृपया निर्दिष्ट करें। – dmckee
मैं SQL प्रारूप में डंप करना चाहता हूं, ताकि मैं इसे आसानी से पुनर्स्थापित कर सकूं। मैंने उस जानकारी को मुख्य प्रश्न में जोड़ा है। – Pablo