Как сравнить две базы данных SQLite в Linux

используя Linux, я хочу сравнить две базы данных SQLite, которые имеют одну и ту же схему. Будет лишь несколько отличий.

есть ли инструмент, который выводил бы эти различия? Желательно вывести их в командную строку, чтобы я мог grep / sed их.

SQLite использует SQL, поэтому может также использоваться общий инструмент SQL.

5 ответов


пожалуйста, посмотрите на SQLite Выпуск 3.8.10 который был выпущен 7 мая 2015 года. Этот выпуск впервые содержит sqldiff.exe программы для вычисления различий между двумя файлами базы данных SQLite. Скорее всего, эта программа также будет частью будущих релизов.

на sqldiff.exe инструмент командной строки должен работать для всех поддерживаемых операционных систем и предлагает несколько переключатели для изменения его выходного поведения. Пример использования:

sqldiff [options] database1.sqlite database2.sqlite

если никакие параметры не указаны, то вывод sqldiff.exe - это операторы SQL, которые превратят database1.sqlite ("база данных исходники") в database2.sqlite (в "базе данных").

однако есть и определенные ограничения. Например,sqldiff.exe утилита (по крайней мере, в настоящее время) не отображает различия в триггерах, представлениях или виртуальных таблицы.


пример команды и выход

я взял простую базу данных хранилища ключей (db1.sqlite) и сделал его копия (db2.sqlite). Затем я вставил одну пару ключ-значение в db2.sqlite. После этого я выполнил следующую команду:

sqldiff db1.sqlite db2.sqlite

и получил следующий результат:

вставить в my_table(rowid,"key",value) значения (1,'D:\Test\Test - ... тхт',х'aabbccdd');
Обновить счетчик набора my_table_size=1 Где rowid=1;

в таблице my_table_size был автоматически обновлен триггером после того, как пара ключ-значение была вставлена в my_table. Я тогда побежал sqldiff.exe снова, но на этот раз с db2.sqlite в качестве первого аргумента и db1.sqlite в качестве второго аргумента:

sqldiff db2.sqlite db1.sqlite

и получил следующий результат:

удалить из my_table, где rowid=1;
Обновить my_table_size SET counter=0 где rowid=1;


sqldiff ссылки для скачивания

С SQLite версии 3.10.2 который был выпущен 20 января 2016 года, 32-разрядные двоичные файлы для sqldiff можно напрямую загрузить из файла Страница Загрузки SQLite. Их можно найти в SQLite инструментов архивы для соответствующих операционных систем (см. Предварительно Скомпилированные Двоичные Файлы разделы). Например, вот ссылки на SQLite инструментов архив версии 3.25.0:

для версий SQLite до версии 3.10.2 на веб-сайте SQLite размещены 32-разрядные двоичные файлы для sqldiff, но не связывается с ними. Вот ссылки на sqldiff of версия 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 с открытым исходным кодом в проекте кода:http://www.codeproject.com/Articles/220018/SQLite-Compare-Utility который работает довольно хорошо для меня.


попробовать SQLite В Дифф.

Примечание: это платный продукт, $25 на момент написания этой статьи, и я не в любом случае, связанные с авторами.


с 20 января 2016 sqldiff (Windows sqldiff.exe) входит в zip-файл по адресуhttp://sqlite.org/download.html