【问题标题】:How can I rename a sequence with liquibase?如何使用 liquibase 重命名序列?
【发布时间】:2016-03-11 17:32:31
【问题描述】:

我的数据库中有一个序列,它是通过 Liquibase 生成的。在重构过程中,我们决定不喜欢我们给它起的名字,我们想重命名它,保留它当前存在的所有数据。

alter a sequence 似乎可行,但我没有看到任何关于如何重命名序列的信息。有没有办法做到这一点,或者一个合理的解决方法?

(如果重要的话,我使用的是 Oracle SQL)

【问题讨论】:

    标签: liquibase


    【解决方案1】:

    虽然没有记录,但 Liquibase 支持这种重构。不确定在哪个版本中实施了此更改,但 class supporting the feature 已于 2014 年 1 月 30 日提交。有趣的是,original issue 仍未解决。

    无论如何,重构应该只适用于 OraclePostgres。我已经在 Oracle 上使用 Liquibase 3.4.1 对其进行了测试:

    databaseChangeLog:
      - changeSet:
          id: change_set_id
          author: me
          dbms: oracle
          changes:
            - renameSequence:
                oldSequenceName: old_name_seq
                newSequenceName: new_name_seq
    

    上面的重构是 YAML 格式,但是你很容易猜到它的 XML 对应。

    在 Oracle 上,这会生成以下语句:

    RENAME old_name_seq TO new_name_seq;
    

    另外2个支持的参数是catalogNameschemaName

    【讨论】:

    • 我刚刚在 Postgres 上使用 XML 格式使用 Liquibase 3.5.3 进行了尝试,但没有成功。可能是正在根据其架构验证 XML 文件,该架构不包含此作为有效元素。
    • @TimDean 很好,也许这解释了为什么该功能没有正式记录。它适用于 Oracle/YAML。
    • 我必须使用 liquibase.org/xml/ns/dbchangelog/dbchangelog-3.5.xsd 才能将 renameSequence 与 XML 更改日志一起使用
    【解决方案2】:

    目前没有用于重命名序列的内置重构。如果您的数据库引擎支持它,您可以使用<sql><sqlFile> 更改来执行任何支持的方法。

    您说您使用的是 Oracle SQL。 RENAME 语句允许重命名序列。所以你的 Liquibase 脚本看起来像这样:

    <sql>RENAME old_sequence_name TO new_sequence_name</sql>
    

    【讨论】:

    • 显然,情况不再如此。见my answer
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-27
    • 2018-09-24
    • 1970-01-01
    • 2022-09-30
    • 2023-04-03
    • 2018-03-26
    • 2014-03-08
    相关资源
    最近更新 更多