Postgres:无效的类型名称“query%ROWTYPE”

时间:2014-06-16 14:43:03

标签: postgresql plpgsql rowtype

我想基于表"查询"创建一个变量。 (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位

1 个答案:

答案 0 :(得分:1)

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

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

DECLARE l_res "query"%ROWTYPE;

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

这些声明也应该有效:

DECLARE l_res public."query"%ROWTYPE;

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