我有一个包含整数数组的 JSONB 列,我想将其迁移到整数数组的本机列:
ALTER TABLE MyTable
ALTER COLUMN MyColumn TYPE int[] USING jsonb_array_elements(MyColumn)
但是,这不起作用:
变换表达式中不允许使用返回集合的函数
MyColumn
值如下所示:[25,32]
。
我相信这是因为
jsonb_array_elements
返回一组行集而不是单个值。正如评论中提到的,我尝试了类似的方法来创建新列,然后更新新列
ALTER TABLE MyTable
ADD COLUMN new_array_column int[];
UPDATE MyTable
SET new_array_column = (
SELECT array_agg(elem::int)
FROM jsonb_array_elements_text(MyColumn) AS elem
);
ALTER TABLE MyTable
DROP COLUMN MyColumn;
ALTER TABLE MyTable
RENAME COLUMN new_array_column TO MyTable;