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
|
Список | 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 по дате отправления: