Spec-Zone.ru › SQLite

sqldiff.exe: Инструмент для сравнения баз данных

Содержание
1. Использование
2. Принцип работы
3. Ограничения

1. Использование

Бинарный файл sqldiff.exe — это утилита командной строки, которая отображает различия в содержимом баз данных SQLite. Пример использования:

sqldiff [options] database1.sqlite database2.sqlite

Обычно на выходе получается скрипт SQL, который преобразует базу данных database1.sqlite (база данных-источник) в database2.sqlite (база данных-назначение). Это поведение можно изменить с помощью ключей командной строки:

--changeset FILE

Не записывать изменения в стандартный вывод. Вместо этого записать файл изменений (бинарный) в FILE. Файл изменений можно интерпретировать с помощью расширения сеанса для SQLite.

--lib LIBRARY
-L LIBRARY

Загрузить общую библиотеку или DLL-файл LIBRARY в SQLite перед вычислением различий. Это можно использовать для добавления определенных приложением сортировочных последовательностей, необходимых для схемы.

--primarykey

Использовать определенный в схеме PRIMARY KEY вместо rowid для сопоставления строк в исходной и целевой базах данных. (См. дополнительное объяснение ниже.)

--schema

Показывать только различия в именах столбцов и таблиц в схеме, а не содержимое таблиц

--summary

Показать количество измененных строк в каждой таблице, но не показывать сами изменения

--table TABLE

Показать только различия в содержимом для TABLE, а не для всей базы данных

--transaction

Оборачивает вывод SQL в один большой транзакции

--vtab

Добавить поддержку работы с FTS3, FTS5 и rtree виртуальными таблицами. См. ниже для получения дополнительных сведений.

2. Принцип работы

Утилита sqldiff.exe работает, находя строки в исходной и целевой базе данных, которые являются логическими «парами». По умолчанию две строки считаются парами, если они находятся в таблицах с одинаковым именем и имеют одинаковый rowid или, в случае таблицы WITHOUT ROWID, если они имеют одинаковый PRIMARY KEY. Любые различия в содержимом пар строк выводятся как UPDATE. Строки из базы данных-источника, которые не были сопоставлены, выводятся как DELETE. Строки из базы данных-назначения, которые не были сопоставлены, выводятся как INSERT.

Флаг --primarykey изменяет алгоритм сопоставления таким образом, что объявленный в схеме PRIMARY KEY всегда используется для сопоставления, даже в таблицах, имеющих rowid. Это часто лучший выбор для поиска различий, однако это может привести к пропускам различий в случае строк, в которых один или несколько столбцов PRIMARY KEY имеют значение NULL.

3. Ограничения

  1. Утилита sqldiff.exe не вычисляет изменения для: таблиц rowid, для которых rowid недоступен; или таблиц, у которых нет явного первичного ключа. При использовании опции --changeset sqldiff пропускает их из сравнения. Примерами таких таблиц являются:

    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 сравнивает только такие таблицы, ошибки не возникает. Однако результат может быть неожиданным. Например, действие следующего вызова:
    sqldiff --changeset CHANGESET_OUT --table NilChangeset db1.sdb db2.sdb
    
    будет заключаться в создании пустого файла под названием «CHANGESET_OUT». Подробности см. в разделе ограничения сеанса.
  2. Утилита sqldiff.exe не (в настоящее время) отображает различия в TRIGGER или VIEW.

  3. Утилита sqldiff не предназначена для поддержки миграции схем и терпима к различным определениям столбцов. Обычно имена столбцов и их порядок сравниваются для одноименных таблиц перед сравнением содержимого.

    Однако, опция сравнения по отдельной таблице, с именем "sqlite_schema", может быть использована для отображения или обнаружения подробных различий в схемах между парой баз данных. При этом вывод не должен использоваться непосредственно для изменения базы данных.

  4. По умолчанию различия в схеме или содержимом виртуальных таблиц не отображаются.

    Однако, если реализация виртуальной таблицы создает реальные таблицы (иногда называемые «теневыми» таблицами) в базе данных для хранения своих данных, то sqldiff.exe вычисляет разницу между этими таблицами. Это может иметь неожиданные последствия, если полученный скрипт SQL затем выполняется в базе данных, которая не точно такая же, как база данных-источник. Для некоторых из поставляемых с SQLite виртуальных таблиц (FTS3, FTS5, rtree и др.) неожиданные последствия могут включать повреждение содержимого виртуальной таблицы.

    Если опция --vtab передана в sqldiff.exe, то она игнорирует все основополагающие теневые таблицы, принадлежащие виртуальной таблице FTS3, FTS5 или rtree, и вместо этого включает различия в виртуальной таблице напрямую.

SQLite is in the Public Domain.
https://sqlite.org/sqldiff.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API