从flyway迁移中调用外部sql

Ram*_*ord 5 flyway

我有一个数据库,其中包含通常需要修改的视图和存储过程.我希望能够将这些视图存储在另一个目录中,并在编写迁移时包含sql代码.基本上,dir结构将是

views/
    my_view.sql
functions/
    my_func.sql
sql/
   V1__add_view.sql
Run Code Online (Sandbox Code Playgroud)

和V1__add_view.sql会是这样的

\i views/my_view.sql
Run Code Online (Sandbox Code Playgroud)

哪个目前在psql中有效,但在flyway迁移中不起作用.这样做的好处是,当我们想要进行更改时,我们可以修改视图,并将其包含在下一次迁移中.它还可以消除视图迁移中的大量复制粘贴.

有没有办法在flyway迁移中包含外部SQL脚本?

fis*_*shy 2

听起来您也许可以使用可重复迁移来完成此任务。

我认为 Flyway 不支持像 \i 语句那样调用外部脚本。如果您想尝试导入路径,您可以在脚本中使用占位符。

使用您的示例,使用 sql 迁移文件中的占位符

${my_view}
Run Code Online (Sandbox Code Playgroud)

当您调用flyway时,使用views/my_view.sql中的文本定义占位符替换值。我不确定你用什么来称呼 Flyway,但在 ant 中它会是这样的

<loadfile property="flyway.placeholder" srcfile="views\my_view.sql"/>
<flyway:migrate>
    <locations>
        <location path="database/migrations"/>
    </locations>
    <placeholders>
        <placeholder name="my_view" value="${flyway.placeholder}"/>
    </placeholders>
</flyway:migrate>
Run Code Online (Sandbox Code Playgroud)

该文档还有一个示例:https ://flywaydb.org/documentation/ant/migrate