我有一个带postgresql数据库的项目。我正在处理与Flyway的迁移。现在我有一些初始数据,我想在应用程序启动时添加到数据库中。这是一个应该始终存在的数据。我怎样才能正确处理这种数据初始化?
我一直在考虑使用Flyways repeatable migrations。如果sql文件的哈希值发生变化,它总是运行。问题是,然后我需要用sql insert语句构造它。问题是,如果对象已经存在怎么办?理想情况下,我希望我可以在sql中指定数据,然后如果它不存在,则迁移将其插入到表中。但它应该寻找每个字段,而不仅仅是主键。因为如果我想在一行中更改某些内容,那么我希望更新到数据库。当然,我总是可以删除表中的所有内容,然后运行迁移,但从长远来看这不是很麻烦吗?就像在编辑之后一样,我需要删除表并运行迁移...我只是想知道是否有更好的方法来处理初始数据?
答案 0 :(得分:1)
您可以使用INSERT
或COPY
指定主键值,方法是列出与其他列类似的列。使用前者,您可以添加ON CONFLICT DO UPDATE
clause以进行任何可能的更改。如果您使用9.4或更低版本,则ON CONFLICT
不可用,因此您仍然遇到DELETE
和普通INSERT
或COPY
,虽然知道主键意味着你不必删除整个表。