我正在做一个web应用程序,我需要为一些主要的更改做一个分支,事情是,这些更改需要更改数据库模式,所以我想把整个数据库放在git下。

我怎么做呢?是否有一个特定的文件夹,我可以保存在git存储库下?我怎么知道是哪个?我如何确定我放入了正确的文件夹?

我需要确定,因为这些更改是不向后兼容的;我可不能搞砸。

在我的例子中,数据库是PostgreSQL

编辑:

有人建议进行备份并将备份文件置于版本控制之下,而不是将数据库置于版本控制之下。说实话,我觉得这真的很难接受。

肯定有更好的办法。

更新:

好吧,没有更好的方法了,但我还是不太相信,所以我要稍微改变一下问题:

我想将整个数据库置于版本控制之下,我可以使用什么数据库引擎来将实际数据库置于版本控制之下,而不是转储?

sqlite是git友好的吗?

因为这只是开发环境,所以我可以选择任何我想要的数据库。

Edit2:

我真正想要的不是跟踪我的开发历史,而是能够从我的“新的根本性变化”分支切换到“当前稳定的分支”,并且能够用当前稳定的分支修复一些错误/问题等。这样,当我切换分支时,数据库就会自动地与我当前所在的分支兼容。 我不太关心实际数据。


当前回答

从本质上讲,您想要的可能是类似Post - Facto的东西,它将数据库的版本存储在数据库中。检查这个演示。

这个项目显然没有任何进展,所以它可能不会马上帮到你,但这是一个有趣的概念。我担心正确地做到这一点会非常困难,因为即使是版本1也必须获得所有的细节,以便让人们信任他们的工作。

其他回答

看一下RedGate SQL源代码控制。

http://www.red-gate.com/products/sql-development/sql-source-control/

这个工具是一个SQL Server Management Studio管理单元,它允许你用Git把你的数据库放在源代码控制下。

每个用户495美元的价格有点贵,但有28天的免费试用。

请注意 我和“红门”没有任何关系。

我推荐neXtep(链接被删除-域名被nsfw网站接管)来控制数据库的版本,它有一组很好的文档和论坛,解释了如何安装和遇到的错误。我已经对postgreSQL 9.1和9.3进行了测试,我能够让它在9.1中工作,但在9.3中似乎无法工作。

使用版本控制的数据库,现在有几个这样的数据库。

https://www.dolthub.com/blog/2021-09-17-database-version-control/

这些产品没有在其他类型的数据库上应用版本控制——它们是自己的数据库引擎,支持版本控制操作。因此,您需要迁移到它们,或者在它们的基础上开始构建。

我编写了其中一个,DoltDB,它结合了MySQL和Git的接口。看看这里:

https://github.com/dolthub/dolt

Irmin (branching + time travel) Flur.ee (immutable + time travel + graph query) XTDB (formerly called 'CruxDB') (time travel + query) TerminusDB (immutable + branching + time travel + Graph Query!) DoltDB (branching + time-travel + SQL query) Quadrable (branching + remote state verification) EdgeDB (no real time travel, but migrations derived by the compiler after schema changes) Migra (diffing for Postgres schemas/data. Auto-generate migration scripts, auto-sync db state) ImmuDB (immutable + time-travel)

有一个伟大的项目叫做“教义下的移民”,就是为了这个目的而建立的。

它仍然处于alpha状态,是为php构建的。

http://docs.doctrine-project.org/projects/doctrine-migrations/en/latest/index.html