ALTER TABLE does not check for column existence before starting operations - Mailing list pgsql-hackers

From Pierre Ducroquet
Subject ALTER TABLE does not check for column existence before starting operations
Date
Msg-id 1897070.0DItnajBuJ@pierred-pdoc
Whole thread Raw
Responses Re: ALTER TABLE does not check for column existence before startingoperations  (David Steele <david@pgmasters.net>)
Re: ALTER TABLE does not check for column existence before startingoperations  (Arthur Zakirov <a.zakirov@postgrespro.ru>)
List pgsql-hackers
Hi

While working on a big table recently, I noticed that ALTER TABLE does not 
check for column existence in operations like SET NOT NULL before starting 
working on the table, for instance adding a primary key.
It is thus possible, if a typo has been made, to generate a long lock and a 
lot of WAL that will serve no purpose since the whole transaction will be 
discarded.

For example :

toto=# alter table test add primary key(i), alter column typo set not null;
ERROR:  column "typo" of relation "test" does not exist
Time: 10.794 s


The attached patch fixes this behaviour by adding a small check in the first 
pass of alter table to make sure that a column referenced by an alter command 
exists first. It also checks if the column is added by another alter sub-
command. It does not handle every scenario (dropping a column and then 
altering it for instance), these are left to the exec code to exclude.
The patch has been checked with make check, and I see no documentation change 
to do since this does not alter any existing documented behaviour.


Regards

 Pierre

Attachment

pgsql-hackers by date:

Previous
From: Amit Langote
Date:
Subject: Re: [HACKERS] path toward faster partition pruning
Next
From: Thomas Munro
Date:
Subject: Re: zheap: a new storage format for PostgreSQL