Postgres: 修改每个数组元素

3
我有一个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)

2
有一个适当规范化的数据模型,这将变得非常容易。 - user330315
我知道,但另一方面的缺点是会有很多额外的表格、引用等等... 因为我们有大约8个属性作为数组,每个数组大约有3000个值。 - Thomas Stubbe
1个回答

10

您需要拆分、分组然后再聚合。

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


1
你是我的英雄!谢谢! - Thomas Stubbe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接