2013-03-13 311 views
0

好的,所以问题可能出在我的方法liquibase上,我已经在数据库端实现了一些更改,并且我想创建更改集,所以我只需将一个新的sql文件添加到我的变更集中即可。当我尝试运行luquibase update命令时,出现错误,告诉我数据库中存在一些列。Liquibase:更新脚本(当数据库中已经实现了一些更改时)

对我来说,正常的是,在创建changeset脚本之前,我尝试在数据库中添加列(即使用PhpMyAdmin)。然后我想与其他开发人员分享这些变化,所以我生成了sql(来自我的更改),将其添加到sql文件中,然后使用变更集启动此文件。 有人可以告诉我我做错了什么吗?

这个问题涉及到当我向mysql表中添加一些新列的情况,然后我创建了SQL文件白色alter_table脚本,然后运行liquibase update命令。

回答

0

请勿在数据库中进行手动更新。所有模式更改必须使用liquibase或其他方式完成 - 就像你的情况一样 - 你的变更集将与现有模式冲突。

+0

我知道问题来自我的sql alter的重复。所以最好的解决方案是有两个数据库?一个用于测试新的SQL,另一个用于部署? – user1119698 2013-03-13 14:14:54

+0

否。如果您想进行更改,请创建一个新的更改集并在本地应用。切勿手动更改数据库。 – 2013-03-13 15:17:01

+0

本地=在我的情况下测试。我希望Liquibase能够识别我在数据库中的变化,并且可以将它们与变更集合在一起。不幸的是,当然,我只能使用变更集,但有时对我来说更好(特别是与相关的表)在PhpMyAdmin中创建sql。 – user1119698 2013-03-13 20:05:54

0

虽然所有对数据库的更改都是在Liquibase完成之前完成的,但确实存在这种情况。一个是你所描述的用例。另一种方法是将修补程序应用于生产并需要合并回开发。

如果您确定已将变更集应用于环境,请考虑运行changelogSync。它会断言所有的变更集已经被应用,并且会用适当的信息更新Liquibase元表。

虽然不理想,但我们认为changelogSync是真实世界应用程序所必需的,有时候生活没有按照我们的意愿进行。这就是为什么我们确保在数据库中清楚地公开它。我们认为它在现实和理想主义之间达成了平衡。

相关问题