gpt4 book ai didi

oracle - 如何扩展 Liquibase 以生成带有存储过程、函数和触发器的更改日志?

转载 作者:行者123 更新时间:2023-12-03 20:20:59 24 4
gpt4 key购买 nike

当前,当您尝试在现有数据库上生成更改日志时,Liquibase 有一些限制。它不导出以下类型的对象:

  • 存储过程、函数、包
  • 触发器
  • 类型

  • 引用: http://www.liquibase.org/documentation/generating_changelogs.html

    据我了解,我需要开发自己的 liquibase.snapshot.SnapshotGenerator执行。我知道如何从 Oracle 获取这些类型的对象,但我对如何从 Liquibase 实现此类接口(interface)有点迷茫。

    理想情况下,我猜 liquibase.database.Database还应扩展接口(interface)以添加以下额外方法:
  • public abstract boolean supportsPackages();
  • public abstract boolean supportsFunctions();
  • public abstract boolean supportsStoredProcedures();
  • public abstract boolean supportsTriggers();
  • public abstract boolean supportsTypes();
  • 最佳答案

    您是对的,一般策略是创建一个实现 SnapshotGenerator 的新类,但是您还需要执行其他几个步骤。一般的快照过程是:

  • Liquibase 搜索 SnapshotGenerator 实现并为它在数据库中找到的每个对象调用 addTo()。对于您的类型,您可能需要一个快速的“如果传递对象 instanceof Schema”,因为它们是属于模式的类型。
  • 您将需要创建实现 DatabaseObject 的新 Package、StoredProcedure 等对象。它们就像 liquibase.structure.core.Table 类并捕获对象的状态。它们在您的 SnapshotGenerator.addsTo() 方法中创建到可识别的点(名称、模式等集)
  • addTo() 方法添加的所有对象都将通过您的 SnapshotGenerator.snapshotObject() 方法运行,该方法将提取您最初没有获得的任何其他元数据,例如存储过程文本等。
  • 一旦 liquibase 有一个包含您的对象的快照,它会将快照与另一个快照进行比较(在 generateChangeLog 情况下是一个空快照),以确定在第二个快照中哪些对象丢失、意外和更改。然后它查找 MissingObjectChangeGenerator、UnexpectedObjectChangeGenerator 和 ChangedObjectChangeGenerator 的实现。对于 generateChangeLog,只有“缺失”对象,因此您将实现 MissingTriggerChangeGenerator、MissingPackagedChangeGenerator 等。他们的工作是创建 Change 实例以创建缺失的对象
  • Msising*ChangeGenerator 类可以返回 RawSqlChange 实例,或者您可以创建 Change 的新实现,例如 CreateTriggerChange。
  • 关于oracle - 如何扩展 Liquibase 以生成带有存储过程、函数和触发器的更改日志?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22172239/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com