Fix pg_dumpall with in-place tablespaces
In-place tablespaces would be dumped with the path produced by pg_tablespace_location(), which is in this case a relative path built as pg_tblspc/OID, but this would fail to restore as such tablespaces need to use an empty string as location. In order to detect if an in-place tablespace is used, this commit checks if the path returned is relative and adapts the dump contents in consequence. Like the other changes related to in-place tablespaces, no backpatch is done as these are only intended for development purposes. Rui Zhao has fixed the code, while the test is from me. Author: Rui Zhao, Michael Paquier Discussion: https://postgr.es/m/80c80b4a-b87b-456f-bd46-1ae326601d79.xiyuan.zr@alibaba-inc.com
This commit is contained in:
parent
f05b1fa1ff
commit
a72d613b4c
|
@ -1286,7 +1286,16 @@ dumpTablespaces(PGconn *conn)
|
|||
appendPQExpBuffer(buf, " OWNER %s", fmtId(spcowner));
|
||||
|
||||
appendPQExpBufferStr(buf, " LOCATION ");
|
||||
appendStringLiteralConn(buf, spclocation, conn);
|
||||
|
||||
/*
|
||||
* In-place tablespaces use a relative path, and need to be dumped
|
||||
* with an empty string as location.
|
||||
*/
|
||||
if (is_absolute_path(spclocation))
|
||||
appendStringLiteralConn(buf, spclocation, conn);
|
||||
else
|
||||
appendStringLiteralConn(buf, "", conn);
|
||||
|
||||
appendPQExpBufferStr(buf, ";\n");
|
||||
|
||||
if (spcoptions && spcoptions[0] != '\0')
|
||||
|
|
|
@ -1907,6 +1907,22 @@ my %tests = (
|
|||
},
|
||||
},
|
||||
|
||||
'CREATE TABLESPACE regress_dump_tablespace' => {
|
||||
create_order => 2,
|
||||
create_sql => q(
|
||||
SET allow_in_place_tablespaces = on;
|
||||
CREATE TABLESPACE regress_dump_tablespace
|
||||
OWNER regress_dump_test_role LOCATION ''),
|
||||
regexp =>
|
||||
qr/^CREATE TABLESPACE regress_dump_tablespace OWNER regress_dump_test_role LOCATION '';/m,
|
||||
like => {
|
||||
pg_dumpall_dbprivs => 1,
|
||||
pg_dumpall_exclude => 1,
|
||||
pg_dumpall_globals => 1,
|
||||
pg_dumpall_globals_clean => 1,
|
||||
},
|
||||
},
|
||||
|
||||
'CREATE DATABASE regression_invalid...' => {
|
||||
create_order => 1,
|
||||
create_sql => q(
|
||||
|
|
Loading…
Reference in New Issue