每个版本的SQL更新文件和什么是内容

问题描述:

当部署我的Joomla组件我放入数据库的更新文件。即使数据库没有更改。这是必要的吗?每个版本的SQL更新文件和什么是内容

AND:什么是内容?我是否必须仅将这些SQL语句用于从版本3到版本4的更改,还是必须还有版本1和版本2的更改?

问候 DreiBaer

我已经做了一些测试,它看起来并不像你需要一个版本的组件,并不需要做任何数据库变化的SQL更新文件。但是,在旧的Joomla版本中,情况可能并非如此,请参阅下文。

当你安装您的组件上不已经有一个版本的组件的Joomla网站,其上运行的唯一的SQL文件是一个在你的清单文件的install节点引用。该文件可能类似于sql/install.mysql.utf8.sql

只要网站没有你的组件的任何版本,那么,即使你是安装更高版本如2.3.1,而这个新版本确实有一些SQL更新文件,这些文件将不会执行,只有该版本的安装文件(2.3.1)。但是,在这种情况下,SQL更新文件不会执行,它们的版本号会被解析,并且最大的版本号将存储在Joomla的模式表中的组件中。例如,如果组件的2.3.1版包含SQL更新文件0.0.1.sql,1.0.1.sql,1.2.1.sql和2.0.4.sql,那么在第一次安装此组件时,模式表将具有2.0.4的version_id。

更新组件安装SQL文件不会执行。 Joomla检查安装的组件的架构版本,然后按顺序执行架构版本号大于安装的架构版本号的每个SQL更新文件。例如,如果您安装了组件并且它的模式版本为1.5.2,并且您的更新包含SQL更新文件1.4.1,1.5.0,1.5.2,1.5.19和1.6.0,则仅限于SQL脚本1.5.19和1.6.0以该顺序执行。

如果您安装的第一次一个组件,它没有更新文件,然后将模式表中包含一个空白VERSION_ID场的纪录。如果您随后使用包含SQL更新文件的版本更新该组件,则原始模式版本将计算为零,并且将执行所有更新文件。

总之这是什么意思,是为组件的每个版本的SQL安装文件必须拥有所有必要的SQL语句来获取数据库到正确的状态,为您的组件版本。在安装时,即使安装了更高版本的组件,也不会运行更新,因此可以用来操纵数据库的唯一SQL是安装文件中的SQL。

因此,您的组件可以正确升级,您必须有SQL更新文件,可以采取无论安装的版本是由您试图更新到版本。例如,如果管理员在更新组件时落后了,并且他们安装了1.0.0版本并且希望直接更新到最新版本(如4.0.0),那么4.0.0版本需要包含从1到2的更新,2至3,3至4以及之间的任何破坏。

Joomla的文档中有this old article,它详细讨论了你所问的问题,但是它的过时(对于版本2.5),我认为信息不再准确。

本文指出,对于没有任何SQL更新的版本,必须有空白的SQL更新文件,否则后续更新SQL更新文件将不会执行,但是我已经测试过这个,似乎是一个问题。这在旧版本的Joomla中可能是正确的,但是与我在(3.5.7)上测试的版本不一样。

它可能是最好的实践,坚持文档中描述的约定 - 包括空的SQL更新文件,因为它不会伤害,并且我在测试中发现的行为是未记录的,将来可能会更改而不会发出警告。

该文档还指出,组件版本需要与更新SQL文件版本匹配,但我再次发现这不再正确。您可以使用完全独立于组件版本的SQL模式版本控制,而不会有任何问题。然而,再次保持架构和组件版本彼此同步可能是一个好主意 - 我想不出为什么你不这样做的好理由。