我想基于表"查询"创建一个变量。 (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位
答案 0 :(得分:1)
对query
的非引用引用可能会混淆plpgsql解析器,因为QUERY
也是RETURN QUERY ...
构造中使用的关键字。
通用解决方案是在有问题的标识符周围添加双引号:
DECLARE l_res "query"%ROWTYPE;
对于您的完全限定变体,还有另一个问题:只有模式名称可以为表名添加前缀,而不是数据库名称和模式名称。
这些声明也应该有效:
DECLARE l_res public."query"%ROWTYPE;
或
DECLARE l_res "public"."query"%ROWTYPE;