Обсуждение: BUG #17518: Getting Error "new multixact has more than one updating member" when trying to delete records.
BUG #17518: Getting Error "new multixact has more than one updating member" when trying to delete records.
The following bug has been logged on the website: Bug reference: 17518 Logged by: Bob Krier Email address: rkrier@cleo.com PostgreSQL version: 12.10 Operating system: AWS RDS Description: We are getting an error executing a delete statement from JDBC like follows: DELETE FROM "EBI"."LOG_OF_CONNECTION" WHERE "DATE" < {some java date in milliseconds}. The error is as follows: ---> "SQLException: ERROR: new multixact has more than one updating member" I've searched the web for this particular error and was only able to find the source file "https://github.com/postgres/postgres/blob/master/src/backend/access/transam/multixact.c", but I don't know the conditions that cause it. Is there any remedy to this? We have a table defined as follows: CREATE TABLE "LOG_OF_CONNECTION" ( "ID" bpchar(32) NOT NULL, "TYPE" int4 NOT NULL, "STATUS" int4 NULL, "DATE" int8 NULL, "MARKED_FOR_PURGE" int2 NULL, "CONNECTION_DIRECTION" varchar(1) NULL, "TARGET_DBP" bpchar(32) NULL, "ENDPOINT_ID" bpchar(32) NULL, "METHOD_MESSAGES" bytea NULL, "PERSISTENT_STORAGE_REQUESTED" int4 NULL, "PROCESS_USER_REF" int8 NULL, "CONNECTION_NUMBER" int4 NULL, "NOTIFICATION_TYPE" varchar(256) NULL, "TIME_SENT" int8 NULL, "CALC_RETURN_TIME" int8 NULL, "TIME_RECEIVED" int8 NULL, "IS_PROCESSED" int4 NOT NULL DEFAULT 0, "ENDPOINT_NAME" varchar(1024) NULL, "TRADING_PARTNER_ID" varchar(1024) NULL, "TRANSFER_ID" varchar(1024) NULL, "LOG_ORIGIN_OBJECT" varchar(1024) NULL, CONSTRAINT "LOG_OF_CONN_PK" PRIMARY KEY ("ID", "TYPE") ); CREATE INDEX by_date_log_of_connection ON "EBI"."LOG_OF_CONNECTION" USING btree ("DATE", "ID"); CREATE INDEX by_status_date_id3 ON "EBI"."LOG_OF_CONNECTION" USING btree ("ID", "TYPE", "STATUS", "DATE" DESC); CREATE INDEX edi_late_ack_log_of_connection ON "EBI"."LOG_OF_CONNECTION" USING btree ("ID");
The following bug has been logged on the website:
Bug reference: 17518
Logged by: Bob Krier
Email address: rkrier@cleo.com
PostgreSQL version: 12.10
Operating system: AWS RDS
Description:
We are getting an error executing a delete statement from JDBC like
follows:
DELETE FROM "EBI"."LOG_OF_CONNECTION" WHERE "DATE" < {some java date in
milliseconds}. The error is as follows:
---> "SQLException: ERROR: new multixact has more than one updating
member"
I've searched the web for this particular error and was only able to find
the source file
"https://github.com/postgres/postgres/blob/master/src/backend/access/transam/multixact.c",
but I don't know the conditions that cause it. Is there any remedy to
this?
We have a table defined as follows:
CREATE TABLE "LOG_OF_CONNECTION" (
"ID" bpchar(32) NOT NULL,
"TYPE" int4 NOT NULL,
"STATUS" int4 NULL,
"DATE" int8 NULL,
"MARKED_FOR_PURGE" int2 NULL,
"CONNECTION_DIRECTION" varchar(1) NULL,
"TARGET_DBP" bpchar(32) NULL,
"ENDPOINT_ID" bpchar(32) NULL,
"METHOD_MESSAGES" bytea NULL,
"PERSISTENT_STORAGE_REQUESTED" int4 NULL,
"PROCESS_USER_REF" int8 NULL,
"CONNECTION_NUMBER" int4 NULL,
"NOTIFICATION_TYPE" varchar(256) NULL,
"TIME_SENT" int8 NULL,
"CALC_RETURN_TIME" int8 NULL,
"TIME_RECEIVED" int8 NULL,
"IS_PROCESSED" int4 NOT NULL DEFAULT 0,
"ENDPOINT_NAME" varchar(1024) NULL,
"TRADING_PARTNER_ID" varchar(1024) NULL,
"TRANSFER_ID" varchar(1024) NULL,
"LOG_ORIGIN_OBJECT" varchar(1024) NULL,
CONSTRAINT "LOG_OF_CONN_PK" PRIMARY KEY ("ID", "TYPE")
);
CREATE INDEX by_date_log_of_connection ON "EBI"."LOG_OF_CONNECTION" USING
btree ("DATE", "ID");
CREATE INDEX by_status_date_id3 ON "EBI"."LOG_OF_CONNECTION" USING btree
("ID", "TYPE", "STATUS", "DATE" DESC);
CREATE INDEX edi_late_ack_log_of_connection ON "EBI"."LOG_OF_CONNECTION"
USING btree ("ID");
Re: BUG #17518: Getting Error "new multixact has more than one updating member" when trying to delete records.
The following bug has been logged on the website:
Bug reference: 17518
Logged by: Bob Krier
Email address: rkrier@cleo.com
PostgreSQL version: 12.10
Operating system: AWS RDS
Description:
We are getting an error executing a delete statement from JDBC like
follows:
DELETE FROM "EBI"."LOG_OF_CONNECTION" WHERE "DATE" < {some java date in
milliseconds}. The error is as follows:
---> "SQLException: ERROR: new multixact has more than one updating
member"
Hi David,
Thanks for the response.
- I haven’t tried via psql. I only have a snapshot of the customer’s database that I can restore in RDS. It is very time consuming to set this up. I’ve corrected the problem by running VACUUM (FULL, FREEZE, VERBOSE, ANALYZE, INDEX_CLEANUP, TRUNCATE) on the table and the problem is resolved.
- Deleting by date where it only matches to 1 row seems to work. If I match on more than one, it seems to fail. I’m not sure what conditions make it happen. I have not tried to delete by PK. I’m not sure what you mean by “How about columns?”. You don’t specify columns on a delete statement.
- Can I construct a self-contained minimal reproducer?: No unfortunately exporting the table and importing it to another Postgres instance does not reproduce the issue. Again the vacuum above corrects the issue.
- Does it manifiest standalone…? Again I only have the snapshot to restore on RDS and can reproduce it that way.
Again, the issue is resolved. Thanks for your attention to this!
Bob
|
From: David G. Johnston <david.g.johnston@gmail.com>
Sent: Saturday, June 25, 2022 4:52 PM
To: Krier, Bob <rkrier@cleo.com>; PostgreSQL mailing lists <pgsql-bugs@lists.postgresql.org>
Subject: Re: BUG #17518: Getting Error "new multixact has more than one updating member" when trying to delete records.
On Tue, Jun 14, 2022 at 9:03 AM PG Bug reporting form <noreply@postgresql.org> wrote:
The following bug has been logged on the website:
Bug reference: 17518
Logged by: Bob Krier
Email address: rkrier@cleo.com
PostgreSQL version: 12.10
Operating system: AWS RDS
Description:
We are getting an error executing a delete statement from JDBC like
follows:
DELETE FROM "EBI"."LOG_OF_CONNECTION" WHERE "DATE" < {some java date in
milliseconds}. The error is as follows:
---> "SQLException: ERROR: new multixact has more than one updating
member"
If you try this via psql you don't see the error though?
Do you get the same error if you delete a single row using a PK instead of a bunch of rows via a date inequality?
Does it seem to matter which rows are being deleted in general, or how many? How about columns?
Can you construct a self-contained minimal reproducer?
Does it manifest on standalone community PostgreSQL or just RDS?
David J.
Re: BUG #17518: Getting Error "new multixact has more than one updating member" when trying to delete records.
Hi David,
Thanks for the response.
- I haven’t tried via psql. I only have a snapshot of the customer’s database that I can restore in RDS. It is very time consuming to set this up. I’ve corrected the problem by running VACUUM (FULL, FREEZE, VERBOSE, ANALYZE, INDEX_CLEANUP, TRUNCATE) on the table and the problem is resolved.
- Deleting by date where it only matches to 1 row seems to work. If I match on more than one, it seems to fail. I’m not sure what conditions make it happen. I have not tried to delete by PK. I’m not sure what you mean by “How about columns?”. You don’t specify columns on a delete statement.
- Can I construct a self-contained minimal reproducer?: No unfortunately exporting the table and importing it to another Postgres instance does not reproduce the issue. Again the vacuum above corrects the issue.
- Does it manifiest standalone…? Again I only have the snapshot to restore on RDS and can reproduce it that way.
On Mon, Jun 27, 2022 at 9:36 AM Krier, Bob <rkrier@cleo.com> wrote:Hi David,
Thanks for the response.
- I haven’t tried via psql. I only have a snapshot of the customer’s database that I can restore in RDS. It is very time consuming to set this up. I’ve corrected the problem by running VACUUM (FULL, FREEZE, VERBOSE, ANALYZE, INDEX_CLEANUP, TRUNCATE) on the table and the problem is resolved.
Once you say "FULL" the rest of those options (except verbose) don't matter.
- Deleting by date where it only matches to 1 row seems to work. If I match on more than one, it seems to fail. I’m not sure what conditions make it happen. I have not tried to delete by PK. I’m not sure what you mean by “How about columns?”. You don’t specify columns on a delete statement.
Not sure I was thinking clearly on that one - but ultimately you could try "ALTER TABLE ... DROP COLUMN" though I'm doubting it would be productive
- Can I construct a self-contained minimal reproducer?: No unfortunately exporting the table and importing it to another Postgres instance does not reproduce the issue. Again the vacuum above corrects the issue.
- Does it manifiest standalone…? Again I only have the snapshot to restore on RDS and can reproduce it that way.
David J.