Re: pgsql: Avoid corrupting tables when ANALYZE inside a transaction is rol

Поиск
Список
Период
Сортировка
От Noah Misch
Тема Re: pgsql: Avoid corrupting tables when ANALYZE inside a transaction is rol
Дата
Msg-id 20141030040936.GA407655@tornado.leadboat.com
обсуждение исходный текст
Ответ на pgsql: Avoid corrupting tables when ANALYZE inside a transaction is rol  (Tom Lane <tgl@sss.pgh.pa.us>)
Ответы Re: Re: pgsql: Avoid corrupting tables when ANALYZE inside a transaction is rol  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-committers
On Wed, Oct 29, 2014 at 10:12:44PM +0000, Tom Lane wrote:
> Avoid corrupting tables when ANALYZE inside a transaction is rolled back.
>
> VACUUM and ANALYZE update the target table's pg_class row in-place, that is
> nontransactionally.  This is OK, more or less, for the statistical columns,
> which are mostly nontransactional anyhow.  It's not so OK for the DDL hint
> flags (relhasindex etc), which might get changed in response to
> transactional changes that could still be rolled back.  This isn't a
> problem for VACUUM, since it can't be run inside a transaction block nor
> in parallel with DDL on the table.  However, we allow ANALYZE inside a
> transaction block, so if the transaction had earlier removed the last
> index, rule, or trigger from the table, and then we roll back the
> transaction after ANALYZE, the table would be left in a corrupted state
> with the hint flags not set though they should be.
>
> To fix, suppress the hint-flag updates if we are InTransactionBlock().

Shouldn't this use IsInTransactionChain(), to catch the other ways ANALYZE can
share a transaction with DDL?


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

Предыдущее
От: Peter Eisentraut
Дата:
Сообщение: pgsql: Remove use of TAP subtests
Следующее
От: Tom Lane
Дата:
Сообщение: Re: Re: pgsql: Avoid corrupting tables when ANALYZE inside a transaction is rol