Postgres: invalid type name “query%ROWTYPE”

烂漫一生 提交于 2019-12-13 03:55:47

问题


I want to create a variable based on the table "query" (l_query query%ROWTYPE), but I got this message: invalid type name "query%ROWTYPE" I also tried to use the fully qualified table name l_query dbname.public.query%ROWTYPE, but it didn't help me ether.

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

PS:I do have the table query. I checked it a couple of times. I have this error only on the production server. Locally, I ran it with no problems

version

PostgreSQL 9.2.4 on x86_64-unknown-linux-gnu, compiled by gcc (Debian 4.7.2-5) 4.7.2, 64-bit


回答1:


A non-quoted reference to query probably confuses the plpgsql parser since QUERY is also a keyword used in the RETURN QUERY ... construct.

The generic solution is to add double quotes around the problematic identifier:

DECLARE l_res "query"%ROWTYPE;

As for your fully qualified variant, there's another problem with it: only a schema name may prefix a table name, not a database name plus schema name.

These declarations should also work:

DECLARE l_res public."query"%ROWTYPE;

or

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


来源:https://stackoverflow.com/questions/24246269/postgres-invalid-type-name-queryrowtype

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!