Bewertung von anderen möglichen Lösungen
nur Fügen Sie INSERTs
sqlite3 database.db3 .dump | grep '^INSERT INTO "tablename"'
Leicht zu implementieren, aber es wird fehlschlagen, wenn eine Ihrer Spalten inkl ude neue Linien
SQLite Einfügemodus
for t in $(sqlite3 $DB .tables); do
echo -e ".mode insert $t\nselect * from $t;"
done | sqlite3 $DB > backup.sql
Dies ist eine schöne und individuell anpassbare Lösung, aber es funktioniert nicht, wenn Ihre Spalten Blob Objekte wie ‚Geometrie‘ Typ in spatialite
haben Diff der Dump mit dem Schema
sqlite3 some.db .schema > schema.sql
sqlite3 some.db .dump > dump.sql
grep -v -f schema.sql dump > data.sql
Nicht sicher wh y, aber nicht für mich arbeiten
Weitere (neu) mögliche Lösung
Wahrscheinlich gibt keine beste Antwort auf diese Frage, aber eine, die für mich arbeitet, um die Einsätze grep zu berücksichtigen, die neu Linien in dem Spaltenwert mit einem expression like this
grep -Pzo "(?s)^INSERT.*\);[ \t]*$"
die Tabellen auszuwählen Sie werden abgeladen .dump
ein LIKE Argument gibt die Tabellennamen übereinstimmen, aber wenn dies wahrscheinlich ein einfaches Skript ist nicht genug ist bessere Option
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
oder, etwas ausgefeilteren Fremdschlüssel zu respektieren und in nur einer Transaktion
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
Berücksichtigen Sie dabei alle Dump-kapseln, dass der grep Ausdruck fehl, wenn );
eine Zeichenkette in einer der Spalten ist
um es (in einer Datenbank mit den Tabellen bereits erstellt)
sqlite3 -bail database.db3 < /tmp/backup.sql
In welches Format?Irgendetwas Bestimmtes, oder suchen Sie nur nach einem menschlich lesbaren Backup? Bitte angeben. – dmckee
Ich möchte in SQL-Format ausgeben, damit ich es leicht wiederherstellen kann. Ich habe diese Informationen zur Hauptfrage hinzugefügt. – Pablo