You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL中UNNEST(ARRAY[])未拆分数组仅返回带括号单行数据如何解决

问题根因

Spring Data JPA(Hibernate)向PostgreSQL传递List<String>类型参数时,会自动将其转换为数据库可识别的数组类型。原写法额外使用array[:myList]包裹参数,相当于把整个传入的数组作为新数组的单个元素,unnest展开后仅会生成1行,内容为整个列表拼接后的字符串,和预期不符。

解决方案
  • 方案1(推荐,无需额外序列化参数):去掉多余的array包裹,对传入参数显式转换为字符串数组类型后再调用unnest拆分,修正后的代码如下:
@Query(value = "INSERT INTO mydb.temp SELECT unnest(CAST(:myList AS text[]))", nativeQuery = true)
public void findrows(
    @Param("myList") List<String> myList
) throws MDBServiceException;
  • 方案2(基于JSON函数实现):提前在业务层将List序列化为标准JSON数组字符串(格式如["A01","B01"])再传入,调用json_array_text_elements完成拆分,对应写法:
@Query(value = "INSERT INTO mydb.temp SELECT json_array_elements_text(CAST(:myList AS json))", nativeQuery = true)
public void findrows(
    @Param("myList") String myListJson
) throws MDBServiceException;

以上写法执行后都会得到预期的逐行插入效果:

id
A01
B01

内容的提问来源于stack exchange,提问作者manoj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 20:57:21