有没有办法在postgres中比较软件版本(例如X.Y.Z〉A.B. C)?我正在搜索string/varchar或“version”类型的函数。
我发现http://pgxn.org/dist/semver/doc/semver.html,但我正在寻找替代品(不那么容易部署..)
多谢了。
有没有办法在postgres中比较软件版本(例如X.Y.Z〉A.B. C)?我正在搜索string/varchar或“version”类型的函数。
我发现http://pgxn.org/dist/semver/doc/semver.html,但我正在寻找替代品(不那么容易部署..)
多谢了。
6条答案
按热度按时间bnlyeluc1#
使用较便宜的**
string_to_array()
**。此处不需要昂贵的正则表达式:老SQLF
xqk2d5yq2#
您可以将版本拆分为数组,然后执行array comparison。
演示
roqulrg33#
如前所述,一个简单的方法是使用数字格式的版本。变量'server_version_num'包含数字格式的版本。
例如:
选择当前设置(“服务器版本号”)
返回一个易于与其他版本号进行比较的数字。
w8biq8rn4#
更进一步Erwin's answer,我们可以创建一个函数来比较软件版本和需求(如in ruby)。我已经写了一个函数来做这个,使用它:
下面是代码和测试:
有关更多实现细节,请参见my blogpost on that topic。
sauutmhj5#
另一种方法是使用
这将返回一个比较简单的版本号,例如90610对应9.6.10。
更新
根据下面的注解澄清此答案。此处生成的版本号是机器可读的。它被设计为唯一的,以避免冲突。
例如,Postgres版本
12.1
将生成120001
,而12.10将生成120010
,等等https://database.guide/how-to-check-your-postgresql-version/
0vvn1miw6#
也许你可以添加一个pl函数,在我的例子中,我使用了python和distutils.version:
您需要postgresql-plpython包。