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

Postgres扩展返回rdb schema自定义类型数组时提示类型不存在的问题咨询

解决方案

1. 正确使用带Schema限定的数组类型语法

在函数的RETURNS子句中,直接使用rdb.token[](注意类型名的大小写要和创建时完全一致)。如果你的自定义类型是大小写敏感的(比如创建时用了双引号CREATE TYPE rdb."Token" AS ...),则需要写成rdb."Token"[]。

示例代码:

CREATE FUNCTION rdb.my_func()
RETURNS rdb.token[]
AS $$
-- 示例逻辑:构造并返回token类型数组
RETURN ARRAY[(1, 'sample1')::rdb.token, (2, 'sample2')::rdb.token];
$$ LANGUAGE plpgsql;

2. 使用ARRAY OF语法(更直观)

Postgres支持ARRAY OF语法声明数组返回类型,这种写法可读性更强,同样能明确指定Schema:

CREATE FUNCTION rdb.my_func()
RETURNS ARRAY OF rdb.token
AS $$
-- 函数逻辑
RETURN ARRAY[(1, 'sample1')::rdb.token, (2, 'sample2')::rdb.token];
$$ LANGUAGE plpgsql;

3. 确保函数归属目标Schema

务必将函数创建在rdb Schema下(即CREATE FUNCTION rdb.my_func(...)),这样Postgres在解析函数依赖时,会优先关联同Schema内的类型,降低search_path带来的影响。

关于单个类型能正常工作的原因

当函数返回单个自定义类型时,Postgres会自动在函数所在的Schema中查找该类型,即便search_path不包含这个Schema也能匹配到。但数组类型的解析逻辑不同:Postgres会先解析数组的元素类型,这一步依赖search_path,因此必须显式指定Schema才能找到token类型。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 12:55:09