Re: Rethinking plpgsql's assignment implementation
От | Pavel Stehule |
---|---|
Тема | Re: Rethinking plpgsql's assignment implementation |
Дата | |
Msg-id | CAFj8pRBTidG1K_V+=jYMCmvGL9x3EJz7PL6WxWZXr5M0i2OZiA@mail.gmail.com обсуждение исходный текст |
Ответ на | Re: Rethinking plpgsql's assignment implementation (Pavel Stehule <pavel.stehule@gmail.com>) |
Список | pgsql-hackers |
út 19. 1. 2021 v 19:21 odesílatel Pavel Stehule <pavel.stehule@gmail.com> napsal:
HiNow, 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"
DOParenthesis 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;
$$;
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
RegardsPavel
В списке pgsql-hackers по дате отправления: