当前位置: 首页 > 知识库问答 >
问题:

尽管我的解决方案中没有SQL脚本,但Liquibase Update命令不会从我的数据库中删除元素(表、函数、过程…

杜英叡
2023-03-14

我使用liquibase工具来管理一个postgres数据库。我的工作如下:

我有一个由不同文件夹组成的解决方案,其中包含负责模式创建、表创建、类型创建、过程创建等的SQL脚本。然后,我有一个xmlhtml" target="_blank">格式的ChangeLog文件,包含以下信息:

includeAll path=“#{server.workingdirectory}#/05-fonctions”relativeToChangeLogFile=“false”

includeAll Path=“#{Server.WorkingDirectory}#/06-存储过程”RelativeToChangeLogFile=“false”

我通过命令行运行liquibase:

liquibase--changelogfile=$(changelog.file.name)--driver=$(driver.name)--classpath=$(driver.classpath)--url=$(bdd.url)--username=$(bdd.login)--password=$(bdd.password)更新

这使Liquibase能够获取changelogFile中列出的不同文件夹中的所有SQL脚本,将其与url$(bdd.url)处的当前数据库进行比较,并生成一个包含要执行的所有SQL查询的delta脚本,以获得与我的解决方案相对应的数据库。

当我添加新的脚本(新的表或过程)或修改现有的脚本时,我的数据库被命令行正确更新,正如预期的那样。但当我从解决方案中删除脚本时,它不会执行任何操作。说得更实际一点,下面是我想要的:

>

  • 我有一个包含查询“CREATE TABLE MY_TABLE”的SQL文件,位于文件夹“04-tables”中。

    我执行上面的update命令,它在我的数据库中创建表“my_table”。

    我终于不想在我的数据库中再看到这个表了。因此,我想简单地从解决方案中删除相应的SQL脚本,然后再次运行“update”命令,简单地删除数据库中的表,通过liquibase“update”命令自动生成一个“drop table my_table”。但这并不起作用,因为当我删除sql文件时,Liquibase不会记录任何更改(而当我添加或修改文件时它会记录更改)。

  • 共有1个答案

    魏刚豪
    2023-03-14

    您将需要显式地编写一个删除表的脚本。如果您已将回滚SQL指定为原始SQL脚本的一部分,则另一种选择是回滚更改。

    有一个专业版本选项可以回滚单个更新,在自由/社区版本中,你可以按顺序回滚最后几个更改

    Ex;我做过“LiquiBase rollbackCount 5”将回滚应用的最后5个更改,这些更改只有在我将回滚sql编码为脚本的一部分时才会应用。

    --回滚删除表test.user1;删除表test.cd_activity;

     类似资料:
    • 我使用liquibase工具来管理postgres数据库。我的工作如下: 我有一个由不同文件夹组成的解决方案,其中包含负责模式创建、表创建、类型创建、过程创建等的SQL脚本。。。然后,我有一个xml格式的变更日志文件,其中包含以下信息: includeAll path=“#{Server.WorkingDirectory}#/02-Schema”relativeToChangelogFile=“f

    • 这段代码连接到数据库 这是原始相册DAO的代码,我正在尝试按名字删除相册,我添加了albumDAO来测试是否连接了ti,但它仍然不工作

    • 解决了它,但仍然不明白ListNode的这些基本部分(问题说明附后): 1.“1->2->3->3->4->5->3”是Java中ListNode的标准表达式吗?removeElements中的参数是“head”,它看起来像一个节点,它怎么可能输入一个ListNode,还是一个“嵌套的”ListNode? 2.“removeElements”函数“return”“dummy.next”,它的类型与

    • 我正试图从数据库中删除一行,但得到以下错误

    • 问题内容: 我已经开发了像这样的数组列表 现在我的问题是:如果我想从列表中删除“ 8”,哪种方法更好? 第一种方式: 第二种方式: 现在,请从性能的角度建议其中哪一个效率更高,速度更快,并且还有其他任何类似于内置函数的方法,通过使用它,我们可以删除重复项而无需进行过多迭代。 问题答案: 在性能方面,它们应该相似。你测试了吗 如果要使用内置方法,则可以达到类似的性能(通过测试确认): 最后,如果您想

    • 问题内容: 在SQL Server中有批量删除的解决方案吗? 我不能使用TRUNCATE,因为我想使用WHERE来限制行。 是否有诸如批量复制(bcp)之类的用于删除数据的东西? 问题答案: 不。 您需要带WHERE子句的DELETE:这是标准SQL。 您可以做的是批量删除,如下所示: 或者,如果您要删除很高比例的行…