Postgres:修改每个数组元素

时间:2019-03-05 17:05:16

标签: arrays postgresql liquibase

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

我想将每个元素除以10,因此结果应为{10.0,10.1,10.2}。

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

替代方法是编写Java迁移,但我希望使用简单的查询...

谢谢!

更新:

出现的第二个问题是:

通过Liquibase java-migration脚本执行此操作时,您将获得liquibase.database.jvm.JdbcConnection(通过liquibase.change.custom.CustomTaskChange),它当然不支持postgres-arrays = /。

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

1 个答案:

答案 0 :(得分:3)

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

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