From: | Smolkin Grigory <smallkeen(at)gmail(dot)com> |
---|---|
To: | pgsql-hackers(at)postgresql(dot)org |
Subject: | Re: race condition in pg_class |
Date: | 2023-10-27 10:03:23 |
Message-ID: | CAMp+ueZCYuphqvTQvq+tkvLqP_aLsUr-SuiKfoZMErckvmqbTA@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
> This is going to be a problem with any operation that does a transactional
> pg_class update without taking a lock that conflicts with ShareLock.
GRANT
> doesn't lock the table at all, so I can reproduce this in v17 as follows:
>
> == session 1
> create table t (c int);
> begin;
> grant select on t to public;
>
> == session 2
> alter table t add primary key (c);
>
> == back in session 1
> commit;
>
>
> We'll likely need to change how we maintain relhasindex or perhaps take a
lock
> in GRANT.
Oh, that explains it. Thank you very much.
> Can you explore that as follows?
>
>- PITR to just before the COMMIT record.
>- Save all rows of pg_class.
>- PITR to just after the COMMIT record.
>- Save all rows of pg_class.
>- Diff the two sets of saved rows.
Sure, but it will take some time, its a large db with lots of WAL segments
to apply.
> extensions
extname | extversion
--------------------+------------
plpgsql | 1.0
pg_stat_statements | 1.8
pg_buffercache | 1.3
pgstattuple | 1.5
From | Date | Subject | |
---|---|---|---|
Next Message | Nazir Bilal Yavuz | 2023-10-27 10:09:01 | Re: gcc 12.1.0 warning |
Previous Message | shveta malik | 2023-10-27 09:56:55 | Re: Synchronizing slots from primary to standby |