Как сравнить две базы данных SQLite в Linux - PullRequest
54 голосов
/ 19 января 2010

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

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

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

Ответы [ 5 ]

53 голосов
/ 08 мая 2015

Пожалуйста, ознакомьтесь с SQLite Release 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 (по крайней мере в настоящее время) не отображает различия в TRIGGER, VIEW или виртуальных таблицах.


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

Я взял простую базу данных хранилища значений ключей (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 ');
ОБНОВЛЕНИЕ my_table_size SET counter = 1 ГДЕ rowid = 1;

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

sqldiff db2.sqlite db1.sqlite

и получил следующий вывод:

DELETE FROM my_table WHERE rowid = 1;
ОБНОВЛЕНИЕ my_table_size SET counter = 0 ГДЕ rowid = 1;


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

Начиная с SQLite версии 3.10.2 , выпущенной 20 января 2016 г., 32-разрядные двоичные файлы для sqldiff можно напрямую загрузить со страницы загрузки SQLite . Их можно найти в архивах sqlite tools для соответствующих операционных систем (см. Разделы Precompiled Binaries ). Например, вот ссылки на архивы sqlite tools версии 3.28.0:

Для версий SQLite до версии 3.10.2 веб-сайт SQLite содержит 32-разрядные двоичные файлы для sqldiff , но не ссылается на них. Вот ссылки на sqldiff версии 3.8.10:

Если вам нужны 64-битные двоичные файлы, вам нужно загрузить исходные коды и скомпилировать их самостоятельно. (Файл sqldiff.c находится в подкаталоге tool архива, содержащего источники.)

48 голосов
/ 19 января 2010

Одной из возможностей является использование клиента командной строки sqlite3 для экспорта обеих баз данных и последующего сравнения выходных данных. Например,

sqlite3 first.sqlite .dump >first.dump
sqlite3 second.sqlite .dump >second.dump
diff first.dump second.dump
9 голосов
/ 14 марта 2013

Это только для Windows, но в Code Project есть бесплатное приложение с открытым исходным кодом для сравнения баз данных SQLite: http://www.codeproject.com/Articles/220018/SQLite-Compare-Utility, которое очень хорошо работает для меня.

3 голосов
/ 23 августа 2012

Попробуйте SQLite Diff .

ПРИМЕЧАНИЕ: Это платный продукт, 25 долларов на момент написания этой статьи, и я не в любом случае связан с авторами.

1 голос
/ 21 января 2016

С 20 января 2016 года sqldiff (Windows sqldiff.exe) включен в zip-файл по адресу http://sqlite.org/download.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...