/src/postgres/src/common/archive.c
Line | Count | Source |
1 | | /*------------------------------------------------------------------------- |
2 | | * |
3 | | * archive.c |
4 | | * Common WAL archive routines |
5 | | * |
6 | | * Portions Copyright (c) 1996-2026, 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 | 0 | { |
44 | 0 | char *nativePath = NULL; |
45 | 0 | char *result; |
46 | |
|
47 | 0 | if (xlogpath) |
48 | 0 | { |
49 | 0 | nativePath = pstrdup(xlogpath); |
50 | 0 | make_native_path(nativePath); |
51 | 0 | } |
52 | |
|
53 | 0 | result = replace_percent_placeholders(restoreCommand, "restore_command", "frp", |
54 | 0 | xlogfname, lastRestartPointFname, nativePath); |
55 | |
|
56 | 0 | if (nativePath) |
57 | 0 | pfree(nativePath); |
58 | |
|
59 | 0 | return result; |
60 | 0 | } |