Hi

čt 29. 4. 2021 v 12:33 odesílatel Rafal Dabrowa <fatwild...@gmail.com>
napsal:

> This also returns ERROR:  invalid input syntax for type integer:
> "[221,222,223,224]"
>
> On 4/29/2021 9:48 AM, KraSer wrote:
> > try:
> > a.fld1[1] = '[221,222,223,224]';
> >
> > чт, 29 апр. 2021 г. в 10:35, PG Doc comments form
> > <nore...@postgresql.org <mailto:nore...@postgresql.org>>:
> >
> >     The following documentation comment has been logged on the website:
> >
> >     Page: https://www.postgresql.org/docs/13/arrays.html
> >     Description:
> >
> >     I have PostgreSQL 13. Let's declare the type below, then use it in
> >     pl/pgsql:
> >
> >     create type typ1 as (
> >             fld1 int[][]
> >     );
> >
> >     do $$
> >             declare
> >                a typ1;
> >             begin
> >                     a.fld1 = '{{121,122,123,124}}';         -- OK
> >                  (1)
> >                     a.fld1[1] = '{221,222,223,224}';   -- fails
> >             (2)
> >                     a.fld1[1][1] = 321;          -- OK
> >        (3)
> >                     a.fld1[1][2] = 322;          -- OK unless line (1)
> >     is removed
> >             end;
> >     $$;
> >
> >     In line (2) the plql reports ERROR:  invalid input syntax for type
> >     integer:
> >     "{221,222,223,224}"
> >     When lines (1) and (2) are removed, psql reports ERROR:  array
> >     subscript out
> >     of range
> >
> >     Is this expected behavior? Why?
> >
> >     Rafal
> >
>

 Postgres's arrays don't allow any modification that creates some gap in
the array. Next - Postgres's arrays are multidimensional arrays, and these
arrays are not an arrays or arrays.

So your line (1) cannot work.

You can write

a.fld1[1][1:4] :=  '{221,222,223,224}';

Case (3) fails, because this operation on empty array creates gap on
position 1,1.

you can use an function array_fill

DO
postgres=# do $$
declare a int[];
begin
  a := array_fill(null::int, array[2,2]);
  a[1][2] := 322;

  raise notice 'a=%', a;
end;
$$;
NOTICE:  a={{NULL,322},{NULL,NULL}}


Regards

Pavel

Reply via email to