PostgreSQL将JSONB整数数组列迁移至int[]列报错求助
解决JSONB数组转原生int[]列的报错问题
你之前的SQL报错是因为jsonb_array_elements是返回多行结果的集合函数,而ALTER COLUMN的USING子句要求为每一行返回单个转换后的值,所以这个函数不符合要求。
针对你的场景,有两种可行的转换方式:
方法一:直接强制转换(简洁高效)
利用JSONB数组的文本格式与PostgreSQL原生int[]格式的兼容性,直接做类型转换:
ALTER TABLE MyTable ALTER COLUMN MyColumn TYPE int[] USING MyColumn::text::int[];
方法二:聚合元素转换(更稳妥)
如果担心格式兼容问题,可以通过子查询逐个提取元素再聚合为int数组:
ALTER TABLE MyTable ALTER COLUMN MyColumn TYPE int[] USING ( SELECT array_agg(element::int) FROM jsonb_array_elements_text(MyColumn) AS element );
转换完成后,你可以执行SELECT MyColumn FROM MyTable;验证结果,原JSONB值[25,32]会被转为PostgreSQL原生数组格式{25,32}。
内容的提问来源于stack exchange,提问作者xBlue
相关产品推荐
相关产品推荐

