【发布时间】:2018-03-20 15:08:43
【问题描述】:
我们有一个旧的 Flyway 数据库更新
UPDATE plays SET album = (regexp_matches(album, '^6,(?:(.+),)?tv\d+'))[1]
...在 9.2 到 9.6 的任何 Postgres 版本上运行良好,但在最新的 Postgres 10 上运行失败。即使在没有任何 JDBC 的情况下直接运行也会发生。
ERROR: set-returning functions are not allowed in UPDATE
是否存在我从版本 10 发行说明中没有注意到的向后不兼容?有解决办法吗?
【问题讨论】:
-
你可以改用
regexp_match() -
是的,行为发生了变化。请参阅发行说明中的“更改出现在查询的 SELECT 列表 (Andres Freund) 中的集合返回函数的实现”项:postgresql.org/docs/current/static/release-10.html(“迁移到版本 10 ")
-
我会使用
substring (album FROM '^6,(?:(.+),)?tv\d+')。 -
@LaurenzAlbe,我需要解决方案来保持与旧 Postgres 版本的兼容性,所以如果你写一个答案,我会接受它。