PostgreSQL Source Code  git master
archive.c
Go to the documentation of this file.
1 /*-------------------------------------------------------------------------
2  *
3  * archive.c
4  * Common WAL archive routines
5  *
6  * Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
7  * Portions Copyright (c) 1994, Regents of the University of California
8  *
9  *
10  * IDENTIFICATION
11  * src/common/archive.c
12  *
13  *-------------------------------------------------------------------------
14  */
15 
16 #ifndef FRONTEND
17 #include "postgres.h"
18 #else
19 #include "postgres_fe.h"
20 #endif
21 
22 #include "common/archive.h"
23 #include "common/percentrepl.h"
24 
25 /*
26  * BuildRestoreCommand
27  *
28  * Builds a restore command to retrieve a file from WAL archives, replacing
29  * the supported aliases with values supplied by the caller as defined by
30  * the GUC parameter restore_command: xlogpath for %p, xlogfname for %f and
31  * lastRestartPointFname for %r.
32  *
33  * The result is a palloc'd string for the restore command built. The
34  * caller is responsible for freeing it. If any of the required arguments
35  * is NULL and that the corresponding alias is found in the command given
36  * by the caller, then an error is thrown.
37  */
38 char *
39 BuildRestoreCommand(const char *restoreCommand,
40  const char *xlogpath,
41  const char *xlogfname,
42  const char *lastRestartPointFname)
43 {
44  char *nativePath = NULL;
45  char *result;
46 
47  if (xlogpath)
48  {
49  nativePath = pstrdup(xlogpath);
50  make_native_path(nativePath);
51  }
52 
53  result = replace_percent_placeholders(restoreCommand, "restore_command", "frp",
54  xlogfname, lastRestartPointFname, nativePath);
55 
56  if (nativePath)
57  pfree(nativePath);
58 
59  return result;
60 }
char * BuildRestoreCommand(const char *restoreCommand, const char *xlogpath, const char *xlogfname, const char *lastRestartPointFname)
Definition: archive.c:39
char * pstrdup(const char *in)
Definition: mcxt.c:1696
void pfree(void *pointer)
Definition: mcxt.c:1521
char * replace_percent_placeholders(const char *instr, const char *param_name, const char *letters,...)
Definition: percentrepl.c:59
void make_native_path(char *filename)
Definition: path.c:168