Examen d'autres solutions possibles
Inclure seulement INSERTS
sqlite3 database.db3 .dump | grep '^INSERT INTO "tablename"'
facile à mettre en œuvre, mais il échouera si l'une de vos colonnes incl lignes Ude nouvelles
mode d'insertion SQLite
for t in $(sqlite3 $DB .tables); do
echo -e ".mode insert $t\nselect * from $t;"
done | sqlite3 $DB > backup.sql
C'est une solution agréable et personnalisable, mais il ne fonctionne pas si vos colonnes ont des objets blob comme type 'géométrie' dans spatialite
Diff la décharge avec le schéma
sqlite3 some.db .schema > schema.sql
sqlite3 some.db .dump > dump.sql
grep -v -f schema.sql dump > data.sql
Je ne sais pas wh y, mais ne fonctionne pas pour moi
Une autre (nouvelle) solution possible
Probablement il n'y a pas une meilleure réponse à cette question, mais qui travaille pour moi grep les inserts en tenant compte du fait que soit nouveau lignes dans les valeurs de la colonne avec un expression like this
grep -Pzo "(?s)^INSERT.*\);[ \t]*$"
pour sélectionner les tables ne sont l'objet de dumping .dump
admet un argument LIKE pour faire correspondre les noms de table, mais si cela ne suffit pas probablement un script simple est meilleure 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
ou quelque chose de plus élaboré pour respecter les clés étrangères et encapsuler toutes les décharge dans une seule transaction
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
Prenez en compte que l'expression grep échouera si );
est une chaîne présente dans l'une des colonnes
pour restaurer (dans une base de données avec les tables déjà créées)
sqlite3 -bail database.db3 < /tmp/backup.sql
À quel format?Quelque chose en particulier, ou êtes-vous simplement à la recherche d'une sauvegarde lisible par l'homme? Veuillez préciser. – dmckee
Je veux vider au format SQL, afin que je puisse le restaurer facilement. J'ai ajouté cette information à la question principale. – Pablo