BUG #1370: Problem with arrays in PL/PGSQL

From: "David Bowen" <dmb0317(at)frontiernet(dot)net>
To: pgsql-bugs(at)postgresql(dot)org
Subject: BUG #1370: Problem with arrays in PL/PGSQL
Date: 2005-01-03 03:11:05
Message-ID: 200501030311.j033B5bM021078@developer.pgadmin.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs


The following bug has been logged online:

Bug reference: 1370
Logged by: David Bowen
Email address: dmb0317(at)frontiernet(dot)net
PostgreSQL version: 8.0
Operating system: Fedora Core 2/Athlon 950 processor
Description: Problem with arrays in PL/PGSQL
Details:

PostgreSQL 8.0.0rc2

test=# \d scores
Table "public.scores"
Column | Type | Modifiers
---------------+---------+-----------
contestant_id | integer |
category | integer |
score | integer |

test=# select * from scores;
contestant_id | category | score
---------------+----------+-------
1 | 1 | 70
1 | 2 | 73
1 | 3 | 69
2 | 1 | 72
2 | 2 | 70
2 | 3 | 73
3 | 1 | 66
3 | 2 | 75
3 | 3 | 72
(9 rows)

test=# \i /home1/dmb/crosstab
CREATE FUNCTION
test=# select crosstab(1);
ERROR: array value must start with "{" or dimension information
CONTEXT: PL/pgSQL function "crosstab" line 5 at block variables
initialization
$ cat /home1/dmb/crosstab
CREATE OR REPLACE FUNCTION crosstab (integer) RETURNS integer[] AS '
DECLARE
contestant ALIAS FOR $1;
row scores%ROWTYPE;
s integer[3]:= (-1,-1,-1);
BEGIN
FOR row IN SELECT * FROM scores where contestant_id = contestant LOOP
s[row.category] := row.score;
END LOOP;
RETURN s;
END;
' LANGUAGE 'PLPGSQL';

Changing
s integer[3]:= (-1,-1,-1);
to
s integer[3]:= {-1,-1,-1};

test=# \i /home1/dmb/crosstab
CREATE FUNCTION
test=# select crosstab(1);
ERROR: syntax error at or near "{" at character 9
QUERY: SELECT {-1,-1,-1}
CONTEXT: PL/pgSQL function "crosstab" line 5 at block variables
initialization
LINE 1: SELECT {-1,-1,-1}
^
Changing to
s integer[3];
test=# \i /home1/dmb/crosstab
CREATE FUNCTION
test=# select crosstab(1);
crosstab
----------

(1 row)

gdb shows exec_assign_value returning at line 3137 because oldarrayisnull is
TRUE, so s never gets assigned. If you need additional information, ask and
ye shall receive.

Responses

Browse pgsql-bugs by date

  From Date Subject
Next Message moje 2005-01-03 15:23:13 Tsearch2 ispell parser unicode bug ?
Previous Message jan pfaler 2005-01-02 13:57:26 rule system re-evaluates expressions