database - 在提交中保存数据库数据更改(如果不是 sqlite)

标签 database version-control

我们有一个使用 PostgreSQL 特定查询的 Rails 项目,因此即使在开发模式下使用 sqlite 也很不舒服。问题是,我喜欢跟踪数据库中的模式更改并根据请求省略运行的迁移,我也喜欢使用 git 跟踪数据库数据更改,这样我就不需要转储数据库并加载它在我的机器上。所以基本上我只想执行“git pull”并查看应用程序使用新模式和数据。

这里有哪些可能的策略? 我唯一想到的是使用一个简单的包装器,它接受一个 sql 查询,检查它是否有任何特定于数据库的部分并为开发环境重写它,这样我们仍然可以使用 sqlite。还有什么?

最佳答案

我不确定我是否理解您问题的所有细微差别 - 特别是关于使用 SQLite 与 PostgreSQL 的评论。如果是多DBMS系统,多系统测试就好;如果它是一个单一的 DBMS 系统,那么使用多个 DBMS 会让生活变得毫无意义。

此外,您还谈到了跟踪数据库中的模式更改...这是将有关模式更改的信息与 DBMS 自己的系统目录分开存储,还是您真的是想跟踪数据库模式更改(使用外部的东西)数据库 - 例如 VCS)?

您还谈到了跟踪“数据库数据更改”,我将其理解为“数据库表中的数据”。同样,我不清楚您是否正在考虑从数据库中转储某种类型的数据,这些数据涵盖了一天前和现在之间的差异,或者其他什么。

这些问题可能是您超过 4 小时未收到回复的原因。

当您谈论“简单包装器”时,您并不是在谈论我称之为简单的东西。它必须解析任意 SQL,确定其中是否有特定于 DBMS 的,然后应用重写规则。这是一项不平凡的工作。在正确的地方调用包装器也可能很重要 - 这取决于您用来访问 DBMS 的 API 集,等等。

还有什么?

  • 在生产和开发中使用相同的 DBMS?
  • 仅跟踪架构更改并非易事。您需要跟踪模式的本质(例如表名、列名等)而不是意外事件(是的,我之前正在重读 Brooks 的“No Silver Bullet”),例如 TabID(如果没有模式可能会有所不同)本质上不同)。但是,分析会告诉您模式是否不同。
  • 独立于架构更改跟踪数据更改也很重要。通常,此类数据量很大。您也许能够处理数据库的完整存档或完全卸载或导出 - 但确保数据每次都以相同的顺序呈现可能需要您多加注意。如果您不能确保正确的顺序,VCS 将记录由于顺序差异而发生的巨大变化。

以上所有内容都是可怕的“视情况而定”答案。这取决于:

  • 您的数据库管理系统
  • 您的数据库大小
  • 你的模式的波动性
  • 数据的波动性

幸运的是,它仅在一定程度上取决于您的 VCS 或平台。

关于database - 在提交中保存数据库数据更改(如果不是 sqlite),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/367273/

相关文章:

ruby-on-rails - Amazon SimpleDB 是我数据的不错选择吗?

java - Hibernate 实体 - 向实体添加业务逻辑?

svn - 仍然使用 CVS 的任何理由?

git - 是否可以在 Github 中使用 'fork a fork'?

database - 更新 MySQL 数据库中的动态表单字段

如果两列匹配数据,MySQL更新记录,否则插入行

sql-server - 是否有评估数据库设计的工具

version-control - Drupal 和版本控制

SVN:分支上的修订号

c# - 不属于 Windows 组或事件目录的人将如何访问 TFS 项目?