如何使用 Liquibase XML 文件进行编程

Posted

技术标签:

【中文标题】如何使用 Liquibase XML 文件进行编程【英文标题】:How to program with Liquibase XML files 【发布时间】:2021-10-04 13:10:12 【问题描述】:

我习惯于使用纯 SQL 文件进行 DB 编程,但即使使用 IDE,我也很乐意看到类似的 SQL 命令,这样我就可以与我的开发人员坐下来解决我们遇到的问题

create or replace function register_user (
    p_email                email_type,
    p_username             username_type,
    p_plain_text_password  plain_text_password_type
)
returns token_type
as $$
declare
    certificate token_type;
begin
    insert into user_account
    (
        email,
        username,
        encrypted_password
    )
    values
    (
        lower (p_email),
        lower (p_username),
        crypt (p_plain_text_password, gen_salt('bf'))
    );

    select into
        certificate get_user_account_activation_certificate (p_email := lower (p_email));

    return certificate;
end
$$ language 'plpgsql';

我的 devops 团队希望我们使用像 Liquibase 这样的数据库迁移工具来帮助进行自动化部署,但 Liquibase 以 XML 形式管理对数据库的更改(复制自 here)。这对我来说完全陌生。想象一下,如果 GitHub 要求您只将更改写入代码,然后逐步应用这些更改

<?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">   
  <changeSet  author="authorName"  id="changelog-1.0">  
    <createTable  tableName="TablesAndTables">  
      <column  name="COLUMN1"  type="TEXT">  
        <constraints  nullable="true"  primaryKey="false"  unique="false"/>  
      </column>  
    </createTable>  
  </changeSet>  
</databaseChangeLog> 

对我来说,这种 XML 方法是完全不可接受的,如果我强迫他们编写这样的代码,我所有的数据库开发人员都会辞职。有哪些更好的方法可以在不完全阻碍进度的情况下使用 Liquibase。

我应该将函数/过程放在某个 sql 文件中吗? (建议here) 我是否应该逐步应用更改(例如,创建一个空白函数,然后定义其返回值,然后定义其参数...)? 我们是否应该在迁移的同时对数据库进行编程,然后将更改转换为 XML 并改用它? 是否有一些用于 Liquibase 的 GUI 可以更好地管理这些 XML 文件?

【问题讨论】:

【参考方案1】:

Liquibase 不要求您使用 XML。它也适用于 SQL。您可以通过以下几种方式来构建博文和 Liquibase 文档链接中说明的内容。

https://www.liquibase.org/blog/plain-sql

https://docs.liquibase.com/concepts/basic/sql-format.html

【讨论】:

以上是关于如何使用 Liquibase XML 文件进行编程的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 jar 文件中的 Liquibase 更改日志

如何使用 XSL 将 liquibase XML 转换为 CSV

如何告诉Liquibase忽略db.changelog * .xml?

Liquibase使用小结

Liquibase 更新错误

liquibase - 变更集的执行顺序