![]() |
|
|||
WebMoney: WMZ Z294115950220 WMR R409981405661 WME E134003968233 |
Visa 4274 3200 2453 6495 |
sqldiff.exe это утилита командной строки, которая показывает
различия в содержании между базами данных SQLite.
Использование в качестве примера: Обычный вывод это скрипт SQL, который преобразует
database1.sqlite (исходную БД) в database2.sqlite (БД назначения).
Это поведение может быть изменено, используя
переключатели командной строки: Не пишите изменения на стандартный вывод.
Вместо этого напишите файл changeset в FILE. changeset может
интерпретироваться, используя расширение
session SQLite. Загрузите общую библиотеку или файл DLL LIBRARY в SQLite до вычисления
различий. Это может использоваться, чтобы добавить определенные применением
последовательности сопоставления,
которые требуются схемой. Используйте определенный схемой
PRIMARY KEY вместо
rowid, чтобы соединить строки в
источнике и целевой базе данных. См. дополнительное объяснение ниже. Покажите только имя столбца и различия в таблице
в схеме, но не содержание таблицы. Покажите, сколько строк изменилось в каждой таблице, но не
показывайте фактические изменения. Покажите только различия в содержании для TABLE, не для
всей базы данных. Оберните вывод SQL в единственную большую транзакцию. Добавьте поддержку обработки виртуальных таблиц
FTS3, FTS5 и
rtree. sqldiff.exe работает, находя строки
в источнике и месте назначения, которые являются логическими
"парами". Поведение по умолчанию должно рассматривать две строки
как пары, если они находятся в таблицах
с тем же самым именем, и у них есть тот же самый
rowid,
или в случае таблицы WITHOUT ROWID,
если у них есть тот же самый
PRIMARY KEY.
Любые различия в содержании соединенных строк произведены как UPDATE.
Строки в исходной базе данных, которая не могла быть соединена, произведены
как DELETE. Строки в целевой базе данных, которая не могла быть соединена,
произведены как INSERT. Флаг --primarykey изменяет логику соединения
так, чтобы объявленный схемой
PRIMARY KEY всегда использовался для соединения, даже на таблицах,
у которых есть rowid.
Это часто лучший выбор для нахождения различий, однако может привести к
пропущенным различиям в случае строк, у которых есть одна или несколько
колонок PRIMARY KEY равных NULL. sqldiff.exe не вычисляет changesets для: таблицы rowid, для
которых rowid недоступен, или таблиц, у которых нет явного первичного ключа.
Опция --changeset убирает их из сравнения. Примеры таких таблиц: sqldiff.exe (в настоящее время) не показывает различия в
TRIGGER или
VIEW. sqldiff не разработана, чтобы поддержать миграции схемы и прощает
относительно отличающиеся определения столбца.
Обычно только имена столбцов и их порядок сравнены для подобно названных
таблиц, прежде чем сравнение содержания продолжится. Однако, выбор сравнения единственной таблицы с "sqlite_schema"
может использоваться, чтобы показать или обнаружить подробные различия в
схеме между парой баз данных. Делая это, вывод не должен
использоваться непосредственно, чтобы изменить базу данных.
По умолчанию относительно различий в схеме или
содержании виртуальных таблиц не сообщают. Но если внедрение виртуальной таблицы
составляет реальные таблицы (иногда называемые "теневыми")
в базе данных, чтобы хранить данные, sqldiff.exe
действительно вычисляет различие между ними. Это может иметь удивительные
эффекты, если получающимся скриптом SQL затем
управляют на базе данных, которая не является точно тем же самым,
как исходная. Для нескольких из связанных виртуальных таблиц
SQLITE (FTS3, FTS5, rtree и другие), удивительные эффекты могут включать
повреждение виртуального содержания Если опция --vtab передается sqldiff.exe, то он игнорирует все основные
теневые таблицы, принадлежащие FTS3, FTS5 или rtree, и вместо этого включает
различия непосредственно в виртуальной таблице.
Choose any three.
1. Использование
sqldiff [options] database1.sqlite database2.sqlite
2. Как это работает
3. Ограничения
CREATE TABLE NilChangeset (
-- inaccessible rowid due to hiding its aliases
"rowid" TEXT,
"oid" TEXT,
"_rowid_" TEXT);
CREATE TABLE NilChangeset (
-- no explicit primary key
"authorId" TEXT,
"bookId" TEXT);
sqldiff --changeset CHANGESET_OUT --table NilChangeset db1.sdb db2.sdb