| /*------------------------------------------------------------------------- |
| * |
| * archive.c |
| * Common WAL archive routines |
| * |
| * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group |
| * Portions Copyright (c) 1994, Regents of the University of California |
| * |
| * |
| * IDENTIFICATION |
| * src/common/archive.c |
| * |
| *------------------------------------------------------------------------- |
| */ |
| |
| #ifndef FRONTEND |
| #include "postgres.h" |
| #else |
| #include "postgres_fe.h" |
| #endif |
| |
| #include "common/archive.h" |
| #include "common/percentrepl.h" |
| |
| #include "cdb/cdbvars.h" |
| |
| extern void pg_ltoa(int32 value, char *a); |
| |
| /* |
| * BuildRestoreCommand |
| * |
| * Builds a restore command to retrieve a file from WAL archives, replacing |
| * the supported aliases with values supplied by the caller as defined by |
| * the GUC parameter restore_command: xlogpath for %p, xlogfname for %f and |
| * lastRestartPointFname for %r. |
| * |
| * The result is a palloc'd string for the restore command built. The |
| * caller is responsible for freeing it. If any of the required arguments |
| * is NULL and that the corresponding alias is found in the command given |
| * by the caller, then an error is thrown. |
| */ |
| char * |
| BuildRestoreCommand(const char *restoreCommand, |
| const char *xlogpath, |
| const char *xlogfname, |
| const char *lastRestartPointFname) |
| { |
| char *nativePath = NULL; |
| char *result; |
| |
| if (xlogpath) |
| { |
| nativePath = pstrdup(xlogpath); |
| make_native_path(nativePath); |
| } |
| |
| result = replace_percent_placeholders(restoreCommand, "restore_command", "frp", |
| xlogfname, lastRestartPointFname, nativePath); |
| |
| if (nativePath) |
| pfree(nativePath); |
| |
| return result; |
| } |