BUG #4633: Bug in PL/PgSQL "SELECT .. INTO" statement parser

Started by Oleg Serovabout 17 years ago2 messagesbugs
Jump to latest
#1Oleg Serov
serovov@gmail.com

The following bug has been logged online:

Bug reference: 4633
Logged by: Oleg
Email address: serovOv@gmail.com
PostgreSQL version: PostgreSQL 8.3
Operating system: CentOS
Description: Bug in PL/PgSQL "SELECT .. INTO" statement parser
Details:

Here is an example:

CREATE TABLE test2 (
id BIGINT,
chunk_id BIGINT
);
CREATE TABLE test1 (
id BIGINT
);

CREATE OR REPLACE FUNCTION "bug" () RETURNS pg_catalog.void AS
$body$
DECLARE
row_test1 test1%rowtype;
row_test2 test2%rowtype;
BEGIN
SELECT test1, test2
FROM test1 JOIN test2 ON(chunk.id = test2.chunk_id)
LIMIT 1
INTO row_test1, row_test2;

END;
$body$
LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY DEFINER;

Will throw error:
ERROR: LIMIT #,# syntax is not supported
HINT: Use separate LIMIT and OFFSET clauses.
QUERY: SELECT test1, test2 FROM test1 JOIN test2 ON(chunk.id =
test2.chunk_id) LIMIT 1, 0, $1
CONTEXT: SQL statement in PL/PgSQL function "bug" near line 8

********** Ошибка **********

ERROR: LIMIT #,# syntax is not supported
SQL state: 42601
Подсказка:Use separate LIMIT and OFFSET clauses.
Контекст:SQL statement in PL/PgSQL function "bug" near line 8

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Oleg Serov (#1)
Re: BUG #4633: Bug in PL/PgSQL "SELECT .. INTO" statement parser

"Oleg" <serovOv@gmail.com> writes:

DECLARE
row_test1 test1%rowtype;
row_test2 test2%rowtype;
BEGIN
SELECT test1, test2
FROM test1 JOIN test2 ON(chunk.id = test2.chunk_id)
LIMIT 1
INTO row_test1, row_test2;

Can't do that. The INTO target can be either a row variable or a list
of scalar variables ... not a list of row variables.

You could probably make it work by just making the target be a "record"
variable that'd wind up containing two composite fields.

regards, tom lane