Thread: Arrays

Arrays

From
Ymir
Date:
Hello,

I'm trying to use a bidimensional array and I'm having the following
problem:

students=# UPDATE years SET y_grade[1] = '{2,3,4,5,6,7}';
ERROR:  pg_atoi: error in "{2,3,4,5,6,7}": can't parse "{2,3,4,5,6,7}"

I've declared y_grade as a bidimensional array (y_grade smallint[][]), but
still, I get this when I describe the table:

students=# \d years
                          Table "years"
   Column   |    Type    |               Modifiers
------------+------------+----------------------------------------
 y_id       | integer    | not null default nextval('Y_ID'::text)
 y_year     | smallint   |
 y_student  | smallint   |
 y_grade    | smallint[] |
 y_absences | smallint   |
Primary key: years_pkey

(notice it's only a onedimensinal array)
I don't know if that's how it's supposed to be, but even if it is, my query
isn't working.
I'm not trying to enlarge the array, I read in the docs you can't do that:
students=# select * from years;
 y_id | y_year | y_student |            y_grade            | y_absences
------+--------+-----------+-------------------------------+------------
    4 |      1 |         1 | {{0,0,0,0,0,0},{0,0,0,0,0,0}} |
(1 row)

So, any idea why I'm getting this error?

Re: Arrays

From
Tom Lane
Date:
Ymir <ymir@wolfheart.ro> writes:
> I'm trying to use a bidimensional array and I'm having the following
> problem:

> students=# UPDATE years SET y_grade[1] = '{2,3,4,5,6,7}';
> ERROR:  pg_atoi: error in "{2,3,4,5,6,7}": can't parse "{2,3,4,5,6,7}"

Not the right subscripts for an array slice.  Try it this way:

regression=# create table years(y_grade int[]);
CREATE
regression=# insert into years values('{{1,2,3,4,5,6},{11,22,33,44,55,66}}');
INSERT 164022 1
regression=# select * from years;
               y_grade
-------------------------------------
 {{1,2,3,4,5,6},{11,22,33,44,55,66}}
(1 row)

regression=# update years set y_grade[1][1:6] = '{2,3,4,5,6,7}';
UPDATE 1
regression=# select * from years;
               y_grade
-------------------------------------
 {{2,3,4,5,6,7},{11,22,33,44,55,66}}
(1 row)

> I've declared y_grade as a bidimensional array (y_grade smallint[][]), but
> still, I get this when I describe the table:

The declaration of the table just says that the column is an array of
int; the number of dimensions is not really constrained, any more than
the array size is.

            regards, tom lane