diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c index 32ade5d7590f31b66716542d59888337c8ca7709..3c23f0fc292fcdb9fd750c8294b374292cf858f4 100644 --- a/src/backend/access/transam/xlog.c +++ b/src/backend/access/transam/xlog.c @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/backend/access/transam/xlog.c,v 1.159 2004/08/11 04:07:15 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/access/transam/xlog.c,v 1.160 2004/08/12 18:32:25 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -1962,17 +1962,20 @@ RestoreArchivedFile(char *path, const char *xlogfname, /* %p: full path of target file */ sp++; StrNCpy(dp, xlogpath, endp-dp); -#ifndef WIN32 + /* + * make_native_path() is required because COPY is an internal + * CMD.EXE command and doesn't process forward slashes in the + * same way as external commands. Quoting the first argument + * to COPY does not convert forward to backward slashes, but + * COPY does properly process quoted forward slashes in the + * second argument. + * + * COPY works with quoted forward slashes in the first argument + * only if the current directory is the same as the directory + * of the first argument. + */ + make_native_path(dp); dp += strlen(dp); -#else - /* On Windows, change / to \ in the substituted path */ - while (*dp) - { - if (*dp == '/') - *dp = '\\'; - dp++; - } -#endif break; case 'f': /* %f: filename of desired file */ diff --git a/src/backend/utils/misc/postgresql.conf.sample b/src/backend/utils/misc/postgresql.conf.sample index 09ccdb2fb82972f7ea249a90962aec456ddcaeb7..28463c6ae9b4990bf320e39b6e85ffde767c1b5b 100644 --- a/src/backend/utils/misc/postgresql.conf.sample +++ b/src/backend/utils/misc/postgresql.conf.sample @@ -117,13 +117,17 @@ # - Archiving - #archive_command = '' # command to use to archive a logfile segment - +# # If archive_command is '' then archiving is disabled. Otherwise, set it -# to a command to copy a file to the proper place. A simplistic example -# is 'cp %p /mnt/server/archivedir/%f'. Any %p in the string is replaced -# by the absolute path of the file to archive, while any %f is replaced by -# the file name only. NOTE: it is important for the command to return -# zero exit status if and only if it succeeded. +# to a command to copy a file to the proper place. Any %p in the string +# is replaced by the absolute path of the file to archive, while any %f is +# replaced by the file name only. NOTE: it is important for the command to +# return zero exit status only if it succeeds. +# +# Examples: +# archive_command = 'cp "%p" /mnt/server/archivedir/"%f"' +# archive_command = 'copy "%p" /mnt/server/archivedir/"%f"' # Win32 + #--------------------------------------------------------------------------- # QUERY TUNING diff --git a/src/include/port.h b/src/include/port.h index 013243cc279d157708278a1cb6363a6db3725183..2091b8ec3499f61a6c6f442f336e53535b820c40 100644 --- a/src/include/port.h +++ b/src/include/port.h @@ -6,7 +6,7 @@ * Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/port.h,v 1.51 2004/08/09 02:12:51 momjian Exp $ + * $PostgreSQL: pgsql/src/include/port.h,v 1.52 2004/08/12 18:32:43 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -39,6 +39,7 @@ extern char *last_dir_separator(const char *filename); extern char *first_path_separator(const char *filename); extern void canonicalize_path(char *path); +extern void make_native_path(char *path); extern const char *get_progname(const char *argv0); extern void get_share_path(const char *my_exec_path, char *ret_path); extern void get_etc_path(const char *my_exec_path, char *ret_path); diff --git a/src/port/path.c b/src/port/path.c index 040c8a6eb721cec3104ea57d34f1c0cd26d9b18b..2a7428d0ba64ee349f94f33d3ca6878af23ec328 100644 --- a/src/port/path.c +++ b/src/port/path.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/port/path.c,v 1.27 2004/08/09 20:20:46 tgl Exp $ + * $PostgreSQL: pgsql/src/port/path.c,v 1.28 2004/08/12 18:32:52 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -87,6 +87,23 @@ last_dir_separator(const char *filename) } +/* + * make_native_path + * On WIN32, change / to \ in the path. + */ +void +make_native_path(char *filename) +{ +#ifdef WIN32 + char *p; + + for (p = filename; *p; p++) + if (*p == '/') + *p = '\\'; +#endif +} + + /* * Make all paths look like Unix */