Re: BUG #9606: pg_class relhaspkey column not updated on removal of primary key

Поиск
Список
Период
Сортировка
От Jeff Frost
Тема Re: BUG #9606: pg_class relhaspkey column not updated on removal of primary key
Дата
Msg-id 7FBC4B95-6AF6-4CFC-A4E2-DE7D9C30AB4B@pgexperts.com
обсуждение исходный текст
Ответ на Re: BUG #9606: pg_class relhaspkey column not updated on removal of primary key  (Tom Lane <tgl@sss.pgh.pa.us>)
Ответы Re: BUG #9606: pg_class relhaspkey column not updated on removal of primary key  (Jeff Frost <jeff@pgexperts.com>)
Список pgsql-bugs
On Mar 17, 2014, at 11:59 AM, Tom Lane <tgl@sss.pgh.pa.us> wrote:

> jeff@pgexperts.com writes:
>> [ $SUBJECT ]
>
> This is not a bug; please read the description of pg_class:
>
> relhaspkey    bool    True if the table has (or once had) a primary key
>
> The note at the bottom of the page explains why:
>
> Several of the Boolean flags in pg_class are maintained lazily: they are
> guaranteed to be true if that's the correct state, but may not be reset to
> false immediately when the condition is no longer true. For example,
> relhasindex is set by CREATE INDEX, but it is never cleared by DROP
> INDEX. Instead, VACUUM clears relhasindex if it finds the table has no
> indexes. This arrangement avoids race conditions and improves concurrency.

Sure enough, you're right!

pkey_test=# select relname, relhaspkey FROM pg_class where relname = 'foo';
 relname | relhaspkey
---------+------------
 foo     | t
(1 row)

pkey_test=# vacuum foo;
VACUUM
pkey_test=# select relname, relhaspkey FROM pg_class where relname = 'foo';
 relname | relhaspkey
---------+------------
 foo     | f
(1 row)

Thanks, Tom, i had completely forgotten about that!

В списке pgsql-bugs по дате отправления:

Предыдущее
От: Tom Lane
Дата:
Сообщение: Re: BUG #9606: pg_class relhaspkey column not updated on removal of primary key
Следующее
От: Tom Lane
Дата:
Сообщение: Re: relcache reference leak on refresh materialized view concurrently