mirror of
https://github.com/postgres/postgres.git
synced 2025-06-17 17:02:08 +03:00
Map basebackup tablespaces using a tablespace_map file
Windows can't reliably restore symbolic links from a tar format, so instead during backup start we create a tablespace_map file, which is used by the restoring postgres to create the correct links in pg_tblspc. The backup protocol also now has an option to request this file to be included in the backup stream, and this is used by pg_basebackup when operating in tar mode. This is done on all platforms, not just Windows. This means that pg_basebackup will not not work in tar mode against 9.4 and older servers, as this protocol option isn't implemented there. Amit Kapila, reviewed by Dilip Kumar, with a little editing from me.
This commit is contained in:
@ -51,6 +51,7 @@ pg_start_backup(PG_FUNCTION_ARGS)
|
||||
bool fast = PG_GETARG_BOOL(1);
|
||||
char *backupidstr;
|
||||
XLogRecPtr startpoint;
|
||||
DIR *dir;
|
||||
|
||||
backupidstr = text_to_cstring(backupid);
|
||||
|
||||
@ -59,7 +60,16 @@ pg_start_backup(PG_FUNCTION_ARGS)
|
||||
(errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
|
||||
errmsg("must be superuser or replication role to run a backup")));
|
||||
|
||||
startpoint = do_pg_start_backup(backupidstr, fast, NULL, NULL);
|
||||
/* Make sure we can open the directory with tablespaces in it */
|
||||
dir = AllocateDir("pg_tblspc");
|
||||
if (!dir)
|
||||
ereport(ERROR,
|
||||
(errmsg("could not open directory \"%s\": %m", "pg_tblspc")));
|
||||
|
||||
startpoint = do_pg_start_backup(backupidstr, fast, NULL, NULL,
|
||||
dir, NULL, NULL, false, true);
|
||||
|
||||
FreeDir(dir);
|
||||
|
||||
PG_RETURN_LSN(startpoint);
|
||||
}
|
||||
|
Reference in New Issue
Block a user