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-2025, 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 */
38char *
39BuildRestoreCommand(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:236