сравнение баз данных и генерация SQL-скрипта с использованием Liquibase

Я сравниваю две базы данных, используя Liquibase, интегрированную с муравьями. Но вывод, который он генерирует, похож на общий формат. Он не дает операторов sql. Пожалуйста, кто-нибудь скажет мне, как сравнить две базы данных с помощью Liquibase, интегрированной с утилитой ant или командной строки.

Получение операторов SQL, представляющих разницу между двумя базами данных, представляет собой двухэтапную операцию:

  1. Создайте журнал изменений «diff»
  2. Создание операторов SQL

пример

В этом примере требуется файл Liquibase.properties (упрощает параметры командной строки ):

classpath=/path/to/jdbc/jdbc.jar driver=org.Driver url=jdbc:db_url1 username=user1 password=pass1 referenceUrl=jdbc:db_url2 referenceUsername=user2 referencePassword=pass2 changeLogFile=diff.xml 

Теперь запустите следующие команды для создания операторов SQL:

 liquibase diffChangeLog liquibase updateSQL > update.sql 

Приятной особенностью Liquibase является то, что она также может генерировать откат SQL:

 liquibase futureRollbackSQL > rollback.sql 

Обновить

Liquibase не создает разницу данных между базами данных, а только схему. Тем не менее, можно сбрасывать данные базы данных в виде серии наборов изменений:

 liquibase --changeLogFile=data.xml --diffTypes=data generateChangeLog 

Файл data.xml можно использовать для переноса данных, содержащихся в новых таблицах.

Обновление 2:

Также возможно сгенерировать липидазные модификации с использованием groovy.

 import groovy.sql.Sql import groovy.xml.MarkupBuilder // // DB connection // this.class.classLoader.rootLoader.addURL(new URL("file:///home/path/to/h2-1.3.162.jar")) def sql = Sql.newInstance("jdbc:h2:db/db1","user","pass","org.h2.Driver") // // Generate liquibase changeset // def author = "generated" def id = 1 new File("extract.xml").withWriter { writer -> def xml = new MarkupBuilder(writer); xml.databaseChangeLog( "xmlns":"http://www.liquibase.org/xml/ns/dbchangelog", "xmlns:xsi":"http://www.w3.org/2001/XMLSchema-instance", "xsi:schemaLocation":"http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-2.0.xsd" ) { changeSet(author:author, id:id++) { sql.eachRow("select * from employee") { row -> insert(tableName:"exmployee") { column(name:"empno", valueNumeric:row.empno) column(name:"name", value:row.name) column(name:"job", value:row.job) column(name:"hiredate", value:row.hiredate) column(name:"salary", valueNumeric:row.salary) } } } } } 
Interesting Posts

Масштабирование удаленного рабочего стола

Как сделать токенизацию строки в C ++?

Настройка кнопок быстрого доступа в левой части File-> Open dialog в большинстве программ Windows

Проверка Excel – может ли он использоваться, чтобы убедиться, что дубликаты не введены?

Задача фонового таймера в веб-приложении JSP / Servlet

JTable повторяющиеся значения в строке

Удаление невидимых языковых режимов в Windows 8

Не удается удалить принтер из Windows 7

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

Построить проект в JAR автоматически в Eclipse

Autohotkey … изменение скорости указателя мыши / тачпада?

В чем разница между «git pull» и «git fetch»?

OS X: кодировка Base64 через командную строку

Твердые конденсаторы лопнут, ПК кажется прекрасным, насколько безопасно продолжать его использовать?

Пользовательская анимация для нажатия UIViewController

Давайте будем гением компьютера.