Line data Source code
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 370 : BuildRestoreCommand(const char *restoreCommand, 40 : const char *xlogpath, 41 : const char *xlogfname, 42 : const char *lastRestartPointFname) 43 : { 44 370 : char *nativePath = NULL; 45 : char *result; 46 : 47 370 : if (xlogpath) 48 : { 49 370 : nativePath = pstrdup(xlogpath); 50 370 : make_native_path(nativePath); 51 : } 52 : 53 370 : result = replace_percent_placeholders(restoreCommand, "restore_command", "frp", 54 : xlogfname, lastRestartPointFname, nativePath); 55 : 56 370 : if (nativePath) 57 370 : pfree(nativePath); 58 : 59 370 : return result; 60 : }