ALTER TABLE does not check for column existence before starting operations

Поиск
Список
Период
Сортировка
От Pierre Ducroquet
Тема ALTER TABLE does not check for column existence before starting operations
Дата
Msg-id 1897070.0DItnajBuJ@pierred-pdoc
обсуждение исходный текст
Ответы 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>)
Список 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

Вложения

В списке pgsql-hackers по дате отправления:

Предыдущее
От: Amit Langote
Дата:
Сообщение: Re: [HACKERS] path toward faster partition pruning
Следующее
От: Thomas Munro
Дата:
Сообщение: Re: zheap: a new storage format for PostgreSQL