如果sqitch中没有依赖项,是否可以恢复特定的更改?例如,我像下面的代码一样设置我的项目,并部署它并加载一些数据。大约一天后(也可能是同一天),涉众决定我需要向fct_tickets添加更多列,或者对该表进行另一次更改。
如果我尝试恢复fct_tickets,它将恢复所有后续表,这是一种遗憾,因为我已经向它们加载了数据。
我已经尝试了某些标志(-- in、-- to等),但它仍然希望恢复我的sqitch.plan文件中fct_tickets之后的所有内容。
sqitch add scm_example --template pg_create_schema -s schema=example -n 'Create schema for Example data.'
sqitch add fct_tickets --requires scm_example -n 'Create table for ticket data.'
sqitch add fct_chats --requires scm_example -n 'Create table for chat data.'
sqitch add fct_calls --requires scm_example -n 'Create table for call data.'
sqitch add dim_users --requires scm_example -n 'Create table for user mapping data.'
sqitch add dim_source_files --requires scm_example -n 'Create table to track all files downloaded from the SFTP.' 我可以修改表并添加列,但是当它是一个新的第一天的项目时,有一个干净的石板是很好的。
这没什么大不了的--我只是想知道我是不是错过了一些简单的东西,因为fct_tickets没有依赖项。
发布于 2019-05-03 23:09:27
不能,您不能恢复最近部署的更改以外的单个更改。这是设计好的。Sqitch使用类似于Git和Blockchain的Merkle tree pattern来确保部署的完整性。这意味着部署是按计划文件中指定的顺序链接的链。如果您已将Sqitch项目部署到已加载数据的环境中,则最好添加新更改以添加新列。
在产品发布之前进行数据库开发时,我经常遵循的一种模式是经常更改基础。这意味着更改fct_tickets部署脚本以添加新列,然后在fct_tickets^上退款,这将在fct_tickets之前恢复更改后的所有更改,然后重新部署它们。我避免在这样的系统中加载数据作为开发过程的一部分,而不是将对数据模型至关重要的数据保存在单独的更改中,或者保存在独立加载的单独文件中,比如单元测试装置。
如果您有一个测试系统或其他人向其中添加了数据的系统,并且它不是最终的标记版本,那么您最好的选择可能是将fct_tickets表转储到一个文件中,根据更改重新建立基址,然后从该文件重新加载数据。确保在列上设置默认值,或者修改转储文件以在将其加载到修改后的表之前添加每行中的数据。
https://stackoverflow.com/questions/55808786
复制相似问题