pgsql: Fix WAL-logging of FSM and VM truncation.
От | Heikki Linnakangas |
---|---|
Тема | pgsql: Fix WAL-logging of FSM and VM truncation. |
Дата | |
Msg-id | E1bwpYr-0007lC-25@gemulon.postgresql.org обсуждение исходный текст |
Список | pgsql-committers |
Fix WAL-logging of FSM and VM truncation. When a relation is truncated, it is important that the FSM is truncated as well. Otherwise, after recovery, the FSM can return a page that has been truncated away, leading to errors like: ERROR: could not read block 28991 in file "base/16390/572026": read only 0 of 8192 bytes We were using MarkBufferDirtyHint() to dirty the buffer holding the last remaining page of the FSM, but during recovery, that might in fact not dirty the page, and the FSM update might be lost. To fix, use the stronger MarkBufferDirty() function. MarkBufferDirty() requires us to do WAL-logging ourselves, to protect from a torn page, if checksumming is enabled. Also fix an oversight in visibilitymap_truncate: it also needs to WAL-log when checksumming is enabled. Analysis by Pavan Deolasee. Discussion: <CABOikdNr5vKucqyZH9s1Mh0XebLs_jRhKv6eJfNnD2wxTn=_9A@mail.gmail.com> Backpatch to 9.3, where we got data checksums. Branch ------ REL9_3_STABLE Details ------- http://git.postgresql.org/pg/commitdiff/1c02ee314bc17ba0ff226c33a64935d02ff1208a Modified Files -------------- src/backend/access/heap/visibilitymap.c | 16 ++++++++++++++++ src/backend/storage/freespace/freespace.c | 21 ++++++++++++++++++++- 2 files changed, 36 insertions(+), 1 deletion(-)
В списке pgsql-committers по дате отправления: