Re: BUG #18297: Error when adding a column to a parent table with complex inheritance - Mailing list pgsql-bugs

From Tender Wang
Subject Re: BUG #18297: Error when adding a column to a parent table with complex inheritance
Date
Msg-id CAHewXNkf7Th5-5F_fgWcAb88jOJx=K03J=P17cLjfEMM2BQahA@mail.gmail.com
Whole thread Raw
In response to Re: BUG #18297: Error when adding a column to a parent table with complex inheritance  (Alexander Lakhin <exclusion@gmail.com>)
Responses Re: BUG #18297: Error when adding a column to a parent table with complex inheritance  (Michael Paquier <michael@paquier.xyz>)
List pgsql-bugs


Alexander Lakhin <exclusion@gmail.com> 于2024年1月23日周二 01:00写道:
Hi,

22.01.2024 13:36, Tender Wang wrote:

Yes, I've encountered a similar issue, this time with ALTER (TEXT SEARCH
CONFIGURATION):
CREATE TEXT SEARCH CONFIGURATION ispell_tst (COPY=english);
CREATE TEXT SEARCH DICTIONARY ispell (Template=ispell, DictFile=ispell_sample, AffFile=ispell_sample);
ALTER TEXT SEARCH CONFIGURATION ispell_tst ALTER MAPPING FOR word, word WITH ispell;
ERROR:  tuple already updated by self

Yes, this is another issue that DDL operation on an same object twice. Maybe we can report error on Parse phase.
But as you say, all the other DDL commands run OK, so maybe it's better to process this case in execution phase.
I will send a patch later.

Thank you for working on this!

As these two cases look like exceptions to the common behavior, I wonder
whether we need some extra functions to deal with duplicates.
(I haven't look yet how such duplicates processed for other object types.)

For example,  drop extension pageinspect ,pageinspect;
The duplicates will be done in object_address_present_add_flags(), some codes as below:
....
  if (object->classId == thisobj->classId &&
object->objectId == thisobj->objectId)
{
if (object->objectSubId == thisobj->objectSubId)
{
ObjectAddressExtra *thisextra = addrs->extras + i;

thisextra->flags |= flags;
result = true;
}
....
The object will not be added to targetObjects if above func returned true.

Your reported two issues have different code path, and duplicates do not processed.

I am considering whether there is a unified way of handling this, otherwise each one will have to be dealt with separately.
 

And I'm just curious that how do you find these issues? Use some tools?
 

I discovered these two issues with my kind of fuzzer, just watching out
for the interesting errors.

Best regards,
Alexander

--
Tender Wang
OpenPie:  https://en.openpie.com/

pgsql-bugs by date:

Previous
From: Michael Paquier
Date:
Subject: Re: MarkBufferDirty Assert held LW_EXCLUSIVE lock fail when ginFinishSplit
Next
From: feichanghong
Date:
Subject: Re: MarkBufferDirty Assert held LW_EXCLUSIVE lock fail when ginFinishSplit