允许插件的 Flyway 和应用程序
Flyway & Applications that allow plugins
我正在开发一个允许使用插件的网络应用程序(插件不会在运行时改变。相反,它更像是一个客户订购软件和插件 A、B、C,然后选择将很少改变)。
一些插件需要在数据库架构中添加自己的表。核心模式目前由 flyway 管理,这使得迁移变得如此整洁和轻松,我想继续这样做。
新表应该在相同的架构中创建,以便可以共享 JDBC- 连接,并且插件表可以具有核心表的外键。
但是据我了解,flyway 不接受引用相同模式的多个 flyway 实例。那是对的吗?有没有其他方法可以使场景正常工作?
The new tables should be created in the same schema so that JDBC-connections can be shared and that plugin tables can have foreign keys to core tables.
不一定是这样。您可以为每个插件提供自己的架构和 Flyway 实例。您可以在模式之间有外键,并且您可以通过同一个连接引用多个模式。
如果这不是一个选项,您仍然可以为每个插件提供一个 Flyway 实例(每个插件都有自己的元数据 table),请注意,如果它们都指向相同的模式,调用 clean( ) 在其中任何一个上,将擦除整个模式。
最后,您还可以只拥有一个版本控制命名空间,其中某些迁移在某些环境中根本不存在(未安装插件)。
我正在开发一个允许使用插件的网络应用程序(插件不会在运行时改变。相反,它更像是一个客户订购软件和插件 A、B、C,然后选择将很少改变)。
一些插件需要在数据库架构中添加自己的表。核心模式目前由 flyway 管理,这使得迁移变得如此整洁和轻松,我想继续这样做。 新表应该在相同的架构中创建,以便可以共享 JDBC- 连接,并且插件表可以具有核心表的外键。
但是据我了解,flyway 不接受引用相同模式的多个 flyway 实例。那是对的吗?有没有其他方法可以使场景正常工作?
The new tables should be created in the same schema so that JDBC-connections can be shared and that plugin tables can have foreign keys to core tables.
不一定是这样。您可以为每个插件提供自己的架构和 Flyway 实例。您可以在模式之间有外键,并且您可以通过同一个连接引用多个模式。
如果这不是一个选项,您仍然可以为每个插件提供一个 Flyway 实例(每个插件都有自己的元数据 table),请注意,如果它们都指向相同的模式,调用 clean( ) 在其中任何一个上,将擦除整个模式。
最后,您还可以只拥有一个版本控制命名空间,其中某些迁移在某些环境中根本不存在(未安装插件)。