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
相关产品推荐
相关产品推荐

