Ășt 19. 1. 2021 v 19:21 odesĂ­latel Pavel Stehule <pavel.steh...@gmail.com>
napsal:

> Hi
>
> Now, I am testing subscribing on the jsonb feature, and I found one issue,
> that is not supported by parser.
>
> When the target is scalar, then all is ok. But we can have a plpgsql array
> of jsonb values.
>
> postgres=# do $$
> declare j jsonb[];
> begin
>   j[1] = '{"b":"Ahoj"}';
>   raise notice '%', j;
>   raise notice '%', (j[1])['b'];
> end
> $$;
> NOTICE:  {"{\"b\": \"Ahoj\"}"}
> NOTICE:  "Ahoj"
> DO
>
> Parenthesis work well in expressions, but are not supported on the left
> side of assignment.
>
> postgres=# do $$
> declare j jsonb[];
> begin
>   (j[1])['b'] = '"Ahoj"';
>   raise notice '%', j;
>   raise notice '%', j[1]['b'];
> end
> $$;
> ERROR:  syntax error at or near "("
> LINE 4:   (j[1])['b'] = '"Ahoj"';
>           ^
>

Assignment for nesting composite types is working better - although there
is some inconsistency too:

create type t_inner as (x int, y int);
create type t_outer as (a t_inner, b t_inner);

do $$
declare v t_outer;
begin
  v.a.x := 10; -- parenthesis not allowed here, but not required
  raise notice '%', v;
  raise notice '%', (v).a.x; -- parenthesis are required here
end;
$$;

Regards

Pavel


> Regards
>
> Pavel
>
>
>

Reply via email to