PostgreSQL中如何修改integer[]数组类型列内的指定元素值
PostgreSQL integer[] 数组元素批量替换方案
方案1(推荐,PostgreSQL 9.3及以上版本适用)
直接使用内置的array_replace函数即可满足需求,完整更新语句如下:
UPDATE initial_costs SET crew_member_ids = array_replace(crew_member_ids, 1, 10) WHERE 1 = ANY(crew_member_ids);
效果完全匹配你给出的示例:
- 空数组
{}不做修改直接返回 - 数组中所有等于
1的元素都会被替换为10,其余元素保持不变 - 不包含
1的数组不会被修改,复用你写的WHERE条件后仅处理受影响行,性能最优
你可以先执行下面的SELECT语句验证替换效果,确认无误后再执行更新操作:
SELECT crew_member_ids 替换前, array_replace(crew_member_ids, 1, 10) 替换后 FROM initial_costs WHERE 1 = ANY(crew_member_ids);
方案2(兼容更低版本PostgreSQL)
如果使用的PostgreSQL版本低于9.3,没有array_replace函数,可以通过拆分数组再聚合的方式实现:
UPDATE initial_costs SET crew_member_ids = ( SELECT array_agg(CASE WHEN elem = 1 THEN 10 ELSE elem END) FROM unnest(crew_member_ids) elem ) WHERE 1 = ANY(crew_member_ids);
内容的提问来源于stack exchange,提问作者Ryabchenko Alexander
相关产品推荐
相关产品推荐

