On 2022-Nov-23, Alvaro Herrera wrote:
> I suggest that we could improve that elog() so that it includes the
> members of the multixact in question, which could help us better
> understand what is going on.
Something like the attached. It would result in output like this:
WARNING: new multixact has more than one updating member: 0 2[17378 (keysh),
17381 (nokeyupd)]
Then it should be possible to trace (in pg_waldump output) the
operations of each of the transactions that have any status in the
multixact that includes some form of "upd".
--
Álvaro Herrera 48°01'N 7°57'E — https://www.EnterpriseDB.com/
"Just treat us the way you want to be treated + some extra allowance
for ignorance." (Michael Brusser)
diff --git a/src/backend/access/transam/multixact.c b/src/backend/access/transam/multixact.c
index 204aa95045..e1191a7564 100644
--- a/src/backend/access/transam/multixact.c
+++ b/src/backend/access/transam/multixact.c
@@ -799,7 +799,8 @@ MultiXactIdCreateFromMembers(int nmembers, MultiXactMember *members)
if (ISUPDATE_from_mxstatus(members[i].status))
{
if (has_update)
- elog(ERROR, "new multixact has more than one updating member");
+ elog(ERROR, "new multixact has more than one updating member: %s",
+ mxid_to_string(InvalidMultiXactId, nmembers, members));
has_update = true;
}
}