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.