Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何防止旧代码针对较新的数据库运行?(德扬戈语)_Sql_Database_Django_Versioning_Operations - Fatal编程技术网

Sql 如何防止旧代码针对较新的数据库运行?(德扬戈语)

Sql 如何防止旧代码针对较新的数据库运行?(德扬戈语),sql,database,django,versioning,operations,Sql,Database,Django,Versioning,Operations,我正在从事一个项目,该项目有多个共享一个公共数据库的服务。我希望将操作错误导致数据损坏的风险降至最低,我希望防止的一种情况是针对新数据库运行过时的代码 也就是说,我希望以某种方式在DB上标记一个版本,然后在启动时清除所有比该版本旧的服务。这样,一旦数据库被迁移,旧代码就不能针对新数据库启动。其他人有没有现成的方法来解决这个问题?我正在使用Django,但我也对其他框架使用的解决方案感兴趣 您可以有一个简单的表来存储应用程序与最小应用程序版本号 升级数据库脚本的一部分将填充此表。当应用程序启动时,

我正在从事一个项目,该项目有多个共享一个公共数据库的服务。我希望将操作错误导致数据损坏的风险降至最低,我希望防止的一种情况是针对新数据库运行过时的代码


也就是说,我希望以某种方式在DB上标记一个版本,然后在启动时清除所有比该版本旧的服务。这样,一旦数据库被迁移,旧代码就不能针对新数据库启动。其他人有没有现成的方法来解决这个问题?我正在使用Django,但我也对其他框架使用的解决方案感兴趣

您可以有一个简单的表来存储应用程序与最小应用程序版本号

升级数据库脚本的一部分将填充此表。当应用程序启动时,它将对照表中的最低版本检查其版本,如果版本过低,它将爆炸


我不知道有任何现有的软件包可以做到这一点,但它似乎没有多少代码可以实现。我喜欢这个想法。

如果您使用的是south,您可以编写一个中间件,检查所有应用程序中的所有迁移是否都已应用,如果没有,您可以让它对每个请求都响应一个硬编码的维护警告


当然,您只想运行一次。

我实际上想走另一条路。中间件必须确定是否有任何已应用的迁移在代码库中不存在,因为这意味着数据库较新,服务器进程应该退出。但是,严格来说,不需要进行架构迁移就可以导致不向后兼容的数据更改。是的,但是如果在没有迁移的情况下进行架构更改,那么(至少)会有两个问题……它可以检查文件系统中的迁移是否与数据库匹配,如果不匹配,则会出现一些有趣的问题,您不应该运行。