diff options
author | Andres Freund <andres@anarazel.de> | 2015-12-12 14:19:23 +0100 |
---|---|---|
committer | Andres Freund <andres@anarazel.de> | 2015-12-12 14:19:23 +0100 |
commit | d638aeef607981a7a5f4da64dc5b2f717df873cf (patch) | |
tree | 363ce8a9bbb94e260540aaafbe82985cc6efc573 /src/backend/storage/buffer/bufmgr.c | |
parent | 09824cd9961661a88aa0a04d70df53f66d47b38a (diff) | |
download | postgresql-d638aeef607981a7a5f4da64dc5b2f717df873cf.tar.gz postgresql-d638aeef607981a7a5f4da64dc5b2f717df873cf.zip |
Fix ALTER TABLE ... SET TABLESPACE for unlogged relations.
Changing the tablespace of an unlogged relation did not WAL log the
creation and content of the init fork. Thus, after a standby is
promoted, unlogged relation cannot be accessed anymore, with errors
like:
ERROR: 58P01: could not open file "pg_tblspc/...": No such file or directory
Additionally the init fork was not synced to disk, independent of the
configured wal_level, a relatively small durability risk.
Investigation of that problem also brought to light that, even for
permanent relations, the creation of !main forks was not WAL logged,
i.e. no XLOG_SMGR_CREATE record were emitted. That mostly turns out not
to be a problem, because these files were created when the actual
relation data is copied; nonexistent files are not treated as an error
condition during replay. But that doesn't work for empty files, and
generally feels a bit haphazard. Luckily, outside init and main forks,
empty forks don't occur often or are not a problem.
Add the required WAL logging and syncing to disk.
Reported-By: Michael Paquier
Author: Michael Paquier and Andres Freund
Discussion: 20151210163230.GA11331@alap3.anarazel.de
Backpatch: 9.1, where unlogged relations were introduced
Diffstat (limited to 'src/backend/storage/buffer/bufmgr.c')
0 files changed, 0 insertions, 0 deletions