pgsql: Fix ALTER TABLE ... SET TABLESPACE for unlogged relations.
От | Andres Freund |
---|---|
Тема | pgsql: Fix ALTER TABLE ... SET TABLESPACE for unlogged relations. |
Дата | |
Msg-id | E1a7kFR-0003gX-6Z@gemulon.postgresql.org обсуждение исходный текст |
Список | pgsql-committers |
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 Branch ------ REL9_5_STABLE Details ------- http://git.postgresql.org/pg/commitdiff/ada9c09aebbe6c37d545fca29ac8c0e690158e80 Modified Files -------------- src/backend/commands/tablecmds.c | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-)
В списке pgsql-committers по дате отправления: