a modest improvement to get_object_address() - Mailing list pgsql-hackers

From Robert Haas
Subject a modest improvement to get_object_address()
Date
Msg-id CA+TgmoZ-_K7c5gGW_arz_pWhiWU6sW+vf8NQcaCrTDkqb=sndQ@mail.gmail.com
Whole thread Raw
Responses Re: a modest improvement to get_object_address()
Re: a modest improvement to get_object_address()
List 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

Attachment

pgsql-hackers by date:

Previous
From: Thomas Munro
Date:
Subject: const correctness
Next
From: Thom Brown
Date:
Subject: Re: Syntax for partitioning