【问题标题】:Populate database using spring / hibernate / flyway / postgresql使用 spring/hibernate/flyway/postgresql 填充数据库
【发布时间】:2020-07-10 07:23:12
【问题描述】:

我正在尝试用大约 150 个不同的值(每行一个)填充我的数据库。 到目前为止,我已经找到了两种不同的方法来实现插入,但似乎都不是最好的方法。

  • Flyway + Postgres:其中之一是创建一个迁移文件并使用 postgres 中的 COPY 命令,但要这样做,我需要向用户授予超级用户权限,并且似乎不是一个好的选择。

  • Spring boot:data.sql 文件放入包含大量插入的类路径中。如果我没记错的话,我将不得不写 150 条 insert into... 语句。

在以前的项目中,我使用过 liquibase,它有一个 loadData 命令,可以很方便地执行它所说的操作。您只需提供文件、表名即可。您最终会在表格行中获得 csv 文件值。

在flyway中是否有类似的方法可以做到这一点?填充数据库的最佳方法是什么?

【问题讨论】:

  • 150 次插入应该不会花费那么长时间,但听起来也许您可以只使用包含 150 行的值子句进行一次插入。
  • 是的.. 目前我只是用 150 个插入语句运行迁移。我只是想知道如果我有数千或数百万个值,最好的处理方法是什么。

标签: spring postgresql hibernate spring-boot flyway


【解决方案1】:

Flyway 是 Liquidbase 的直接竞争对手,因此如果您需要跟踪迁移的状态,管理分布式迁移(同一服务的多个实例同时启动,并且只有一个实例应该实际执行迁移),请在启动时检查哪个应该应用迁移并只执行相关迁移,以及您之前期望从“迁移管理系统”获得的所有其他好处,那么您应该使用 Flyway 而不是直接管理 SQL。

Spring boot 已与 Flyway 和 Liquidbase 集成,因此您可以将迁移放在“resources”文件夹中,定义几个属性,spring boot 将自动运行 Flyway。

比如here可以找到Flyway与spring boot的集成教程。

由于 flyway 的迁移是 SQL 文件 - 您可以在其中放置任何您想要的东西(我相信甚至是 plSQL),它甚至会管理每次迁移的事务,确保迁移“原子性”(全有或全无,没有部分迁移)。

因此,直接的方法是创建一个包含 150 个插入的 SQL 文件文件,并在 spring 中通过 flyway 甚至通过 maven 运行它,具体取决于您的实际设置。

如果你想要更细粒度的控制并且SQL不够灵活,可以在Java代码中实现迁移。见Official Flyway Documentation

【讨论】:

    【解决方案2】:

    其实是有办法的,你可以在官方文档的page找到更多信息

    你还需要添加一些 spring boot 属性:

    spring.flyway.enabled=true
    spring.flyway.locations=classpath:/db/migration
    spring.flyway.schemas=public
    

    房产详情here

    在我的情况下,根据我的需要使用 Repetables 脚本,但要注意前缀

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-28
      • 1970-01-01
      • 1970-01-01
      • 2018-01-29
      • 2017-07-11
      • 1970-01-01
      • 2017-05-22
      • 1970-01-01
      相关资源
      最近更新 更多