Re: BUG #17706: ALTER TYPE leads to crash
От | Richard Guo |
---|---|
Тема | Re: BUG #17706: ALTER TYPE leads to crash |
Дата | |
Msg-id | CAMbWs48beVBjLyjza3mCNzOT1qYAt9NcV=VMzeOMbCAVAXBLGg@mail.gmail.com обсуждение исходный текст |
Ответ на | BUG #17706: ALTER TYPE leads to crash (PG Bug reporting form <noreply@postgresql.org>) |
Ответы |
Re: BUG #17706: ALTER TYPE leads to crash
|
Список | pgsql-bugs |
On Thu, Dec 8, 2022 at 4:51 AM PG Bug reporting form <noreply@postgresql.org> wrote:
With PL/pgSQL:
create type foo as (a int, b int);
create function bar() returns record as $$
declare
r foo := row(123, 2^30);
begin
alter type foo alter attribute b type text;
return r;
end;
$$ language plpgsql;
postgres=# select bar();
server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
LOG: server process (PID 394076) was terminated by signal 11: Segmentation
fault
(Here 2^30 is interpreted as a string length.)
ISTM after the alter operation, the attribute description of 'b' has
been altered to cope with type text, but the data layout inside the heap
tuple stays unchanged. So when we fetch attribute 'b', what we get is
an integer pointer into the tuple's data area storing value 2^30, due to
type text is not attbyval.
Then later we interpret that integer pointer as a varlena pointer, which
is not correct.
But I'm not sure how to fix it. Is there an easy way to also alter the
data layout inside the tuple?
Thanks
Richard
been altered to cope with type text, but the data layout inside the heap
tuple stays unchanged. So when we fetch attribute 'b', what we get is
an integer pointer into the tuple's data area storing value 2^30, due to
type text is not attbyval.
Then later we interpret that integer pointer as a varlena pointer, which
is not correct.
But I'm not sure how to fix it. Is there an easy way to also alter the
data layout inside the tuple?
Thanks
Richard
В списке pgsql-bugs по дате отправления: