Re: Fix race condition in pg_get_publication_tables with concurrent DROP TABLE
shveta malik <shveta.malik@gmail.com>
From: shveta malik <shveta.malik@gmail.com>
To: Bharath Rupireddy <bharath.rupireddyforpostgres@gmail.com>
Cc: PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>, shveta malik <shveta.malik@gmail.com>
Date: 2026-04-23T11:15:11Z
Lists: pgsql-hackers
On Thu, Apr 23, 2026 at 1:01 AM Bharath Rupireddy <bharath.rupireddyforpostgres@gmail.com> wrote: > > 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". > I agree with the problem statement, this is a weird error: postgres=# select * from pg_publication_tables; ERROR: could not open relation with OID 16390 > 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 too think that this should be fixed by skipping the dropped table. Will reveiw patch soon. thanks Shveta