如何在 PostgreSQL 中管理初始数据?
How to manage initial data in PostgreSQL?
我有一个带有 postgresql 数据库的项目。我正在使用 Flyway 处理迁移。现在我有了一些初始数据,我想在应用程序启动时将其添加到数据库中。这是一开始就应该始终存在的数据。我怎样才能正确处理这个数据初始化?
我一直在考虑使用 Flyways repeatable migrations。如果 sql 文件的哈希值发生变化,它总是 运行。问题是,然后我需要用 sql 插入语句来构造它。问题是,如果对象已经存在怎么办?理想情况下,我希望我可以在 sql 中指定数据,然后迁移将它插入到 table(如果它不存在)。但它应该寻找每个字段,而不仅仅是通过主键。因为如果我想更改一行中的某些内容,那么我希望将其更新到数据库中。当然,我总是可以删除 table 的全部内容,然后 运行 进行迁移,但是这么长的 运行 是不是有点麻烦?像往常一样,经过少量编辑后,我需要删除 table 和 运行 迁移...我只是想知道是否有更好的方法来处理初始数据?
您可以通过像其他列一样包含列来使用 INSERT
或 COPY
指定主键值。对于前者,您可以添加 ON CONFLICT DO UPDATE
clause 以进行任何可能的更改。如果您使用的是 9.4 或更低版本,ON CONFLICT
不可用,因此您只能使用 DELETE
和普通的 INSERT
或 COPY
,尽管知道主键意味着您不必删除整个 table.
我有一个带有 postgresql 数据库的项目。我正在使用 Flyway 处理迁移。现在我有了一些初始数据,我想在应用程序启动时将其添加到数据库中。这是一开始就应该始终存在的数据。我怎样才能正确处理这个数据初始化?
我一直在考虑使用 Flyways repeatable migrations。如果 sql 文件的哈希值发生变化,它总是 运行。问题是,然后我需要用 sql 插入语句来构造它。问题是,如果对象已经存在怎么办?理想情况下,我希望我可以在 sql 中指定数据,然后迁移将它插入到 table(如果它不存在)。但它应该寻找每个字段,而不仅仅是通过主键。因为如果我想更改一行中的某些内容,那么我希望将其更新到数据库中。当然,我总是可以删除 table 的全部内容,然后 运行 进行迁移,但是这么长的 运行 是不是有点麻烦?像往常一样,经过少量编辑后,我需要删除 table 和 运行 迁移...我只是想知道是否有更好的方法来处理初始数据?
您可以通过像其他列一样包含列来使用 INSERT
或 COPY
指定主键值。对于前者,您可以添加 ON CONFLICT DO UPDATE
clause 以进行任何可能的更改。如果您使用的是 9.4 或更低版本,ON CONFLICT
不可用,因此您只能使用 DELETE
和普通的 INSERT
或 COPY
,尽管知道主键意味着您不必删除整个 table.