我们使用Phing的dbdeploy 任务来对我们的 PostgreSQL 数据库进行版本控制,这完全是一种很好的工作方式。在我们开始使用它之后,我对数据库版本并没有太多问题,除了一个令人烦恼的疑问:我们如何控制数据库包含的数据?
现在,我通常有一个包含一些示例数据的增量,用于测试,但在生产环境中,我想要生产数据,如实际有效数据。当然,我可以编写另一个 delta 截断 testdata 并插入实际数据,但不知何故,这感觉很笨重,因为 delta 中唯一的语言是 SQL。在编写这样的 delta 时,处理序列并确保外键关系正确是一件非常痛苦的事情。
所以我认为编写一个从 CSV 文件导入数据的 PHP 脚本可能是有意义的。这实际上会起作用,直到有另一个数据库更改重命名列,这将使 PHP 文件无用。当然,这很容易通过更新脚本以合并数据库更改并重新运行脚本来解决,但这很容易出错,这就是我首先开始使用 dbdeploy 的原因。
所以,我的问题是;在部署更改时如何处理数据,或者更准确地说:如何插入生产环境所需的数据?