Fix race condition in pg_get_publication_tables with concurrent DROP TABLE - Mailing list pgsql-hackers

From Bharath Rupireddy
Subject Fix race condition in pg_get_publication_tables with concurrent DROP TABLE
Date
Msg-id CALj2ACVYYooWH-5tJ6cPKkU+mutVxwb_z4S+qAi-zdrFqxXE2Q@mail.gmail.com
Whole thread
Responses Re: Fix race condition in pg_get_publication_tables with concurrent DROP TABLE
List pgsql-hackers
Hi,

I came across a race condition in pg_get_publication_tables with
concurrent DROP TABLE. pg_get_publication_tables collects table OIDs
without locks on the first call, then opens each table on later calls.
If a table is dropped in between, the function errors with "could not
open relation with OID".

This is common in environments where many tables are being created and
dropped while pg_publication_tables is queried, such as with FOR ALL
TABLES publications.

Please find the attached patch that fixes this by skipping
concurrently dropped tables instead of erroring out. Tables created
after the list is built are simply not present in the result set,
which is expected point-in-time behavior with no error. I've also
added a TAP test for this issue.

Thoughts?

--
Bharath Rupireddy
Amazon Web Services: https://aws.amazon.com

Attachment

pgsql-hackers by date:

Previous
From: Tom Lane
Date:
Subject: Re: PostgreSQL 17: Bug in libpq when libpq is dlopened/closed multiple times
Next
From: Paul A Jungwirth
Date:
Subject: Re: [PATCH] Fix null pointer dereference in PG19