Как мы можем использовать xinclude в журнале изменений Liquibase XML?

Я пытаюсь включить в свой журнал изменений еще один XML-файл, который является фрагментом XML-файла. Всякий раз, когда я запускаю свой журнал изменений в liquibase, он выполняется успешно (без каких-либо ошибок синтаксического анализа), но в базе данных не создается таблица.

Я не уверен, что мы можем использовать xInclude в liquibsae, но я думаю, что это должно быть возможно, поскольку мы используем xml внизу в liquibase. Плюс я не смог найти ни одного примера xinclude в liquibase и в официальной документации.

Изменения.xml

<?xml version="1.0" encoding="UTF-8"?>
<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-3.8.xsd"
                       xmlns:xi="http://www.w3c.org/2001/Xinclude">

    <changeSet id="id-1234"
        author="umarTahir">

        <comment>creates table: employee</comment>
        <xi:include
            href="employee.xml" parse="xml"
         xpointer="title"/>

        <rollback>
            <dropTable schemaName="employee_test" tableName="employee" />
        </rollback>
    </changeSet>

</databaseChangeLog>

employee.xml

<createTable tableName="employee" xml:id="title">
    <column name="employee_id" type="UUID">
        <constraints primaryKey="true"
            primaryKeyName="employee_pkey" />
    </column>
    <column name="first_name" type="TEXT" />
    <column name="middle_name" type="TEXT" />
    <column name="last_name" type="TEXT" />
    <column name="email" type="TEXT" />
    <column name="n_created_by" type="TEXT" />
    <column name="n_created" type="TIMESTAMP WITHOUT TIME ZONE" />
    <column name="n_last_modified_by" type="TEXT" />
    <column name="n_last_modified"
        type="TIMESTAMP WITHOUT TIME ZONE" />
</createTable>

person Umar Tahir    schedule 21.01.2020    source источник


Ответы (1)


Поправьте меня, если я не прав, но насколько я понимаю, liquibase парсит чейнджлоги на основе dbchangelog-{version}.xsd.

<xi:inlude> игнорируется. На самом деле, даже если вы введете <xi:foo-bar>, журнал изменений все равно будет успешно проанализирован, но <xi:...> будет проигнорирован.

Итак, я предлагаю использовать тег <include> для включения содержимого из других файлов журнала изменений или использовать <sqlFile> для включения файлов sql.

person htshame    schedule 21.01.2020
comment
include используется для добавления только файла журнала изменений, верно? но я не включаю в какой-либо журнал изменений, а включаю часть кода xml (т.е. xml для создания таблицы включается в мой набор изменений, чтобы сделать код аккуратным) - person Umar Tahir; 21.01.2020
comment
Более того, я также пытался использовать тег include, но это вызывает ошибку. Похоже, мы не можем использовать свойства xml в liquibase из коробки. - person Umar Tahir; 21.01.2020
comment
Я понимаю, что вы пытаетесь сделать, но я сомневаюсь, что это возможно. Похоже, единственное, что вы можете включить, — это включить соответствующие журналы изменений. - person htshame; 21.01.2020
comment
@htshame ты прав. Документы для этого и обоснование этого находятся на liquibase.org/documentation/include.html Кроме того, файлы, включенные с помощью ‹include›, должны быть полными журналами изменений XML, а не фрагментами XML. - person SteveDonie; 21.01.2020