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>
更改
我有一个 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>
更改