如何在PostgreSQL中管理初始数据?

时间:2017-07-15 17:52:00

标签: sql postgresql flyway

我有一个带postgresql数据库的项目。我正在处理与Flyway的迁移。现在我有一些初始数据,我想在应用程序启动时添加到数据库中。这是一个应该始终存在的数据。我怎样才能正确处理这种数据初始化?

我一直在考虑使用Flyways repeatable migrations。如果sql文件的哈希值发生变化,它总是运行。问题是,然后我需要用sql insert语句构造它。问题是,如果对象已经存在怎么办?理想情况下,我希望我可以在sql中指定数据,然后如果它不存在,则迁移将其插入到表中。但它应该寻找每个字段,而不仅仅是主键。因为如果我想在一行中更改某些内容,那么我希望更新到数据库。当然,我总是可以删除表中的所有内容,然后运行迁移,但从长远来看这不是很麻烦吗?就像在编辑之后一样,我需要删除表并运行迁移...我只是想知道是否有更好的方法来处理初始数据?

1 个答案:

答案 0 :(得分:1)

您可以使用INSERTCOPY指定主键值,方法是列出与其他列类似的列。使用前者,您可以添加ON CONFLICT DO UPDATE clause以进行任何可能的更改。如果您使用9.4或更低版本,则ON CONFLICT不可用,因此您仍然遇到DELETE和普通INSERTCOPY,虽然知道主键意味着你不必删除整个表。