Liquibase DB 独立插入语句

Posted

技术标签:

【中文标题】Liquibase DB 独立插入语句【英文标题】:Liquibase DB Independent Insert statements 【发布时间】:2012-07-05 23:44:13 【问题描述】:

我有一个使用 Liquibase 定义的 Oracle/mysql/PostgreSql 架构。我有一些插入语句。现在我想编写支持所有三个数据库的<insert> 标记,这样如果它是 MySql,它将使用自动增量功能和 Oracle 序列。我可以在不复制<insert> 标签的情况下实现这一点吗?

【问题讨论】:

要完全跨平台总是意味着你必须在功能方面支持最小公分母......你明白使用自动增量意味着你不知道主键记录,因此很难为您的变更集提供回滚逻辑? 【参考方案1】:

其实我觉得这比你想象的还要痛苦。我相信您必须使用不同的变更集来执行此操作。见How do I differentiate between databases when using e.g. sequence。

所以你会:

<changeSet id="x" author="y">
  <preConditions>
    <dbms type="oracle"/>
  </preConditions>
  ...
</changeSet>
<changeSet id="xx" author="y">
  <preConditions>
    <dbms type="mysql"/>
  </preConditions>
  ...
</changeSet>
<changeSet id="xxx" author="y">
  <preConditions>
    <dbms type="postgres"/>
  </preConditions>
  ...
</changeSet>

【讨论】:

以上是关于Liquibase DB 独立插入语句的主要内容,如果未能解决你的问题,请参考以下文章

将 UUID 值插入 PostgreSQL 数据库时出现 Liquibase 问题

liquibase的使用

Liquibase 与数据库交互

为啥 liquibase 无法解析 db.changelog 类路径?

liquibase hsql db列创建错误

如何为变更日志表指定架构位置