如何使用Liquibase重命名序列?

4
我在我的数据库中有一个序列,是通过Liquibase生成的。在重构期间,我们决定不喜欢给它的名称,并希望重命名它,同时保留当前存在的所有数据。
似乎可以更改序列,但我没有看到关于如何重命名序列的任何信息。是否有一种方法来做到这一点,或者一个合理的解决方案?
(如果有影响的话,我正在使用Oracle SQL)
2个回答

7
尽管没有记录,但Liquibase支持此重构。不确定该更改是在哪个版本中实现的,但支持此功能的类于2014年1月30日提交。有趣的是,原始问题仍未解决。
无论如何,这种重构只能在OraclePostgres上运行。我已经在Liquibase 3.4.1上测试了Oracle
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;

另外支持的两个参数是catalogNameschemaName


1
我刚刚尝试了使用 Liquibase 3.5.3 在 Postgres 上使用 XML 格式,但它没有起作用。可能是因为 XML 文件正在根据其模式进行验证,而该模式不包括此作为有效元素。 - Tim Dean
@TimDean 嗯,也许这就解释了为什么这个功能没有正式记录。我在使用Oracle/YAML时成功了。 - jFrenetic
我必须使用http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.5.xsd才能在XML更改日志中使用renameSequence。 - Błażej Kocik

6

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

您说您正在使用Oracle SQL。 RENAME 语句允许重命名序列。因此,您的Liquibase脚本将如下所示:

<sql>RENAME old_sequence_name TO new_sequence_name</sql>

显然,情况已经不再是这样了。请参见我的答案 - jFrenetic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接