summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBruce Momjian2025-11-14 14:08:53 +0000
committerBruce Momjian2025-11-14 14:08:53 +0000
commit43e6929bb2945553df021874914ade88743abc1f (patch)
tree3a61489aefacfa76560bc63c72b15663e2b031e5
parenta554389fb5f96baba834c28bd4fc802fa1c8065f (diff)
doc: double-quote use of %f, %p, and %r in literal commands.HEADmaster
Path expansion might expose characters like spaces which would cause command failure, so double-quote the examples. While %f doesn't need quoting since it uses a fixed character set, it is best to be consistent. Discussion: https://postgr.es/m/[email protected] Backpatch-through: master
-rw-r--r--doc/src/sgml/backup.sgml8
-rw-r--r--doc/src/sgml/config.sgml4
-rw-r--r--doc/src/sgml/high-availability.sgml4
-rw-r--r--doc/src/sgml/ref/pgarchivecleanup.sgml4
-rw-r--r--src/backend/utils/misc/postgresql.conf.sample4
5 files changed, 12 insertions, 12 deletions
diff --git a/doc/src/sgml/backup.sgml b/doc/src/sgml/backup.sgml
index 5f7489afbd1..168444eccc5 100644
--- a/doc/src/sgml/backup.sgml
+++ b/doc/src/sgml/backup.sgml
@@ -627,7 +627,7 @@ tar -cf backup.tar /usr/local/pgsql/data
character in the command. The simplest useful command is something
like:
<programlisting>
-archive_command = 'test ! -f /mnt/server/archivedir/%f &amp;&amp; cp %p /mnt/server/archivedir/%f' # Unix
+archive_command = 'test ! -f "/mnt/server/archivedir/%f" &amp;&amp; cp "%p" "/mnt/server/archivedir/%f"' # Unix
archive_command = 'copy "%p" "C:\\server\\archivedir\\%f"' # Windows
</programlisting>
which will copy archivable WAL segments to the directory
@@ -1294,7 +1294,7 @@ SELECT * FROM pg_backup_stop(wait_for_archive => true);
character in the command. The simplest useful command is
something like:
<programlisting>
-restore_command = 'cp /mnt/server/archivedir/%f %p'
+restore_command = 'cp "/mnt/server/archivedir/%f" "%p"'
</programlisting>
which will copy previously archived WAL segments from the directory
<filename>/mnt/server/archivedir</filename>. Of course, you can use something
@@ -1493,11 +1493,11 @@ restore_command = 'cp /mnt/server/archivedir/%f %p'
If archive storage size is a concern, you can use
<application>gzip</application> to compress the archive files:
<programlisting>
-archive_command = 'gzip &lt; %p &gt; /mnt/server/archivedir/%f.gz'
+archive_command = 'gzip &lt; "%p" &gt; "/mnt/server/archivedir/%f.gz"'
</programlisting>
You will then need to use <application>gunzip</application> during recovery:
<programlisting>
-restore_command = 'gunzip &lt; /mnt/server/archivedir/%f.gz &gt; %p'
+restore_command = 'gunzip &lt; "/mnt/server/archivedir/%f.gz" &gt; "%p"'
</programlisting>
</para>
</sect3>
diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgml
index d7e48f61905..df1c3eaaa58 100644
--- a/doc/src/sgml/config.sgml
+++ b/doc/src/sgml/config.sgml
@@ -4059,7 +4059,7 @@ include_dir 'conf.d'
names that are not present in the archive; it must return nonzero
when so asked. Examples:
<programlisting>
-restore_command = 'cp /mnt/server/archivedir/%f "%p"'
+restore_command = 'cp "/mnt/server/archivedir/%f" "%p"'
restore_command = 'copy "C:\\server\\archivedir\\%f" "%p"' # Windows
</programlisting>
An exception is that if the command was terminated by a signal (other
@@ -4098,7 +4098,7 @@ restore_command = 'copy "C:\\server\\archivedir\\%f" "%p"' # Windows
The <xref linkend="pgarchivecleanup"/> module
is often used in <varname>archive_cleanup_command</varname> for
single-standby configurations, for example:
-<programlisting>archive_cleanup_command = 'pg_archivecleanup /mnt/server/archivedir %r'</programlisting>
+<programlisting>archive_cleanup_command = 'pg_archivecleanup /mnt/server/archivedir "%r"'</programlisting>
Note however that if multiple standby servers are restoring from the
same archive directory, you will need to ensure that you do not delete
WAL files until they are no longer needed by any of the servers.
diff --git a/doc/src/sgml/high-availability.sgml b/doc/src/sgml/high-availability.sgml
index 340c4622221..81eeadd6c47 100644
--- a/doc/src/sgml/high-availability.sgml
+++ b/doc/src/sgml/high-availability.sgml
@@ -745,8 +745,8 @@ protocol to make nodes agree on a serializable transactional order.
A simple example of configuration is:
<programlisting>
primary_conninfo = 'host=192.168.1.50 port=5432 user=foo password=foopass options=''-c wal_sender_timeout=5000'''
-restore_command = 'cp /path/to/archive/%f %p'
-archive_cleanup_command = 'pg_archivecleanup /path/to/archive %r'
+restore_command = 'cp "/path/to/archive/%f" "%p"'
+archive_cleanup_command = 'pg_archivecleanup /path/to/archive "%r"'
</programlisting>
</para>
diff --git a/doc/src/sgml/ref/pgarchivecleanup.sgml b/doc/src/sgml/ref/pgarchivecleanup.sgml
index cd8f49b1c5b..79e751381ac 100644
--- a/doc/src/sgml/ref/pgarchivecleanup.sgml
+++ b/doc/src/sgml/ref/pgarchivecleanup.sgml
@@ -44,7 +44,7 @@ PostgreSQL documentation
server to use <application>pg_archivecleanup</application>, put this into its
<filename>postgresql.conf</filename> configuration file:
<programlisting>
-archive_cleanup_command = 'pg_archivecleanup <replaceable>archivelocation</replaceable> %r'
+archive_cleanup_command = 'pg_archivecleanup <replaceable>archivelocation</replaceable> "%r"'
</programlisting>
where <replaceable>archivelocation</replaceable> is the directory from which WAL segment
files should be removed.
@@ -198,7 +198,7 @@ pg_archivecleanup: removing file "archive/00000001000000370000000E"
<para>On Linux or Unix systems, you might use:
<programlisting>
-archive_cleanup_command = 'pg_archivecleanup -d /mnt/standby/archive %r 2>>cleanup.log'
+archive_cleanup_command = 'pg_archivecleanup -d /mnt/standby/archive "%r" 2>>cleanup.log'
</programlisting>
where the archive directory is physically located on the standby server,
so that the <varname>archive_command</varname> is accessing it across NFS,
diff --git a/src/backend/utils/misc/postgresql.conf.sample b/src/backend/utils/misc/postgresql.conf.sample
index 08bcef50c19..fdb37e927de 100644
--- a/src/backend/utils/misc/postgresql.conf.sample
+++ b/src/backend/utils/misc/postgresql.conf.sample
@@ -283,7 +283,7 @@
#archive_command = '' # command to use to archive a WAL file
# placeholders: %p = path of file to archive
# %f = file name only
- # e.g. 'test ! -f /mnt/server/archivedir/%f && cp %p /mnt/server/archivedir/%f'
+ # e.g. 'test ! -f "/mnt/server/archivedir/%f" && cp "%p" "/mnt/server/archivedir/%f"'
#archive_timeout = 0 # force a WAL file switch after this
# number of seconds; 0 disables
@@ -294,7 +294,7 @@
#restore_command = '' # command to use to restore an archived WAL file
# placeholders: %p = path of file to restore
# %f = file name only
- # e.g. 'cp /mnt/server/archivedir/%f %p'
+ # e.g. 'cp "/mnt/server/archivedir/%f" "%p"'
#archive_cleanup_command = '' # command to execute at every restartpoint
#recovery_end_command = '' # command to execute at completion of recovery