Обсуждение: BUG #5950: backend terminating after altering table

Поиск
Список
Период
Сортировка

BUG #5950: backend terminating after altering table

От
"alex"
Дата:
The following bug has been logged online:

Bug reference:      5950
Logged by:          alex
Email address:      perepelica.alex@gmail.com
PostgreSQL version: 9.0.3
Operating system:   archlinux x86_64
Description:        backend terminating after altering table
Details:

Such steps:
1. create table t (
);
2. alter table t add childs t;
3. alter table t add id serial not null primary key;
This messages from psql:

NOTICE:  ALTER TABLE will create implicit sequence "t_id_seq" for serial
column "t.id"
NOTICE:  ALTER TABLE / ADD PRIMARY KEY will create implicit index "t_pkey"
for table "t"
server closed the connection unexpectedly
        This probably means the server terminated abnormally
        before or while processing the request.
The connection to the server was lost. Attempting reset: Failed.

backend - terminated

Re: BUG #5950: backend terminating after altering table

От
Tom Lane
Дата:
"alex" <perepelica.alex@gmail.com> writes:
> 1. create table t (
> );
> 2. alter table t add childs t;
> 3. alter table t add id serial not null primary key;
> server closed the connection unexpectedly

Hmm.  This seems to be fixed in HEAD:

regression=# create table t (
regression(# );
CREATE TABLE
regression=# alter table t add childs t;
ALTER TABLE
regression=#  alter table t add id serial not null primary key;
NOTICE:  ALTER TABLE will create implicit sequence "t_id_seq" for serial column "t.id"
NOTICE:  ALTER TABLE / ADD PRIMARY KEY will create implicit index "t_pkey" for table "t"
ERROR:  cannot alter table "t" because column "t"."childs" uses its rowtype

Interestingly, 8.2 also says the same --- but 8.3, 8.4, and 9.0 crash.
Looks like we broke the error check somewhere along the way, and whoever
fixed it neglected to back-patch.

            regards, tom lane

Re: BUG #5950: backend terminating after altering table

От
Sergey Burladyan
Дата:
Tom Lane <tgl@sss.pgh.pa.us> writes:

> "alex" <perepelica.alex@gmail.com> writes:
> > 1. create table t (
> > );
> > 2. alter table t add childs t;
> > 3. alter table t add id serial not null primary key;
> > server closed the connection unexpectedly
>
> Hmm.  This seems to be fixed in HEAD:

Not fully. There are also two cases with Segmentation fault
(from sql.ru forum):
1.
create table t ();
alter table t add childs t;
create table selfchield_new (like t);

2.
create table t ();
alter table t add childs t;
create table selfchield_new as select * from t;

I have segmentation fault with current master 7c7fd882.

--
Sergey Burladyan

Re: BUG #5950: backend terminating after altering table

От
Tom Lane
Дата:
Sergey Burladyan <eshkinkot@gmail.com> writes:
> Tom Lane <tgl@sss.pgh.pa.us> writes:
>> "alex" <perepelica.alex@gmail.com> writes:
>>> 1. create table t (
>>> );
>>> 2. alter table t add childs t;
>>> 3. alter table t add id serial not null primary key;
>>> server closed the connection unexpectedly

>> Hmm.  This seems to be fixed in HEAD:

> Not fully. There are also two cases with Segmentation fault
> (from sql.ru forum):

Yeah, I had already come to the conclusion that it was just luck that
HEAD avoids the specific problem.  See
http://archives.postgresql.org/pgsql-hackers/2011-03/msg01673.php

            regards, tom lane

Re: BUG #5950: backend terminating after altering table

От
Tom Lane
Дата:
"alex" <perepelica.alex@gmail.com> writes:
> Such steps:
> 1. create table t (
> );
> 2. alter table t add childs t;
> 3. alter table t add id serial not null primary key;
> server closed the connection unexpectedly

Thanks for the report.  Fixed as per today's discussion (ie, disallow
creating a self-referencing rowtype).

            regards, tom lane