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

PostgreSQL自定义seecols函数报错:查询结构与返回类型不匹配

解决PostgreSQL自定义函数返回类型不匹配问题

报错原因是你定义的函数返回表字段类型,和information_schema.columns查询结果的实际类型不严格匹配。column_name实际类型是information_schema.sql_identifier,data_type是information_schema.character_data,尽管和varchar兼容,但PostgreSQL执行时会因为类型不严格匹配抛出错误。

下面是两种修正方案:

方案1:匹配原字段的精确类型

直接修改函数返回类型定义,和查询源字段类型保持一致:

CREATE OR REPLACE FUNCTION seecols(table_name text) 
RETURNS TABLE (column_name information_schema.sql_identifier, data_type information_schema.character_data) 
AS $func$
DECLARE
    _query varchar;
BEGIN
    -- 按字母顺序显示列
    _query := 'SELECT column_name, data_type FROM information_schema.columns WHERE table_name = '''||table_name||''' ORDER BY column_name ASC';
    RETURN QUERY EXECUTE _query;
END;
$func$ LANGUAGE plpgsql;

方案2:动态查询中显式转换类型

如果想保留varchar的返回类型定义,在动态SQL里把字段转换为varchar:

CREATE OR REPLACE FUNCTION seecols(table_name text) 
RETURNS TABLE (column_name varchar, data_type varchar) 
AS $func$
DECLARE
    _query varchar;
BEGIN
    -- 按字母顺序显示列
    _query := 'SELECT column_name::varchar, data_type::varchar FROM information_schema.columns WHERE table_name = '''||table_name||''' ORDER BY column_name ASC';
    RETURN QUERY EXECUTE _query;
END;
$func$ LANGUAGE plpgsql;

注意调用方式

调用函数时建议用以下方式,直接获取分列的结果:

SELECT * FROM seecols('organizations');

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 04:55:45