a modest improvement to get_object_address()

Поиск
Список
Период
Сортировка
От Robert Haas
Тема a modest improvement to get_object_address()
Дата
Msg-id CA+TgmoZ-_K7c5gGW_arz_pWhiWU6sW+vf8NQcaCrTDkqb=sndQ@mail.gmail.com
обсуждение исходный текст
Ответы Re: a modest improvement to get_object_address()  (Cédric Villemain <cedric.villemain.debian@gmail.com>)
Re: a modest improvement to get_object_address()  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-hackers
I'd like to propose the attached patch, which changes
get_object_address() in a manner similar to what we did in
RangeVarGetRelid() in commit 4240e429d0c2d889d0cda23c618f94e12c13ade7.
 The basic idea is that, if we look up an object name, acquire the
corresponding lock, and then find that the object was dropped during
the lock wait, we retry the whole operation instead of emitting a
baffling error message.  Example:

rhaas=# create schema x;
CREATE SCHEMA
rhaas=# begin;
BEGIN
rhaas=# drop schema x;
DROP SCHEMA

Then, in another session:

rhaas=# comment on schema x is 'doodle';

Then, in the first session:

rhaas=# commit;
COMMIT

At this point, the first session must error out.  The current code
produces this:

ERROR:  cache lookup failed for class 2615 object 16386 subobj 0

With the attached patch, you instead get:

ERROR:  schema "x" does not exist

...which is obviously quite a bit nicer.

Also, if the concurrent transaction drops and creates the schema
instead of just dropping it, the new code will allow the operation to
succeed (with the expected results) rather than failing.

Objections?

--
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company

Вложения

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

Предыдущее
От: Thomas Munro
Дата:
Сообщение: const correctness
Следующее
От: Thom Brown
Дата:
Сообщение: Re: Syntax for partitioning