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

从setof text生成的数组与字符串构造的数组无法匹配

问题分析与解决

差异解读

你看到的差异本质是类型/结构不匹配:

  • have是一维text[]数组,包含4个独立的text元素:level、field_lookup、field_data、levels_insert_return
  • want是一维text[]数组,但只有1个元素,这个元素是一个数组格式的字符串:{level,field_lookup,field_data,levels_insert_return},而不是拆分后的独立元素

简单说就是你把「数组本身」当成了数组里的一个字符串元素,两边结构完全不一样。

修复方案

直接用正确的一维数组作为对比目标,不要用嵌套格式的字符串:

写法1:直接构造目标数组

用ARRAY[]语法生成和ARRAY(select shared_types())同类型的一维text数组:

SELECT is(
  ARRAY(SELECT shared_types()),
  ARRAY['level', 'field_lookup', 'field_data', 'levels_insert_return'],
  'shared_types() returns expected set of types'
);

写法2:字符串转正确格式的数组

如果一定要用字符串形式,要写成标准的一维text数组字符串(每个元素用双引号包裹,整体用大括号),再强制转成text[]类型:

SELECT is(
  ARRAY(SELECT shared_types()),
  '{"level","field_lookup","field_data","levels_insert_return"}'::text[],
  'shared_types() returns expected set of types'
);

为什么原来的写法失败

你写的'{"{level,field_lookup,field_data,levels_insert_return}"}'会被PostgreSQL解析为:

  • 一个text[]数组
  • 数组里只有1个元素,值为字符串{level,field_lookup,field_data,levels_insert_return}
    而ARRAY(select shared_types())是有4个元素的text[]数组,两者结构和内容完全不匹配,所以测试失败。

内容的提问来源于stack exchange,提问作者Edmund's Echo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 10:51:00