Обсуждение: BUG #5950: backend terminating after altering table
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
"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
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
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
"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