我正试图用大约150个不同的值(每行一个)填充数据库。 到目前为止,我发现了两种不同的实现插入的方法,但是似乎都不是实现插入的最佳方法。
Flyway + Postgres:其中之一是创建迁移文件,并使用来自postgres的COPY
命令,但为此,我需要授予超级用户权限对用户而言,这似乎不是一个好选择。
春季启动:将data.sql
文件放入带有大量插入内容的类路径中。如果我没看错,我将不得不编写150条insert into...
语句。
在以前的项目中,我使用过liquibase,它有一个loadData
命令,可以很方便地执行所声明的操作。您只需要提供文件,表名即可。您最终在表行中输入了csv文件值。
在飞行路线上有类似的方法吗?填充数据库的最佳方法是什么?
答案 0 :(得分:0)
实际上,有一种方法,您可以在官方文档的page
中找到更多信息。您还需要添加一些spring boot属性:
spring.flyway.enabled=true
spring.flyway.locations=classpath:/db/migration
spring.flyway.schemas=public
属性详细信息here
答案 1 :(得分:0)
Flyway是Liquidbase的直接竞争对手,因此,如果您需要跟踪迁移状态,管理分布式迁移(同一服务的许多实例同时启动,并且实际上只有一个实例应该执行迁移),请在启动时检查应该应用迁移并仅执行相关的迁移,以及先前从“迁移管理系统”获得的所有其他好处,然后应该使用Flyway而不是直接管理SQL。
Spring Boot与Flyway和Liquidbase都集成在一起,因此您可以将迁移内容放置在“ resources”文件夹中,定义几个属性,Spring Boot将自动运行Flyway。
例如,here可以找到Flyway与Spring Boot集成的教程。
由于flyway的迁移是SQL文件-您可以在其中放置任何所需的文件(我相信甚至是plSQL),它甚至可以管理每次迁移的事务,从而确保迁移具有“原子性”(全部或全部,没有部分迁移)。>
因此,直接的方法是创建一个带有150个插入的SQL文件文件,并在春季通过飞行通道甚至通过maven运行它,具体取决于您的实际设置。
如果您想要更细粒度的控制并且SQL不够灵活,则可以用Java代码实现迁移。参见Official Flyway Documentation