Postgres:修改每个数组元素

Postgres: modify each array element

我有一个 postgres 列 double[]: {100, 101, 102}。

我想将每个元素除以 10,所以结果应该是 {10.0, 10.1, 10.2}。

我只找到了使用 for 语句的解决方案,但是如何通过简单的查询来实现呢? (我需要通过liquibase更新)

另一种方法是编写一个 Java 迁移,但我更喜欢一个简单的查询...

提前致谢!

更新:

出现的第二个问题是:

当通过 Liquibase java-迁移脚本执行此操作时,您会得到一个 liquibase.database.jvm.JdbcConnection(通过 liquibase.change.custom.CustomTaskChange),这当然不支持 postgres-arrays =/。

如何以这种方式处理数组? (我用的是liquibase-core 3.5.5)

您需要取消嵌套、拆分,然后聚合回来。

update the_table
  set the_array = array(select t.val / 10 
                        from unnest(the_table.the_array) as t(val));

如果您需要保留数组中的原始顺序,请使用 with ordinality

update the_table
  set the_array = array(select t.val / 10 
                        from unnest(the_table.the_array) with ordinality as t(val,idx) 
                        order by t.idx);

要在 Liquibase 中 运行 这个,你需要使用 <sql> 更改

在线示例:https://rextester.com/IJGA96691