Используя Linux, я хочу сравнить две базы данных SQLite, имеющие одну и ту же схему. Будет только несколько отличий.
Есть ли инструмент, который выводит эти различия? Предпочтительно выводите их в командную строку, чтобы я мог grep/sed их.
SQLite использует SQL, поэтому может также использоваться общий инструмент SQL.
Взгляните на версию SQLite Release 3.8.10, выпущенную 7 мая 2015 года. Этот выпуск впервые содержит служебную программу sqldiff.exe для вычисления различий между двумя файлами базы данных SQLite. Скорее всего, эта программа также будет частью будущих выпусков.
Средство командной строки sqldiff.exe должно работать для всех поддерживаемых операционных систем и предлагает несколько переключателей для изменения его выходного поведения. Пример использования:
sqldiff [options] database1.sqlite database2.sqlite
Если параметры не указаны, то вывод sqldiff.exe - это инструкции SQL, которые преобразуют database1.sqlite
данных1.sqlite("исходную" базу данных) в database2.sqlite
данных2.sqlite (база database2.sqlite
"destination").
Однако существуют определенные ограничения. Например, утилита sqldiff.exe (по крайней мере в настоящее время) не отображает различия в TRIGGER, VIEW или виртуальных таблицах.
Пример команды и вывода
Я взял простую базу данных хранилища db1.sqlite
(db1.sqlite
) и сделал ее копию (db2.sqlite
). Затем я вставил одну пару ключ-значение в db2.sqlite
. После этого я выполнил следующую команду:
sqldiff db1.sqlite db2.sqlite
и получил следующий результат:
INSERT INTO my_table (rowid, "key", value) VALUES (1, 'D:\Test\Test.txt', x'aabbccdd ');
UPDATE my_table_size SET counter = 1 WHERE rowid = 1;
Таблица my_table_size
автоматически обновлялась TRIGGER после того, как пара ключ-значение была вставлена в my_table
. Затем я снова запустил sqldiff.exe, но на этот раз с db2.sqlite
качестве первого аргумента и db1.sqlite
качестве второго аргумента:
sqldiff db2.sqlite db1.sqlite
и получил следующий результат:
УДАЛИТЬ ИЗ my_table WHERE rowid = 1;
UPDATE my_table_size SET counter = 0 WHERE rowid = 1;
Ссылки для скачивания sqldiff
Начиная с версии SQLite версии 3.10.2, которая была выпущена 20 января 2016 года, 32-битные двоичные файлы для sqldiff могут быть напрямую загружены с SQLite Download Page. Их можно найти в архивах инструментов sqlite для соответствующих операционных систем (см. Разделы Предварительно скомпилированные двоичные файлы). Например, вот ссылки на архивы инструментов sqlite версии 3.26.0:
Для версий SQLite до версии 3.10.2 на веб-сайте SQLite размещаются 32-разрядные двоичные файлы для sqldiff, но не связаны с ними. Вот ссылки на sqldiff версии 3.8.10:
Если вам нужны 64-битные двоичные файлы, вам необходимо загрузить исходные источники и скомпилировать их самостоятельно. (Файл sqldiff.c находится в подкаталоге инструмента архива, содержащего источники.)
Одна из возможностей заключается в использовании клиента командной строки sqlite3
для экспорта обеих баз данных, а затем для разграничения вывода. Например,
echo .dump | sqlite3 first.sqlite >first.dump
echo .dump | sqlite3 second.sqlite >second.dump
diff first.dump second.dump
Это только для Windows, но там есть приложение для сравнения базы данных SQLite с открытым исходным кодом или с открытым исходным кодом в Code Project: http://www.codeproject.com/Articles/220018/SQLite-Compare-Utility, который работает для меня очень хорошо.
sqldiff
умолчанию?
Попробуйте SQLite Diff.
ПРИМЕЧАНИЕ. Это платный продукт, 25 долларов США на момент написания этой статьи, и я не никак не связан с авторами.
sqldiff
умолчанию?
С 20 января 2016 года sqldiff (Windows sqldiff.exe) входит в zip файл в http://sqlite.org/download.html