【问题标题】:Postgres: invalid type name "query%ROWTYPE"Postgres:无效类型名称“query%ROWTYPE”
【发布时间】:2014-06-16 14:43:03
【问题描述】:

我想根据表“查询”(l_query query%ROWTYPE)创建一个变量,但我收到了这条消息:invalid type name "query%ROWTYPE" 我也尝试使用完全限定的表名l_query dbname.public.query%ROWTYPE,但它对我没有帮助。

CREATE OR REPLACE FUNCTION somefunc() RETURNS int AS $$ DECLARE l_res dbname.public.query%ROWTYPE; BEGIN return 1; END; $$ LANGUAGE plpgsql;

PS:我确实有表格查询。我检查了几次。我只在生产服务器上有这个错误。在本地,我运行它没有问题

版本

x86_64-unknown-linux-gnu 上的 PostgreSQL 9.2.4,由 gcc (Debian 4.7.2-5) 4.7.2 编译,64 位

【问题讨论】:

    标签: postgresql plpgsql rowtype


    【解决方案1】:

    query 的非引用引用可能会使plpgsql 解析器感到困惑,因为QUERY 也是RETURN QUERY ... 构造中使用的关键字。

    通用的解决方案是在有问题的标识符周围添加双引号:

    DECLARE l_res "query"%ROWTYPE;
    

    至于您的完全限定变体,还有另一个问题:只有模式名可以作为表名的前缀,而不是数据库名加模式名。

    这些声明也应该有效:

    DECLARE l_res public."query"%ROWTYPE;
    

    DECLARE l_res "public"."query"%ROWTYPE;
    

    【讨论】:

    • 谢谢,它帮助了我。我知道它可以是一个关键字,但我不知道一个引号来摆脱歧义
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-01
    • 2020-11-02
    • 2011-02-05
    相关资源
    最近更新 更多