PostgreSQL 12 含嵌套UDT数组的INSERT语句编写求助
解决PostgreSQL复合类型数组的INSERT问题
针对你定义的嵌套复合类型和数组结构,以下是两种正确的INSERT写法:
方法1:使用ROW和ARRAY构造器(推荐,可读性高)
这种方式无需手动处理复杂的引号转义,PostgreSQL会自动完成类型转换:
INSERT INTO my_table (val_t) VALUES ( ARRAY[ ROW( 'text', ARRAY[ROW('text1'), ROW('text2')]::my_type1[] )::my_type2 ] );
方法2:使用字符串字面量(需严格遵循格式)
如果必须用字符串形式插入,要严格按照PostgreSQL复合类型数组的语法规则处理嵌套引号:
INSERT INTO my_table (val_t) VALUES ('{"(text,\"{\"\"text1\"\",\"\"text2\"\"}\")"}');
格式规则说明
- 复合类型元素必须用
()包裹,比如(text, ...)对应my_type2的结构 - 数组元素用
{}包裹,嵌套数组需逐层转义引号:字符串内的双引号用\"转义,字符串内的单引号用两个单引号''转义
验证插入结果
执行以下查询可确认数据是否正确插入:
-- 查看完整数据 SELECT * FROM my_table; -- 提取嵌套字段查看 SELECT val_t[1].val_s AS outer_text, val_t[1].val_t AS inner_array FROM my_table;
内容的提问来源于stack exchange,提问作者Ilya Mushchenko
相关产品推荐
相关产品推荐

