postgresql Postgres:无效的类型名称“查询%ROWTYPE”

camsedfj  于 2022-11-04  发布在  PostgreSQL
关注(0)|答案(1)|浏览(217)

我想创建一个基于表“query”(l_query 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:我确实有表查询。我检查了几次。我只在生产服务器上有这个错误。在本地,我运行它没有问题

version

PostgreSQL 9.2.4在x86_64-未知的Linux-gnu上,由gcc(Debian 4.7.2-5)4.7.2编译,64位

ymdaylpp

ymdaylpp1#

query的非引用引用可能会混淆plpgsql解析器,因为QUERY也是RETURN QUERY ...构造中使用的关键字。
一般的解决方案是在有问题的标识符前后添加双引号:

DECLARE l_res "query"%ROWTYPE;

至于您的完全限定变体,它还有另一个问题:只有模式名可以作为表名前缀,而不是数据库名加模式名。
这些声明也应该起作用:

DECLARE l_res public."query"%ROWTYPE;

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

相关问题