【问题标题】:How to manage initial data in PostgreSQL?如何管理 PostgreSQL 中的初始数据?
【发布时间】:2017-12-20 15:04:23
【问题描述】:

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

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

【问题讨论】:

    标签: sql postgresql flyway


    【解决方案1】:

    您可以使用INSERTCOPY 指定主键值,方法是像任何其他列一样包含列。对于前者,您可以添加 ON CONFLICT DO UPDATE clause 以进行任何可能的更改。如果您使用的是 9.4 或更低版本,则 ON CONFLICT 不可用,因此您只能使用 DELETE 和普通的 INSERTCOPY,尽管知道主键意味着您不必删除整张桌子。

    【讨论】:

    • ON CONFLICT DO UPDATE 子句真的也适用于 COPY 命令吗?我在网上没有看到这样的例子。仅使用 INSERT
    • 我本来可以更清楚的——它只适用于INSERT
    猜你喜欢
    • 1970-01-01
    • 2021-05-04
    • 1970-01-01
    • 2019-02-12
    • 2013-01-28
    • 2015-11-09
    • 1970-01-01
    • 2019-10-29
    • 1970-01-01
    相关资源
    最近更新 更多