在DataGrip中为PostgreSQL添加numeric[][]类型列遇异常求助
PostgreSQL数组类型在DataGrip中被自动修改的问题解决
问题原因
- PostgreSQL中不存在
numeric[][]这种独立的官方类型,所有数组类型统一用[]后缀表示。numeric[]可以兼容存储一维、二维甚至更高维的数值数组,numeric[][]只是写SQL时的语法糖,本质和numeric[]完全等价。 - DataGrip的可视化表结构编辑器会自动校验并将非标准的类型写法转换成PostgreSQL的标准格式,所以保存时会把
numeric[][]替换成numeric[],这是IDE的标准化处理行为,并非报错或bug。
解决办法
1. 直接使用标准类型(推荐)
不用纠结显示的是numeric[],这个类型完全支持存储二维数组数据。比如插入二维数组可以这么写:
INSERT INTO your_table (target_column) VALUES ('{{1.1,2.2},{3.3,4.4}}'::numeric[]);
查询结果会保持二维数组的结构,PostgreSQL能正确处理多维数据的存储和读取。
2. 用DDL语句绕过可视化编辑器(特殊场景)
如果非要通过SQL语句指定numeric[][]的写法,可以直接执行ALTER TABLE语句修改列类型,跳过DataGrip的可视化界面:
ALTER TABLE your_table ALTER COLUMN target_column TYPE numeric[][] USING target_column::numeric[][];
但要注意,执行完后再打开可视化编辑器,IDE还是会显示成numeric[],因为这是PostgreSQL返回的官方类型名称。
内容的提问来源于stack exchange,提问作者serlingpa
相关产品推荐
相关产品推荐

