diff options
author | Robert Haas <rhaas@postgresql.org> | 2023-04-18 11:23:34 -0400 |
---|---|---|
committer | Robert Haas <rhaas@postgresql.org> | 2023-04-18 11:23:34 -0400 |
commit | 363e8f9115469fe3d30a80b694cd60e9db3b2537 (patch) | |
tree | 6185753919236e7c188df2dcbfe891ba10f8eb03 /src/backend/executor/nodeModifyTable.c | |
parent | f18029084784ec71a2e825cfcfd81b06d597ab93 (diff) | |
download | postgresql-363e8f9115469fe3d30a80b694cd60e9db3b2537.tar.gz postgresql-363e8f9115469fe3d30a80b694cd60e9db3b2537.zip |
Fix pg_basebackup with in-place tablespaces some more.
Commit c6f2f01611d4f2c412e92eb7893f76fa590818e8 purported to make
this work, but problems remained. In a plain-format backup, the
files from an in-place tablespace got included in the tar file for
the main tablespace, which is wrong but it's not clear that it
has any user-visible consequences. In a tar-format backup, the
TABLESPACE_MAP option is used, and so we never iterated over
pg_tblspc and thus never backed up the in-place tablespaces
anywhere at all.
To fix this, reverse the changes in that commit, so that when we scan
pg_tblspc during a backup, we create tablespaceinfo objects even for
in-place tablespaces. We set the field that would normally contain the
absolute pathname to the relative path pg_tblspc/${TSOID}, and that's
good enough to make basebackup.c happy without any further changes.
However, pg_basebackup needs a couple of adjustments to make it work.
First, it needs to understand that a relative path for a tablespace
means it's an in-place tablespace. Second, it needs to tolerate the
situation where restoring the main tablespace tries to create
pg_tblspc or a subdirectory and finds that it already exists, because
we restore user-defined tablespaces before the main tablespace.
Since in-place tablespaces are only intended for use in development
and testing, no back-patch.
Patch by me, reviewed by Thomas Munro and Michael Paquier.
Discussion: http://postgr.es/m/CA+TgmobwvbEp+fLq2PykMYzizcvuNv0a7gPMJtxOTMOuuRLMHg@mail.gmail.com
Diffstat (limited to 'src/backend/executor/nodeModifyTable.c')
0 files changed, 0 insertions, 0 deletions