Liquibase® version 3.8.5 is now available! Get it for free.
2018 XML Announcement
News All Previous Posts >>

Subscribe for email updates

- and/or -

Achieving Continuous Delivery at Fidelity Investments with IBM UrbanCode and Datical

FAQ

What license is Liquibase released under?

Liquibase是根据Apache许可版本2.0发布的. Liquibase jar文件的主文件还包含商业许可的Pro代码,仅在提供许可证密钥后才有效.

Where can I get the source code?

可以从主要下载页面获得资源,也可以直接从Github获得资源

How does Liquibase compare to tools that compare development database with production databases to generate change lists?

Liquibase可以更好地工作,因为它了解更改是什么. 例如,数据库比较程序将仅看到集成时的"人员"表具有"名字"和"姓氏"列,但实时显示"人员"表具有"名称"列. 它会报告您需要删除"名称"列,并添加"名字"和"姓氏"列. 尽管这将为您提供正确的架构,但您会在此过程中忘记每个人的名字. 使用Liquibase,您将具有一个更改集,其中说"将'name'重命名为'lastname'并添加'firstname'列",或者甚至更好的是,将" name列拆分在一个空格上并将值放在新的'firstname'中,然后'姓氏'列,然后删除'名字'列."了解它们为何不同,可以对生产数据库进行更改,而不必担心丢失宝贵的数据.

What if multiple processes/application servers attempt to migrate the database at the same time?

Liquibase使用分布式锁定系统,一次仅允许一个进程更新数据库. 其他进程将仅等待直到锁已释放.

Does Liquibase work with branches?

是. 由于每个更改都是独立的,因此在下一次运行Liquibase时将运行在不同分支中进行的数据库更改,然后将其合并. 您可能会遇到语句运行顺序的问题,但是您可以通过重新排列变更日志文件的顺序来轻松解决所有问题.

Why do I have to specify an “author” tag?

为什么不只是一个" id"标签? 两位作者都使用id属性标签的主要原因是,对于一个人来说,拥有相同" id"值的标签太容易了-特别是在使用多个分支时. 源代码控制系统将解析并合并添加在不同分支上的两个变更集,但是它不会关心具有相同" id"的两个不同变更集,并且一旦针对一个数据库运行了一个变更集id,您无法(轻松)更改它. 通过还基于作者标签确定更改集的唯一性,可以减少重复的机会.

What if I really don’t want to specify an author tag?

There are times an organization would not want to have changes tied back to a particular individual or if the original author isn’t actually known. If this is the case, simply make up a value such as “UNKNOWN”.

How can I specify vendor specific features such as ENGINE=InnoDB in MySQL?

当前,我们尚无办法为create table标记指定供应商特定的扩展,因此您将需要使用<sql>标记并手动指定create table语句. 当然,您可以配置MySQL安装,以将innodb用作默认存储引擎,并带有default-storage-engine = INNODB.

从1.9开始,可以使用ModifySql标记修改生成的SQL.

What is all that stuff at the beginning of my XML changelog?

如果您使用的是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"
    xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
    xmlns:pro="http://www.liquibase.org/xml/ns/pro"
    xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.8.xsd
        http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd
        http://www.liquibase.org/xml/ns/pro http://www.liquibase.org/xml/ns/pro/liquibase-pro-3.8.xsd ">
</databaseChangeLog>

所有这些都是为了XML解析器的好处,包括内置在Liquibase中的解析器以及您可能想用来编辑变更日志的任何XML感知编辑器.

第一行说:"这是XML文档,版本1.0,字符编码为UTF-8". 如果您在纯文本编辑器中编辑XML,则应检查文件是否实际以UTF-8编码.

第二个元素声明此XML文档具有databaseChangeLog的根元素,然后继续说明其实际含义.

其余各行都是关于XML名称空间,然后是XSD模式. XML命名空间允许XML文档具有在不同的XSD模式中定义的元素. XSD模式本身是用XML编写的,并且描述了针对特定应用程序正确形成的XML文档应该是什么样的. 如果您真的想获得低调, 这是一篇有关XML和名称空间的好文章.

xmlns="http://www.liquibase.org/xml/ns/dbchangelog"表示该文档的默认名称空间使用给定的URI标识. 这表明databaseChangeLog命名空间中的全局元素,属性,类型和组可以在本文档中使用而没有前缀(即,不限定). 这意味着我们以后可以编写类似<changeSet>东西,而不是<databaseChangeLog:changeSet> . XML文档中只能有一个默认名称空间.

这里要记住的一件事是解析器未使用名称空间URI来查找信息. 使用URI的目的是给命名空间一个唯一的名称. 一些组织使用URI作为指向包含人类可读名称空间信息的网页的指针.

下一行xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"表示我们将在本文档中使用其他名称空间. 该名称空间将具有前缀xsi和URI http://www.w3.org/2001/XMLSchema-instance . 此特定名称空间仅在本文档的某个地方使用,在本元素中更进一步.

接下来,我们声明另外两个名称空间. 第一个具有前缀ext和URI http://www.liquibase.org/xml/ns/dbchangelog-ext . 这是一个可用于任何通用扩展的名称空间,而无需编写您自己的XSD文件.

第二个名称空间具有pro前缀和URI http://www.liquibase.org/xml/ns/pro . 该名称空间用于Liquibase Pro添加的功能. 即使您使用的是Liquibase社区版本,您也可能希望在更新日志中使用它,以防您升级. 当查看XML变更日志时,如果任何元素都以<pro:开头,那么您知道该元素是由pro扩展生成或编写的.

标头中的最终声明相当大,需要进行一些分解. 它以xsi:schemaLocation开头. 这是我们使用之前声明的xsi前缀的地方. schemaLocation指示引号后面是URI + URL对的列表 . 在每个URI + URL对中, URI与前面提到的默认名称空间或其他名称空间声明之一中的URI匹配,并且URL是指向可在其中找到XSD文档的指针. 声明中的每个元素都由空格分隔-可以只是一个空格,也可以是换行符. 本示例用空格将一对中的每对分开,并用换行符将其分开.

在此示例中,有3对URI + URL :一对用于由URI http://www.liquibase.org/xml/ns/dbchangelog标识的默认命名空间,一对用于ext命名空间,一对用于pro命名空间. . 请注意,默认名称空间和pro名称空间均引用其中包含版本号的URL. Liquibase确实会对XSD文档进行了更改,因此,如果您开始使用一项新功能,则可能需要更新您的更改日志以避免错误.

最后一点-Liquibase内部使用的XML解析器被配置为首先在类路径上查找XSD文档(包括在Liquibase jar文件中),因此它不会上网下载XSD文件. 如果编写使用自定义XSD的扩展名,则应同样将其包含在jar文件中.

by  ICOPY.SITE