{"kind": "tool", "major": "18", "item": {"slug": "pg-archivecleanup", "name": "pg_archivecleanup", "name_zh": "", "category": "Server applications", "summary": "pg_archivecleanup \u2014 clean up PostgreSQL WAL archive files", "aliases": ["pg_archivecleanup"], "content_hash": "fd7e17ef53e64339c1e0732987939789b3737b7d1d2b704006363f6d77c43f3b", "versions": {"10": {"facts": [{"label": "Documented executable", "value": "pg_archivecleanup"}, {"label": "Executable version", "value": "10.23"}, {"label": "Reference inventory", "value": "Server applications"}, {"label": "Option definition groups", "value": "5"}], "tables": [{"key": "options", "rows": [{"summary": "Print lots of debug logging output on stderr .", "signature": {"url": "/docs/10/pgarchivecleanup.html", "text": "-d"}}, {"summary": "Print the names of the files that would have been removed on stdout (performs a dry run).", "signature": {"url": "/docs/10/pgarchivecleanup.html", "text": "-n"}}, {"summary": "Print the pg_archivecleanup version and exit.", "signature": {"url": "/docs/10/pgarchivecleanup.html", "text": "-V --version"}}, {"summary": "Provide an extension that will be stripped from all file names before deciding if they should be deleted. This is typically useful for cleaning up archives that have been compressed during storage, and therefore have had an extension added by the compression program. For example: -x .gz .", "signature": {"url": "/docs/10/pgarchivecleanup.html", "text": "-x extension"}}, {"summary": "Show help about pg_archivecleanup command line arguments, and exit.", "signature": {"url": "/docs/10/pgarchivecleanup.html", "text": "-? --help"}}], "title": "Documented options", "columns": [{"key": "signature", "label": "Option and arguments"}, {"key": "summary", "label": "Description"}]}], "options": [{"names": ["-d"], "summary": "Print lots of debug logging output on stderr .", "signature": "-d", "source_url": "/docs/10/pgarchivecleanup.html", "description": "Print lots of debug logging output on stderr ."}, {"names": ["-n"], "summary": "Print the names of the files that would have been removed on stdout (performs a dry run).", "signature": "-n", "source_url": "/docs/10/pgarchivecleanup.html", "description": "Print the names of the files that would have been removed on stdout (performs a dry run)."}, {"names": ["-V", "--version"], "summary": "Print the pg_archivecleanup version and exit.", "signature": "-V --version", "source_url": "/docs/10/pgarchivecleanup.html", "description": "Print the pg_archivecleanup version and exit."}, {"names": ["-x"], "summary": "Provide an extension that will be stripped from all file names before deciding if they should be deleted. This is typically useful for cleaning up archives that have been compressed during storage, and therefore have had an extension added by the compression program. For example: -x .gz .", "signature": "-x extension", "source_url": "/docs/10/pgarchivecleanup.html", "description": "Provide an extension that will be stripped from all file names before deciding if they should be deleted. This is typically useful for cleaning up archives that have been compressed during storage, and therefore have had an extension added by the compression program. For example: -x .gz ."}, {"names": ["-?", "--help"], "summary": "Show help about pg_archivecleanup command line arguments, and exit.", "signature": "-? --help", "source_url": "/docs/10/pgarchivecleanup.html", "description": "Show help about pg_archivecleanup command line arguments, and exit."}], "related": [], "release": {"ref": "https://ftp.postgresql.org/pub/source/v10.23/postgresql-10.23.tar.bz2", "label": "10.23", "major": "10", "channel": "historical", "manifest": {"pdf": {"A4": {"url": "/files/documentation/pdf/10/postgresql-10-A4.pdf", "bytes": 12631706, "pages": 2591, "sha256": "34497ab9efb45c5bdf1bd11b9016b5451354feb462fa029cf74557a5fa5fbbc1", "built_at": "2026-09-26"}, "US": {"url": "/files/documentation/pdf/10/postgresql-10-US.pdf", "bytes": 12531684, "pages": 2724, "sha256": "429cc7133ddf4f97c560aa466dc9caea4b718721a8321e293357037cf0af4733", "built_at": "2026-09-26"}}, "tree": "10", "index": "index.html", "major": "10", "pages": 1085, "release": "10.23", "source_url": "https://ftp.postgresql.org/pub/source/v10.23/postgresql-10.23.tar.bz2", "svg_assets": 0, "source_mode": "en HTML verified against the pinned official archive", "source_sha256": "94a4b2528372458e5662c18d406629266667c437198160a18cdfd2c4a4d6eee9"}, "revision": "f9301feba91e2e2566038a36b8cee0e4402db68989538f88670fddd20b1f78ea", "evidence_kind": "English manual and source declarations", "source_sha256": "94a4b2528372458e5662c18d406629266667c437198160a18cdfd2c4a4d6eee9"}, "sources": [{"url": "/docs/10/pgarchivecleanup.html", "file": "pgarchivecleanup.html", "label": "10.23 English manual \u00b7 pgarchivecleanup.html", "anchor": "", "sha256": "316d6f09b8e1fcf2d2850ad2fa3098cc94b1588737b6d88d1487fa53dc2bbc64"}, {"url": "/docs/10/reference-server.html", "file": "reference-server.html", "label": "Server applications inventory", "anchor": "", "sha256": "2a6043b88501763a31348758a370a42cd7f9a179c7fdf3ef0e353c82e95b33e9"}], "sections": [], "synopsis": ["pg_archivecleanup [ option ...] archivelocation oldestkeptwalfile"], "signature": "pg_archivecleanup [ option ...] archivelocation oldestkeptwalfile", "description": ["pg_archivecleanup \u2014 clean up PostgreSQL WAL archive files"], "environment": [], "manual_html": "<div><div class=\"refentry\" id=\"PGARCHIVECLEANUP\">\n<div class=\"titlepage\"></div>\n\n<div class=\"refnamediv\">\n<h2><span class=\"refentrytitle\"><span class=\"application\">pg_archivecleanup</span></span></h2>\n<p>pg_archivecleanup \u2014 clean up <span class=\"productname\">PostgreSQL</span> WAL archive files</p>\n</div>\n<div class=\"refsynopsisdiv\">\n<h2>Synopsis</h2>\n<div class=\"cmdsynopsis\">\n<p id=\"id-1.9.5.4.4.1\"><code class=\"command\">pg_archivecleanup</code> [<em class=\"replaceable\"><code>option</code></em>...] <em class=\"replaceable\"><code>archivelocation</code></em> <em class=\"replaceable\"><code>oldestkeptwalfile</code></em></p>\n</div>\n</div>\n<div class=\"refsect1\" id=\"id-1.9.5.4.5\">\n<h2>Description</h2>\n<p><span class=\"application\">pg_archivecleanup</span> is designed to be used as an <code class=\"literal\">archive_cleanup_command</code> to clean up WAL file archives when running as a standby server (see <a class=\"xref\" href=\"/docs/10/warm-standby.html\" title=\"26.2.\u00a0Log-Shipping Standby Servers\">Section\u00a026.2</a>). <span class=\"application\">pg_archivecleanup</span> can also be used as a standalone program to clean WAL file archives.</p>\n<p>To configure a standby server to use <span class=\"application\">pg_archivecleanup</span>, put this into its <code class=\"filename\">recovery.conf</code> configuration file:</p>\n<pre class=\"programlisting\">archive_cleanup_command = 'pg_archivecleanup <em class=\"replaceable\"><code>archivelocation</code></em> %r'\n</pre>\n<p>where <em class=\"replaceable\"><code>archivelocation</code></em> is the directory from which WAL segment files should be removed.</p>\n<p>When used within <a class=\"xref\" href=\"/docs/10/archive-recovery-settings.html#ARCHIVE-CLEANUP-COMMAND\">archive_cleanup_command</a>, all WAL files logically preceding the value of the <code class=\"literal\">%r</code> argument will be removed from <em class=\"replaceable\"><code>archivelocation</code></em>. This minimizes the number of files that need to be retained, while preserving crash-restart capability. Use of this parameter is appropriate if the <em class=\"replaceable\"><code>archivelocation</code></em> is a transient staging area for this particular standby server, but <span class=\"emphasis\"><em>not</em></span> when the <em class=\"replaceable\"><code>archivelocation</code></em> is intended as a long-term WAL archive area, or when multiple standby servers are recovering from the same archive location.</p>\n<p>When used as a standalone program all WAL files logically preceding the <em class=\"replaceable\"><code>oldestkeptwalfile</code></em> will be removed from <em class=\"replaceable\"><code>archivelocation</code></em>. In this mode, if you specify a <code class=\"filename\">.partial</code> or <code class=\"filename\">.backup</code> file name, then only the file prefix will be used as the <em class=\"replaceable\"><code>oldestkeptwalfile</code></em>. This treatment of <code class=\"filename\">.backup</code> file name allows you to remove all WAL files archived prior to a specific base backup without error. For example, the following example will remove all files older than WAL file name <code class=\"filename\">000000010000003700000010</code>:</p>\n<pre class=\"programlisting\">pg_archivecleanup -d archive 000000010000003700000010.00000020.backup\n\npg_archivecleanup:  keep WAL file \"archive/000000010000003700000010\" and later\npg_archivecleanup:  removing file \"archive/00000001000000370000000F\"\npg_archivecleanup:  removing file \"archive/00000001000000370000000E\"\n</pre>\n<p><span class=\"application\">pg_archivecleanup</span> assumes that <em class=\"replaceable\"><code>archivelocation</code></em> is a directory readable and writable by the server-owning user.</p>\n</div>\n<div class=\"refsect1\" id=\"id-1.9.5.4.6\">\n<h2>Options</h2>\n<p><span class=\"application\">pg_archivecleanup</span> accepts the following command-line arguments:</p>\n<div class=\"variablelist\">\n<dl class=\"variablelist\">\n<dt><span class=\"term\"><code class=\"option\">-d</code></span></dt>\n<dd>\n<p>Print lots of debug logging output on <code class=\"filename\">stderr</code>.</p>\n</dd>\n<dt><span class=\"term\"><code class=\"option\">-n</code></span></dt>\n<dd>\n<p>Print the names of the files that would have been removed on <code class=\"filename\">stdout</code> (performs a dry run).</p>\n</dd>\n<dt><span class=\"term\"><code class=\"option\">-V</code><br></span><span class=\"term\"><code class=\"option\">--version</code></span></dt>\n<dd>\n<p>Print the <span class=\"application\">pg_archivecleanup</span> version and exit.</p>\n</dd>\n<dt><span class=\"term\"><code class=\"option\">-x</code> <em class=\"replaceable\"><code>extension</code></em></span></dt>\n<dd>\n<p>Provide an extension that will be stripped from all file names before deciding if they should be deleted. This is typically useful for cleaning up archives that have been compressed during storage, and therefore have had an extension added by the compression program. For example: <code class=\"literal\">-x .gz</code>.</p>\n</dd>\n<dt><span class=\"term\"><code class=\"option\">-?</code><br></span><span class=\"term\"><code class=\"option\">--help</code></span></dt>\n<dd>\n<p>Show help about <span class=\"application\">pg_archivecleanup</span> command line arguments, and exit.</p>\n</dd>\n</dl>\n</div>\n</div>\n<div class=\"refsect1\" id=\"id-1.9.5.4.7\">\n<h2>Notes</h2>\n<p><span class=\"application\">pg_archivecleanup</span> is designed to work with <span class=\"productname\">PostgreSQL</span> 8.0 and later when used as a standalone utility, or with <span class=\"productname\">PostgreSQL</span> 9.0 and later when used as an archive cleanup command.</p>\n<p><span class=\"application\">pg_archivecleanup</span> is written in C and has an easy-to-modify source code, with specifically designated sections to modify for your own needs</p>\n</div>\n<div class=\"refsect1\" id=\"id-1.9.5.4.8\">\n<h2>Examples</h2>\n<p>On Linux or Unix systems, you might use:</p>\n<pre class=\"programlisting\">archive_cleanup_command = 'pg_archivecleanup -d /mnt/standby/archive %r 2&gt;&gt;cleanup.log'\n</pre>\n<p>where the archive directory is physically located on the standby server, so that the <code class=\"varname\">archive_command</code> is accessing it across NFS, but the files are local to the standby. This will:</p>\n<div class=\"itemizedlist\">\n<ul class=\"itemizedlist\">\n<li class=\"listitem\">\n<p>produce debugging output in <code class=\"filename\">cleanup.log</code></p>\n</li>\n<li class=\"listitem\">\n<p>remove no-longer-needed files from the archive directory</p>\n</li>\n</ul>\n</div>\n</div>\n<div class=\"refsect1\" id=\"id-1.9.5.4.9\">\n<h2>See Also</h2>\n<span class=\"simplelist\"><a class=\"xref\" href=\"/docs/10/pgstandby.html\" title=\"pg_standby\"><span class=\"refentrytitle\"><span class=\"application\">pg_standby</span></span></a></span></div>\n</div></div>", "manual_path": "pgarchivecleanup.html", "comparison_data": {"options": [{"names": ["-d"], "signature": "-d", "description": "Print lots of debug logging output on stderr ."}, {"names": ["-n"], "signature": "-n", "description": "Print the names of the files that would have been removed on stdout (performs a dry run)."}, {"names": ["-V", "--version"], "signature": "-V --version", "description": "Print the pg_archivecleanup version and exit."}, {"names": ["-x"], "signature": "-x extension", "description": "Provide an extension that will be stripped from all file names before deciding if they should be deleted. This is typically useful for cleaning up archives that have been compressed during storage, and therefore have had an extension added by the compression program. For example: -x .gz ."}, {"names": ["-?", "--help"], "signature": "-? --help", "description": "Show help about pg_archivecleanup command line arguments, and exit."}], "synopsis": ["pg_archivecleanup [ option ...] archivelocation oldestkeptwalfile"], "environment": []}, "comparison_hash": "1db06106b1b902165d9e4e88eff43da7068a3d855003616f4ae745c765f35801"}, "11": {"facts": [{"label": "Documented executable", "value": "pg_archivecleanup"}, {"label": "Executable version", "value": "11.22"}, {"label": "Reference inventory", "value": "Server applications"}, {"label": "Option definition groups", "value": "5"}], "tables": [{"key": "options", "rows": [{"summary": "Print lots of debug logging output on stderr .", "signature": {"url": "/docs/11/pgarchivecleanup.html", "text": "-d"}}, {"summary": "Print the names of the files that would have been removed on stdout (performs a dry run).", "signature": {"url": "/docs/11/pgarchivecleanup.html", "text": "-n"}}, {"summary": "Print the pg_archivecleanup version and exit.", "signature": {"url": "/docs/11/pgarchivecleanup.html", "text": "-V --version"}}, {"summary": "Provide an extension that will be stripped from all file names before deciding if they should be deleted. This is typically useful for cleaning up archives that have been compressed during storage, and therefore have had an extension added by the compression program. For example: -x .gz .", "signature": {"url": "/docs/11/pgarchivecleanup.html", "text": "-x extension"}}, {"summary": "Show help about pg_archivecleanup command line arguments, and exit.", "signature": {"url": "/docs/11/pgarchivecleanup.html", "text": "-? --help"}}], "title": "Documented options", "columns": [{"key": "signature", "label": "Option and arguments"}, {"key": "summary", "label": "Description"}]}], "options": [{"names": ["-d"], "summary": "Print lots of debug logging output on stderr .", "signature": "-d", "source_url": "/docs/11/pgarchivecleanup.html", "description": "Print lots of debug logging output on stderr ."}, {"names": ["-n"], "summary": "Print the names of the files that would have been removed on stdout (performs a dry run).", "signature": "-n", "source_url": "/docs/11/pgarchivecleanup.html", "description": "Print the names of the files that would have been removed on stdout (performs a dry run)."}, {"names": ["-V", "--version"], "summary": "Print the pg_archivecleanup version and exit.", "signature": "-V --version", "source_url": "/docs/11/pgarchivecleanup.html", "description": "Print the pg_archivecleanup version and exit."}, {"names": ["-x"], "summary": "Provide an extension that will be stripped from all file names before deciding if they should be deleted. This is typically useful for cleaning up archives that have been compressed during storage, and therefore have had an extension added by the compression program. For example: -x .gz .", "signature": "-x extension", "source_url": "/docs/11/pgarchivecleanup.html", "description": "Provide an extension that will be stripped from all file names before deciding if they should be deleted. This is typically useful for cleaning up archives that have been compressed during storage, and therefore have had an extension added by the compression program. For example: -x .gz ."}, {"names": ["-?", "--help"], "summary": "Show help about pg_archivecleanup command line arguments, and exit.", "signature": "-? --help", "source_url": "/docs/11/pgarchivecleanup.html", "description": "Show help about pg_archivecleanup command line arguments, and exit."}], "related": [], "release": {"ref": "https://ftp.postgresql.org/pub/source/v11.22/postgresql-11.22.tar.bz2", "label": "11.22", "major": "11", "channel": "historical", "manifest": {"pdf": {"A4": {"url": "/files/documentation/pdf/11/postgresql-11-A4.pdf", "bytes": 13057499, "pages": 2732, "sha256": "41d75855e610d0d9b8802b87dc5b080bef8d7e91c7cf69401fbf8d3cf801b4b5", "built_at": "2026-09-26"}, "US": {"url": "/files/documentation/pdf/11/postgresql-11-US.pdf", "bytes": 12961189, "pages": 2883, "sha256": "6a8899ef36935a5b7ed2b436207564a567a4ef1eb1c2200195876b8de4d4fa30", "built_at": "2026-09-26"}}, "tree": "11", "index": "index.html", "major": "11", "pages": 1125, "release": "11.22", "source_url": "https://ftp.postgresql.org/pub/source/v11.22/postgresql-11.22.tar.bz2", "svg_assets": 0, "source_mode": "en HTML verified against the pinned official archive", "source_sha256": "2cb7c97d7a0d7278851bbc9c61f467b69c094c72b81740b751108e7892ebe1f0"}, "revision": "53315ddaf3b3f9e6669fd1edc096bbb2cd4a65ea3e836c89e542b43af9ba3a7f", "evidence_kind": "English manual and source declarations", "source_sha256": "2cb7c97d7a0d7278851bbc9c61f467b69c094c72b81740b751108e7892ebe1f0"}, "sources": [{"url": "/docs/11/pgarchivecleanup.html", "file": "pgarchivecleanup.html", "label": "11.22 English manual \u00b7 pgarchivecleanup.html", "anchor": "", "sha256": "0dc054eb49e89272e648781b76bd76ece285598600cb2b3612683e603989da73"}, {"url": "/docs/11/reference-server.html", "file": "reference-server.html", "label": "Server applications inventory", "anchor": "", "sha256": "e940a8505b6742c717a1683d19bf8f759aad245633a59db9e83a345ae7c5709a"}], "sections": [], "synopsis": ["pg_archivecleanup [ option ...] archivelocation oldestkeptwalfile"], "signature": "pg_archivecleanup [ option ...] archivelocation oldestkeptwalfile", "description": ["pg_archivecleanup \u2014 clean up PostgreSQL WAL archive files"], "environment": [], "manual_html": "<div><div class=\"refentry\" id=\"PGARCHIVECLEANUP\">\n<div class=\"titlepage\"></div>\n<div class=\"refnamediv\">\n<h2><span class=\"refentrytitle\"><span class=\"application\">pg_archivecleanup</span></span></h2>\n<p>pg_archivecleanup \u2014 clean up <span class=\"productname\">PostgreSQL</span> WAL archive files</p>\n</div>\n<div class=\"refsynopsisdiv\">\n<h2>Synopsis</h2>\n<div class=\"cmdsynopsis\">\n<p id=\"id-1.9.5.4.4.1\"><code class=\"command\">pg_archivecleanup</code> [<em class=\"replaceable\"><code>option</code></em>...] <em class=\"replaceable\"><code>archivelocation</code></em> <em class=\"replaceable\"><code>oldestkeptwalfile</code></em></p>\n</div>\n</div>\n<div class=\"refsect1\" id=\"id-1.9.5.4.5\">\n<h2>Description</h2>\n<p><span class=\"application\">pg_archivecleanup</span> is designed to be used as an <code class=\"literal\">archive_cleanup_command</code> to clean up WAL file archives when running as a standby server (see <a class=\"xref\" href=\"/docs/11/warm-standby.html\" title=\"26.2.\u00a0Log-Shipping Standby Servers\">Section\u00a026.2</a>). <span class=\"application\">pg_archivecleanup</span> can also be used as a standalone program to clean WAL file archives.</p>\n<p>To configure a standby server to use <span class=\"application\">pg_archivecleanup</span>, put this into its <code class=\"filename\">recovery.conf</code> configuration file:</p>\n<pre class=\"programlisting\">archive_cleanup_command = 'pg_archivecleanup <em class=\"replaceable\"><code>archivelocation</code></em> %r'\n</pre>\n<p>where <em class=\"replaceable\"><code>archivelocation</code></em> is the directory from which WAL segment files should be removed.</p>\n<p>When used within <a class=\"xref\" href=\"/docs/11/archive-recovery-settings.html#ARCHIVE-CLEANUP-COMMAND\">archive_cleanup_command</a>, all WAL files logically preceding the value of the <code class=\"literal\">%r</code> argument will be removed from <em class=\"replaceable\"><code>archivelocation</code></em>. This minimizes the number of files that need to be retained, while preserving crash-restart capability. Use of this parameter is appropriate if the <em class=\"replaceable\"><code>archivelocation</code></em> is a transient staging area for this particular standby server, but <span class=\"emphasis\"><em>not</em></span> when the <em class=\"replaceable\"><code>archivelocation</code></em> is intended as a long-term WAL archive area, or when multiple standby servers are recovering from the same archive location.</p>\n<p>When used as a standalone program all WAL files logically preceding the <em class=\"replaceable\"><code>oldestkeptwalfile</code></em> will be removed from <em class=\"replaceable\"><code>archivelocation</code></em>. In this mode, if you specify a <code class=\"filename\">.partial</code> or <code class=\"filename\">.backup</code> file name, then only the file prefix will be used as the <em class=\"replaceable\"><code>oldestkeptwalfile</code></em>. This treatment of <code class=\"filename\">.backup</code> file name allows you to remove all WAL files archived prior to a specific base backup without error. For example, the following example will remove all files older than WAL file name <code class=\"filename\">000000010000003700000010</code>:</p>\n<pre class=\"programlisting\">pg_archivecleanup -d archive 000000010000003700000010.00000020.backup\n\npg_archivecleanup:  keep WAL file \"archive/000000010000003700000010\" and later\npg_archivecleanup:  removing file \"archive/00000001000000370000000F\"\npg_archivecleanup:  removing file \"archive/00000001000000370000000E\"\n</pre>\n<p><span class=\"application\">pg_archivecleanup</span> assumes that <em class=\"replaceable\"><code>archivelocation</code></em> is a directory readable and writable by the server-owning user.</p>\n</div>\n<div class=\"refsect1\" id=\"id-1.9.5.4.6\">\n<h2>Options</h2>\n<p><span class=\"application\">pg_archivecleanup</span> accepts the following command-line arguments:</p>\n<div class=\"variablelist\">\n<dl class=\"variablelist\">\n<dt><span class=\"term\"><code class=\"option\">-d</code></span></dt>\n<dd>\n<p>Print lots of debug logging output on <code class=\"filename\">stderr</code>.</p>\n</dd>\n<dt><span class=\"term\"><code class=\"option\">-n</code></span></dt>\n<dd>\n<p>Print the names of the files that would have been removed on <code class=\"filename\">stdout</code> (performs a dry run).</p>\n</dd>\n<dt><span class=\"term\"><code class=\"option\">-V</code><br></span><span class=\"term\"><code class=\"option\">--version</code></span></dt>\n<dd>\n<p>Print the <span class=\"application\">pg_archivecleanup</span> version and exit.</p>\n</dd>\n<dt><span class=\"term\"><code class=\"option\">-x</code> <em class=\"replaceable\"><code>extension</code></em></span></dt>\n<dd>\n<p>Provide an extension that will be stripped from all file names before deciding if they should be deleted. This is typically useful for cleaning up archives that have been compressed during storage, and therefore have had an extension added by the compression program. For example: <code class=\"literal\">-x .gz</code>.</p>\n</dd>\n<dt><span class=\"term\"><code class=\"option\">-?</code><br></span><span class=\"term\"><code class=\"option\">--help</code></span></dt>\n<dd>\n<p>Show help about <span class=\"application\">pg_archivecleanup</span> command line arguments, and exit.</p>\n</dd>\n</dl>\n</div>\n</div>\n<div class=\"refsect1\" id=\"id-1.9.5.4.7\">\n<h2>Notes</h2>\n<p><span class=\"application\">pg_archivecleanup</span> is designed to work with <span class=\"productname\">PostgreSQL</span> 8.0 and later when used as a standalone utility, or with <span class=\"productname\">PostgreSQL</span> 9.0 and later when used as an archive cleanup command.</p>\n<p><span class=\"application\">pg_archivecleanup</span> is written in C and has an easy-to-modify source code, with specifically designated sections to modify for your own needs</p>\n</div>\n<div class=\"refsect1\" id=\"id-1.9.5.4.8\">\n<h2>Examples</h2>\n<p>On Linux or Unix systems, you might use:</p>\n<pre class=\"programlisting\">archive_cleanup_command = 'pg_archivecleanup -d /mnt/standby/archive %r 2&gt;&gt;cleanup.log'\n</pre>\n<p>where the archive directory is physically located on the standby server, so that the <code class=\"varname\">archive_command</code> is accessing it across NFS, but the files are local to the standby. This will:</p>\n<div class=\"itemizedlist\">\n<ul class=\"itemizedlist\">\n<li class=\"listitem\">\n<p>produce debugging output in <code class=\"filename\">cleanup.log</code></p>\n</li>\n<li class=\"listitem\">\n<p>remove no-longer-needed files from the archive directory</p>\n</li>\n</ul>\n</div>\n</div>\n<div class=\"refsect1\" id=\"id-1.9.5.4.9\">\n<h2>See Also</h2><span class=\"simplelist\"><a class=\"xref\" href=\"/docs/11/pgstandby.html\" title=\"pg_standby\"><span class=\"refentrytitle\"><span class=\"application\">pg_standby</span></span></a></span>\n</div>\n</div></div>", "manual_path": "pgarchivecleanup.html", "comparison_data": {"options": [{"names": ["-d"], "signature": "-d", "description": "Print lots of debug logging output on stderr ."}, {"names": ["-n"], "signature": "-n", "description": "Print the names of the files that would have been removed on stdout (performs a dry run)."}, {"names": ["-V", "--version"], "signature": "-V --version", "description": "Print the pg_archivecleanup version and exit."}, {"names": ["-x"], "signature": "-x extension", "description": "Provide an extension that will be stripped from all file names before deciding if they should be deleted. This is typically useful for cleaning up archives that have been compressed during storage, and therefore have had an extension added by the compression program. For example: -x .gz ."}, {"names": ["-?", "--help"], "signature": "-? --help", "description": "Show help about pg_archivecleanup command line arguments, and exit."}], "synopsis": ["pg_archivecleanup [ option ...] archivelocation oldestkeptwalfile"], "environment": []}, "comparison_hash": "1db06106b1b902165d9e4e88eff43da7068a3d855003616f4ae745c765f35801"}, "12": {"facts": [{"label": "Documented executable", "value": "pg_archivecleanup"}, {"label": "Executable version", "value": "12.22"}, {"label": "Reference inventory", "value": "Server applications"}, {"label": "Option definition groups", "value": "5"}], "tables": [{"key": "options", "rows": [{"summary": "Print lots of debug logging output on stderr .", "signature": {"url": "/docs/12/pgarchivecleanup.html", "text": "-d"}}, {"summary": "Print the names of the files that would have been removed on stdout (performs a dry run).", "signature": {"url": "/docs/12/pgarchivecleanup.html", "text": "-n"}}, {"summary": "Print the pg_archivecleanup version and exit.", "signature": {"url": "/docs/12/pgarchivecleanup.html", "text": "-V --version"}}, {"summary": "Provide an extension that will be stripped from all file names before deciding if they should be deleted. This is typically useful for cleaning up archives that have been compressed during storage, and therefore have had an extension added by the compression program. For example: -x .gz .", "signature": {"url": "/docs/12/pgarchivecleanup.html", "text": "-x extension"}}, {"summary": "Show help about pg_archivecleanup command line arguments, and exit.", "signature": {"url": "/docs/12/pgarchivecleanup.html", "text": "-? --help"}}], "title": "Documented options", "columns": [{"key": "signature", "label": "Option and arguments"}, {"key": "summary", "label": "Description"}]}], "options": [{"names": ["-d"], "summary": "Print lots of debug logging output on stderr .", "signature": "-d", "source_url": "/docs/12/pgarchivecleanup.html", "description": "Print lots of debug logging output on stderr ."}, {"names": ["-n"], "summary": "Print the names of the files that would have been removed on stdout (performs a dry run).", "signature": "-n", "source_url": "/docs/12/pgarchivecleanup.html", "description": "Print the names of the files that would have been removed on stdout (performs a dry run)."}, {"names": ["-V", "--version"], "summary": "Print the pg_archivecleanup version and exit.", "signature": "-V --version", "source_url": "/docs/12/pgarchivecleanup.html", "description": "Print the pg_archivecleanup version and exit."}, {"names": ["-x"], "summary": "Provide an extension that will be stripped from all file names before deciding if they should be deleted. This is typically useful for cleaning up archives that have been compressed during storage, and therefore have had an extension added by the compression program. For example: -x .gz .", "signature": "-x extension", "source_url": "/docs/12/pgarchivecleanup.html", "description": "Provide an extension that will be stripped from all file names before deciding if they should be deleted. This is typically useful for cleaning up archives that have been compressed during storage, and therefore have had an extension added by the compression program. For example: -x .gz ."}, {"names": ["-?", "--help"], "summary": "Show help about pg_archivecleanup command line arguments, and exit.", "signature": "-? --help", "source_url": "/docs/12/pgarchivecleanup.html", "description": "Show help about pg_archivecleanup command line arguments, and exit."}], "related": [], "release": {"ref": "https://ftp.postgresql.org/pub/source/v12.22/postgresql-12.22.tar.bz2", "label": "12.22", "major": "12", "channel": "historical", "manifest": {"pdf": {"A4": {"url": "/files/documentation/pdf/12/postgresql-12-A4.pdf", "bytes": 13424351, "pages": 2803, "sha256": "7422cf53fd1939e7a3d2925231a88b0330e468afa5393627cac0ff86158a0621", "built_at": "2026-09-26"}, "US": {"url": "/files/documentation/pdf/12/postgresql-12-US.pdf", "bytes": 13322565, "pages": 2958, "sha256": "51f3b04e72907fc38512685946223452ea65f84419c60c66241dfa3396035e77", "built_at": "2026-09-26"}}, "tree": "12", "index": "index.html", "major": "12", "pages": 1131, "release": "12.22", "source_url": "https://ftp.postgresql.org/pub/source/v12.22/postgresql-12.22.tar.bz2", "svg_assets": 2, "source_mode": "en HTML verified against the pinned official archive", "source_sha256": "8df3c0474782589d3c6f374b5133b1bd14d168086edbc13c6e72e67dd4527a3b"}, "revision": "7a827e97cbfacd7febff75f34443e2043e40723de5b6d8c9d81a9430b65a37e4", "evidence_kind": "English manual and source declarations", "source_sha256": "8df3c0474782589d3c6f374b5133b1bd14d168086edbc13c6e72e67dd4527a3b"}, "sources": [{"url": "/docs/12/pgarchivecleanup.html", "file": "pgarchivecleanup.html", "label": "12.22 English manual \u00b7 pgarchivecleanup.html", "anchor": "", "sha256": "baa9e9bd87dc767336a29c76e9fb274855edb0d3ff0fc7b022b96b11567c1a0b"}, {"url": "/docs/12/reference-server.html", "file": "reference-server.html", "label": "Server applications inventory", "anchor": "", "sha256": "7f6ae1fadc1b0bffa606551460e62aacdc2508a3fb66566ddae861928ca6080b"}], "sections": [], "synopsis": ["pg_archivecleanup [ option ...] archivelocation oldestkeptwalfile"], "signature": "pg_archivecleanup [ option ...] archivelocation oldestkeptwalfile", "description": ["pg_archivecleanup \u2014 clean up PostgreSQL WAL archive files"], "environment": [], "manual_html": "<div><div class=\"refentry\" id=\"PGARCHIVECLEANUP\">\n<div class=\"titlepage\"></div>\n<div class=\"refnamediv\">\n<h2><span class=\"refentrytitle\"><span class=\"application\">pg_archivecleanup</span></span></h2>\n<p>pg_archivecleanup \u2014 clean up <span class=\"productname\">PostgreSQL</span> WAL archive files</p>\n</div>\n<div class=\"refsynopsisdiv\">\n<h2>Synopsis</h2>\n<div class=\"cmdsynopsis\">\n<p id=\"id-1.9.5.4.4.1\"><code class=\"command\">pg_archivecleanup</code> [<em class=\"replaceable\"><code>option</code></em>...] <em class=\"replaceable\"><code>archivelocation</code></em> <em class=\"replaceable\"><code>oldestkeptwalfile</code></em></p>\n</div>\n</div>\n<div class=\"refsect1\" id=\"id-1.9.5.4.5\">\n<h2>Description</h2>\n<p><span class=\"application\">pg_archivecleanup</span> is designed to be used as an <code class=\"literal\">archive_cleanup_command</code> to clean up WAL file archives when running as a standby server (see <a class=\"xref\" href=\"/docs/12/warm-standby.html\" title=\"26.2.\u00a0Log-Shipping Standby Servers\">Section\u00a026.2</a>). <span class=\"application\">pg_archivecleanup</span> can also be used as a standalone program to clean WAL file archives.</p>\n<p>To configure a standby server to use <span class=\"application\">pg_archivecleanup</span>, put this into its <code class=\"filename\">postgresql.conf</code> configuration file:</p>\n<pre class=\"programlisting\">archive_cleanup_command = 'pg_archivecleanup <em class=\"replaceable\"><code>archivelocation</code></em> %r'\n</pre>\n<p>where <em class=\"replaceable\"><code>archivelocation</code></em> is the directory from which WAL segment files should be removed.</p>\n<p>When used within <a class=\"xref\" href=\"/docs/12/runtime-config-wal.html#GUC-ARCHIVE-CLEANUP-COMMAND\">archive_cleanup_command</a>, all WAL files logically preceding the value of the <code class=\"literal\">%r</code> argument will be removed from <em class=\"replaceable\"><code>archivelocation</code></em>. This minimizes the number of files that need to be retained, while preserving crash-restart capability. Use of this parameter is appropriate if the <em class=\"replaceable\"><code>archivelocation</code></em> is a transient staging area for this particular standby server, but <span class=\"emphasis\"><em>not</em></span> when the <em class=\"replaceable\"><code>archivelocation</code></em> is intended as a long-term WAL archive area, or when multiple standby servers are recovering from the same archive location.</p>\n<p>When used as a standalone program all WAL files logically preceding the <em class=\"replaceable\"><code>oldestkeptwalfile</code></em> will be removed from <em class=\"replaceable\"><code>archivelocation</code></em>. In this mode, if you specify a <code class=\"filename\">.partial</code> or <code class=\"filename\">.backup</code> file name, then only the file prefix will be used as the <em class=\"replaceable\"><code>oldestkeptwalfile</code></em>. This treatment of <code class=\"filename\">.backup</code> file name allows you to remove all WAL files archived prior to a specific base backup without error. For example, the following example will remove all files older than WAL file name <code class=\"filename\">000000010000003700000010</code>:</p>\n<pre class=\"programlisting\">pg_archivecleanup -d archive 000000010000003700000010.00000020.backup\n\npg_archivecleanup:  keep WAL file \"archive/000000010000003700000010\" and later\npg_archivecleanup:  removing file \"archive/00000001000000370000000F\"\npg_archivecleanup:  removing file \"archive/00000001000000370000000E\"\n</pre>\n<p><span class=\"application\">pg_archivecleanup</span> assumes that <em class=\"replaceable\"><code>archivelocation</code></em> is a directory readable and writable by the server-owning user.</p>\n</div>\n<div class=\"refsect1\" id=\"id-1.9.5.4.6\">\n<h2>Options</h2>\n<p><span class=\"application\">pg_archivecleanup</span> accepts the following command-line arguments:</p>\n<div class=\"variablelist\">\n<dl class=\"variablelist\">\n<dt><span class=\"term\"><code class=\"option\">-d</code></span></dt>\n<dd>\n<p>Print lots of debug logging output on <code class=\"filename\">stderr</code>.</p>\n</dd>\n<dt><span class=\"term\"><code class=\"option\">-n</code></span></dt>\n<dd>\n<p>Print the names of the files that would have been removed on <code class=\"filename\">stdout</code> (performs a dry run).</p>\n</dd>\n<dt><span class=\"term\"><code class=\"option\">-V</code><br></span><span class=\"term\"><code class=\"option\">--version</code></span></dt>\n<dd>\n<p>Print the <span class=\"application\">pg_archivecleanup</span> version and exit.</p>\n</dd>\n<dt><span class=\"term\"><code class=\"option\">-x</code> <em class=\"replaceable\"><code>extension</code></em></span></dt>\n<dd>\n<p>Provide an extension that will be stripped from all file names before deciding if they should be deleted. This is typically useful for cleaning up archives that have been compressed during storage, and therefore have had an extension added by the compression program. For example: <code class=\"literal\">-x .gz</code>.</p>\n</dd>\n<dt><span class=\"term\"><code class=\"option\">-?</code><br></span><span class=\"term\"><code class=\"option\">--help</code></span></dt>\n<dd>\n<p>Show help about <span class=\"application\">pg_archivecleanup</span> command line arguments, and exit.</p>\n</dd>\n</dl>\n</div>\n</div>\n<div class=\"refsect1\" id=\"id-1.9.5.4.7\">\n<h2>Environment</h2>\n<p>The environment variable <code class=\"envar\">PG_COLOR</code> specifies whether to use color in diagnostic messages. Possible values are <code class=\"literal\">always</code>, <code class=\"literal\">auto</code> and <code class=\"literal\">never</code>.</p>\n</div>\n<div class=\"refsect1\" id=\"id-1.9.5.4.8\">\n<h2>Notes</h2>\n<p><span class=\"application\">pg_archivecleanup</span> is designed to work with <span class=\"productname\">PostgreSQL</span> 8.0 and later when used as a standalone utility, or with <span class=\"productname\">PostgreSQL</span> 9.0 and later when used as an archive cleanup command.</p>\n<p><span class=\"application\">pg_archivecleanup</span> is written in C and has an easy-to-modify source code, with specifically designated sections to modify for your own needs</p>\n</div>\n<div class=\"refsect1\" id=\"id-1.9.5.4.9\">\n<h2>Examples</h2>\n<p>On Linux or Unix systems, you might use:</p>\n<pre class=\"programlisting\">archive_cleanup_command = 'pg_archivecleanup -d /mnt/standby/archive %r 2&gt;&gt;cleanup.log'\n</pre>\n<p>where the archive directory is physically located on the standby server, so that the <code class=\"varname\">archive_command</code> is accessing it across NFS, but the files are local to the standby. This will:</p>\n<div class=\"itemizedlist\">\n<ul class=\"itemizedlist\">\n<li class=\"listitem\">\n<p>produce debugging output in <code class=\"filename\">cleanup.log</code></p>\n</li>\n<li class=\"listitem\">\n<p>remove no-longer-needed files from the archive directory</p>\n</li>\n</ul>\n</div>\n</div>\n<div class=\"refsect1\" id=\"id-1.9.5.4.10\">\n<h2>See Also</h2><span class=\"simplelist\"><a class=\"xref\" href=\"/docs/12/pgstandby.html\" title=\"pg_standby\"><span class=\"refentrytitle\"><span class=\"application\">pg_standby</span></span></a></span>\n</div>\n</div></div>", "manual_path": "pgarchivecleanup.html", "comparison_data": {"options": [{"names": ["-d"], "signature": "-d", "description": "Print lots of debug logging output on stderr ."}, {"names": ["-n"], "signature": "-n", "description": "Print the names of the files that would have been removed on stdout (performs a dry run)."}, {"names": ["-V", "--version"], "signature": "-V --version", "description": "Print the pg_archivecleanup version and exit."}, {"names": ["-x"], "signature": "-x extension", "description": "Provide an extension that will be stripped from all file names before deciding if they should be deleted. This is typically useful for cleaning up archives that have been compressed during storage, and therefore have had an extension added by the compression program. For example: -x .gz ."}, {"names": ["-?", "--help"], "signature": "-? --help", "description": "Show help about pg_archivecleanup command line arguments, and exit."}], "synopsis": ["pg_archivecleanup [ option ...] archivelocation oldestkeptwalfile"], "environment": []}, "comparison_hash": "1db06106b1b902165d9e4e88eff43da7068a3d855003616f4ae745c765f35801"}, "13": {"facts": [{"label": "Documented executable", "value": "pg_archivecleanup"}, {"label": "Executable version", "value": "13.23"}, {"label": "Reference inventory", "value": "Server applications"}, {"label": "Option definition groups", "value": "5"}], "tables": [{"key": "options", "rows": [{"summary": "Print lots of debug logging output on stderr .", "signature": {"url": "/docs/13/pgarchivecleanup.html", "text": "-d"}}, {"summary": "Print the names of the files that would have been removed on stdout (performs a dry run).", "signature": {"url": "/docs/13/pgarchivecleanup.html", "text": "-n"}}, {"summary": "Print the pg_archivecleanup version and exit.", "signature": {"url": "/docs/13/pgarchivecleanup.html", "text": "-V --version"}}, {"summary": "Provide an extension that will be stripped from all file names before deciding if they should be deleted. This is typically useful for cleaning up archives that have been compressed during storage, and therefore have had an extension added by the compression program. For example: -x .gz .", "signature": {"url": "/docs/13/pgarchivecleanup.html", "text": "-x extension"}}, {"summary": "Show help about pg_archivecleanup command line arguments, and exit.", "signature": {"url": "/docs/13/pgarchivecleanup.html", "text": "-? --help"}}], "title": "Documented options", "columns": [{"key": "signature", "label": "Option and arguments"}, {"key": "summary", "label": "Description"}]}], "options": [{"names": ["-d"], "summary": "Print lots of debug logging output on stderr .", "signature": "-d", "source_url": "/docs/13/pgarchivecleanup.html", "description": "Print lots of debug logging output on stderr ."}, {"names": ["-n"], "summary": "Print the names of the files that would have been removed on stdout (performs a dry run).", "signature": "-n", "source_url": "/docs/13/pgarchivecleanup.html", "description": "Print the names of the files that would have been removed on stdout (performs a dry run)."}, {"names": ["-V", "--version"], "summary": "Print the pg_archivecleanup version and exit.", "signature": "-V --version", "source_url": "/docs/13/pgarchivecleanup.html", "description": "Print the pg_archivecleanup version and exit."}, {"names": ["-x"], "summary": "Provide an extension that will be stripped from all file names before deciding if they should be deleted. This is typically useful for cleaning up archives that have been compressed during storage, and therefore have had an extension added by the compression program. For example: -x .gz .", "signature": "-x extension", "source_url": "/docs/13/pgarchivecleanup.html", "description": "Provide an extension that will be stripped from all file names before deciding if they should be deleted. This is typically useful for cleaning up archives that have been compressed during storage, and therefore have had an extension added by the compression program. For example: -x .gz ."}, {"names": ["-?", "--help"], "summary": "Show help about pg_archivecleanup command line arguments, and exit.", "signature": "-? --help", "source_url": "/docs/13/pgarchivecleanup.html", "description": "Show help about pg_archivecleanup command line arguments, and exit."}], "related": [], "release": {"ref": "https://ftp.postgresql.org/pub/source/v13.23/postgresql-13.23.tar.bz2", "label": "13.23", "major": "13", "channel": "historical", "manifest": {"pdf": {"A4": {"url": "/files/documentation/pdf/13/postgresql-13-A4.pdf", "bytes": 13843239, "pages": 2826, "sha256": "171cc09f90936dbc1cbd503a98ff07ae72ea58ab9771ff051313f1217737799c", "built_at": "2026-09-26"}, "US": {"url": "/files/documentation/pdf/13/postgresql-13-US.pdf", "bytes": 13739572, "pages": 2984, "sha256": "48d09c6e197d9db4220f41afe83efe848a8661b1b168d3b89419751ecaf6c24d", "built_at": "2026-09-26"}}, "tree": "13", "index": "index.html", "major": "13", "pages": 1139, "release": "13.23", "source_url": "https://ftp.postgresql.org/pub/source/v13.23/postgresql-13.23.tar.bz2", "svg_assets": 3, "source_mode": "en HTML verified against the pinned official archive", "source_sha256": "6ec3c82726af92b7dec873fa1cdf881eca92a4219787dfad05acb6b10e041fd6"}, "revision": "614ee3133270254e476c118cdf6f72af78d4e4b8bbd9b28ed9ab1e14e4e9c0f6", "evidence_kind": "English manual and source declarations", "source_sha256": "6ec3c82726af92b7dec873fa1cdf881eca92a4219787dfad05acb6b10e041fd6"}, "sources": [{"url": "/docs/13/pgarchivecleanup.html", "file": "pgarchivecleanup.html", "label": "13.23 English manual \u00b7 pgarchivecleanup.html", "anchor": "", "sha256": "2760740f7c71c1a76ea5bd9d930a17ef32054a1bcfbda24ef0aa9448d70e3429"}, {"url": "/docs/13/reference-server.html", "file": "reference-server.html", "label": "Server applications inventory", "anchor": "", "sha256": "074ef8577fd368272a2360309e1226e2d0b1e570a3e1da62dfcca63ac9ee5539"}], "sections": [], "synopsis": ["pg_archivecleanup [ option ...] archivelocation oldestkeptwalfile"], "signature": "pg_archivecleanup [ option ...] archivelocation oldestkeptwalfile", "description": ["pg_archivecleanup \u2014 clean up PostgreSQL WAL archive files"], "environment": [], "manual_html": "<div><div class=\"refentry\" id=\"PGARCHIVECLEANUP\">\n<div class=\"titlepage\"></div>\n<div class=\"refnamediv\">\n<h2><span class=\"refentrytitle\"><span class=\"application\">pg_archivecleanup</span></span></h2>\n<p>pg_archivecleanup \u2014 clean up <span class=\"productname\">PostgreSQL</span> WAL archive files</p>\n</div>\n<div class=\"refsynopsisdiv\">\n<h2>Synopsis</h2>\n<div class=\"cmdsynopsis\">\n<p id=\"id-1.9.5.4.4.1\"><code class=\"command\">pg_archivecleanup</code> [<em class=\"replaceable\"><code>option</code></em>...] <em class=\"replaceable\"><code>archivelocation</code></em> <em class=\"replaceable\"><code>oldestkeptwalfile</code></em></p>\n</div>\n</div>\n<div class=\"refsect1\" id=\"id-1.9.5.4.5\">\n<h2>Description</h2>\n<p><span class=\"application\">pg_archivecleanup</span> is designed to be used as an <code class=\"literal\">archive_cleanup_command</code> to clean up WAL file archives when running as a standby server (see <a class=\"xref\" href=\"/docs/13/warm-standby.html\" title=\"26.2.\u00a0Log-Shipping Standby Servers\">Section\u00a026.2</a>). <span class=\"application\">pg_archivecleanup</span> can also be used as a standalone program to clean WAL file archives.</p>\n<p>To configure a standby server to use <span class=\"application\">pg_archivecleanup</span>, put this into its <code class=\"filename\">postgresql.conf</code> configuration file:</p>\n<pre class=\"programlisting\">archive_cleanup_command = 'pg_archivecleanup <em class=\"replaceable\"><code>archivelocation</code></em> %r'\n</pre>\n<p>where <em class=\"replaceable\"><code>archivelocation</code></em> is the directory from which WAL segment files should be removed.</p>\n<p>When used within <a class=\"xref\" href=\"/docs/13/runtime-config-wal.html#GUC-ARCHIVE-CLEANUP-COMMAND\">archive_cleanup_command</a>, all WAL files logically preceding the value of the <code class=\"literal\">%r</code> argument will be removed from <em class=\"replaceable\"><code>archivelocation</code></em>. This minimizes the number of files that need to be retained, while preserving crash-restart capability. Use of this parameter is appropriate if the <em class=\"replaceable\"><code>archivelocation</code></em> is a transient staging area for this particular standby server, but <span class=\"emphasis\"><em>not</em></span> when the <em class=\"replaceable\"><code>archivelocation</code></em> is intended as a long-term WAL archive area, or when multiple standby servers are recovering from the same archive location.</p>\n<p>When used as a standalone program all WAL files logically preceding the <em class=\"replaceable\"><code>oldestkeptwalfile</code></em> will be removed from <em class=\"replaceable\"><code>archivelocation</code></em>. In this mode, if you specify a <code class=\"filename\">.partial</code> or <code class=\"filename\">.backup</code> file name, then only the file prefix will be used as the <em class=\"replaceable\"><code>oldestkeptwalfile</code></em>. This treatment of <code class=\"filename\">.backup</code> file name allows you to remove all WAL files archived prior to a specific base backup without error. For example, the following example will remove all files older than WAL file name <code class=\"filename\">000000010000003700000010</code>:</p>\n<pre class=\"programlisting\">pg_archivecleanup -d archive 000000010000003700000010.00000020.backup\n\npg_archivecleanup:  keep WAL file \"archive/000000010000003700000010\" and later\npg_archivecleanup:  removing file \"archive/00000001000000370000000F\"\npg_archivecleanup:  removing file \"archive/00000001000000370000000E\"\n</pre>\n<p><span class=\"application\">pg_archivecleanup</span> assumes that <em class=\"replaceable\"><code>archivelocation</code></em> is a directory readable and writable by the server-owning user.</p>\n</div>\n<div class=\"refsect1\" id=\"id-1.9.5.4.6\">\n<h2>Options</h2>\n<p><span class=\"application\">pg_archivecleanup</span> accepts the following command-line arguments:</p>\n<div class=\"variablelist\">\n<dl class=\"variablelist\">\n<dt><span class=\"term\"><code class=\"option\">-d</code></span></dt>\n<dd>\n<p>Print lots of debug logging output on <code class=\"filename\">stderr</code>.</p>\n</dd>\n<dt><span class=\"term\"><code class=\"option\">-n</code></span></dt>\n<dd>\n<p>Print the names of the files that would have been removed on <code class=\"filename\">stdout</code> (performs a dry run).</p>\n</dd>\n<dt><span class=\"term\"><code class=\"option\">-V</code><br></span><span class=\"term\"><code class=\"option\">--version</code></span></dt>\n<dd>\n<p>Print the <span class=\"application\">pg_archivecleanup</span> version and exit.</p>\n</dd>\n<dt><span class=\"term\"><code class=\"option\">-x</code> <em class=\"replaceable\"><code>extension</code></em></span></dt>\n<dd>\n<p>Provide an extension that will be stripped from all file names before deciding if they should be deleted. This is typically useful for cleaning up archives that have been compressed during storage, and therefore have had an extension added by the compression program. For example: <code class=\"literal\">-x .gz</code>.</p>\n</dd>\n<dt><span class=\"term\"><code class=\"option\">-?</code><br></span><span class=\"term\"><code class=\"option\">--help</code></span></dt>\n<dd>\n<p>Show help about <span class=\"application\">pg_archivecleanup</span> command line arguments, and exit.</p>\n</dd>\n</dl>\n</div>\n</div>\n<div class=\"refsect1\" id=\"id-1.9.5.4.7\">\n<h2>Environment</h2>\n<p>The environment variable <code class=\"envar\">PG_COLOR</code> specifies whether to use color in diagnostic messages. Possible values are <code class=\"literal\">always</code>, <code class=\"literal\">auto</code> and <code class=\"literal\">never</code>.</p>\n</div>\n<div class=\"refsect1\" id=\"id-1.9.5.4.8\">\n<h2>Notes</h2>\n<p><span class=\"application\">pg_archivecleanup</span> is designed to work with <span class=\"productname\">PostgreSQL</span> 8.0 and later when used as a standalone utility, or with <span class=\"productname\">PostgreSQL</span> 9.0 and later when used as an archive cleanup command.</p>\n<p><span class=\"application\">pg_archivecleanup</span> is written in C and has an easy-to-modify source code, with specifically designated sections to modify for your own needs</p>\n</div>\n<div class=\"refsect1\" id=\"id-1.9.5.4.9\">\n<h2>Examples</h2>\n<p>On Linux or Unix systems, you might use:</p>\n<pre class=\"programlisting\">archive_cleanup_command = 'pg_archivecleanup -d /mnt/standby/archive %r 2&gt;&gt;cleanup.log'\n</pre>\n<p>where the archive directory is physically located on the standby server, so that the <code class=\"varname\">archive_command</code> is accessing it across NFS, but the files are local to the standby. This will:</p>\n<div class=\"itemizedlist\">\n<ul class=\"itemizedlist\">\n<li class=\"listitem\">\n<p>produce debugging output in <code class=\"filename\">cleanup.log</code></p>\n</li>\n<li class=\"listitem\">\n<p>remove no-longer-needed files from the archive directory</p>\n</li>\n</ul>\n</div>\n</div>\n<div class=\"refsect1\" id=\"id-1.9.5.4.10\">\n<h2>See Also</h2><span class=\"simplelist\"><a class=\"xref\" href=\"/docs/13/pgstandby.html\" title=\"pg_standby\"><span class=\"refentrytitle\"><span class=\"application\">pg_standby</span></span></a></span>\n</div>\n</div></div>", "manual_path": "pgarchivecleanup.html", "comparison_data": {"options": [{"names": ["-d"], "signature": "-d", "description": "Print lots of debug logging output on stderr ."}, {"names": ["-n"], "signature": "-n", "description": "Print the names of the files that would have been removed on stdout (performs a dry run)."}, {"names": ["-V", "--version"], "signature": "-V --version", "description": "Print the pg_archivecleanup version and exit."}, {"names": ["-x"], "signature": "-x extension", "description": "Provide an extension that will be stripped from all file names before deciding if they should be deleted. This is typically useful for cleaning up archives that have been compressed during storage, and therefore have had an extension added by the compression program. For example: -x .gz ."}, {"names": ["-?", "--help"], "signature": "-? --help", "description": "Show help about pg_archivecleanup command line arguments, and exit."}], "synopsis": ["pg_archivecleanup [ option ...] archivelocation oldestkeptwalfile"], "environment": []}, "comparison_hash": "1db06106b1b902165d9e4e88eff43da7068a3d855003616f4ae745c765f35801"}, "14": {"facts": [{"label": "Documented executable", "value": "pg_archivecleanup"}, {"label": "Executable version", "value": "14.24"}, {"label": "Reference inventory", "value": "Server applications"}, {"label": "Option definition groups", "value": "5"}], "tables": [{"key": "options", "rows": [{"summary": "Print lots of debug logging output on stderr .", "signature": {"url": "/docs/14/pgarchivecleanup.html", "text": "-d"}}, {"summary": "Print the names of the files that would have been removed on stdout (performs a dry run).", "signature": {"url": "/docs/14/pgarchivecleanup.html", "text": "-n"}}, {"summary": "Print the pg_archivecleanup version and exit.", "signature": {"url": "/docs/14/pgarchivecleanup.html", "text": "-V --version"}}, {"summary": "Provide an extension that will be stripped from all file names before deciding if they should be deleted. This is typically useful for cleaning up archives that have been compressed during storage, and therefore have had an extension added by the compression program. For example: -x .gz .", "signature": {"url": "/docs/14/pgarchivecleanup.html", "text": "-x extension"}}, {"summary": "Show help about pg_archivecleanup command line arguments, and exit.", "signature": {"url": "/docs/14/pgarchivecleanup.html", "text": "-? --help"}}], "title": "Documented options", "columns": [{"key": "signature", "label": "Option and arguments"}, {"key": "summary", "label": "Description"}]}], "options": [{"names": ["-d"], "summary": "Print lots of debug logging output on stderr .", "signature": "-d", "source_url": "/docs/14/pgarchivecleanup.html", "description": "Print lots of debug logging output on stderr ."}, {"names": ["-n"], "summary": "Print the names of the files that would have been removed on stdout (performs a dry run).", "signature": "-n", "source_url": "/docs/14/pgarchivecleanup.html", "description": "Print the names of the files that would have been removed on stdout (performs a dry run)."}, {"names": ["-V", "--version"], "summary": "Print the pg_archivecleanup version and exit.", "signature": "-V --version", "source_url": "/docs/14/pgarchivecleanup.html", "description": "Print the pg_archivecleanup version and exit."}, {"names": ["-x"], "summary": "Provide an extension that will be stripped from all file names before deciding if they should be deleted. This is typically useful for cleaning up archives that have been compressed during storage, and therefore have had an extension added by the compression program. For example: -x .gz .", "signature": "-x extension", "source_url": "/docs/14/pgarchivecleanup.html", "description": "Provide an extension that will be stripped from all file names before deciding if they should be deleted. This is typically useful for cleaning up archives that have been compressed during storage, and therefore have had an extension added by the compression program. For example: -x .gz ."}, {"names": ["-?", "--help"], "summary": "Show help about pg_archivecleanup command line arguments, and exit.", "signature": "-? --help", "source_url": "/docs/14/pgarchivecleanup.html", "description": "Show help about pg_archivecleanup command line arguments, and exit."}], "related": [], "release": {"ref": "https://ftp.postgresql.org/pub/source/v14.24/postgresql-14.24.tar.bz2", "label": "14.24", "major": "14", "channel": "stable", "manifest": {"pdf": {"A4": {"url": "/files/documentation/pdf/14/postgresql-14-A4.pdf", "bytes": 14354704, "pages": 2944, "sha256": "8bc6b9dd7b246888bb77f0a5e8c39a2eae52e9926569832669c7d1600becb27c", "built_at": "2026-09-26"}, "US": {"url": "/files/documentation/pdf/14/postgresql-14-US.pdf", "bytes": 14242178, "pages": 3102, "sha256": "b7ecb5a5f62d8b9f73a69e25a7d26ba285373bc53168a553bff7b77955506db4", "built_at": "2026-09-26"}}, "tree": "14", "index": "index.html", "major": "14", "pages": 1158, "release": "14.24", "source_url": "https://ftp.postgresql.org/pub/source/v14.24/postgresql-14.24.tar.bz2", "svg_assets": 3, "source_mode": "en HTML verified against the pinned official archive", "source_sha256": "a7fa7ed3d558172355f51406097a7bd4f6b473be80f311ef7cda96bf383d8897"}, "revision": "588700d46356d8837c77c7c0a4e71e645fe6535983b8f1830aa8f2e4e41c40ae", "evidence_kind": "English manual and source declarations", "source_sha256": "a7fa7ed3d558172355f51406097a7bd4f6b473be80f311ef7cda96bf383d8897"}, "sources": [{"url": "/docs/14/pgarchivecleanup.html", "file": "pgarchivecleanup.html", "label": "14.24 English manual \u00b7 pgarchivecleanup.html", "anchor": "", "sha256": "ff01b9c456e4ddd51be288f4a83519c0027d4b7ba2a1addd2ed4c444764b25ce"}, {"url": "/docs/14/reference-server.html", "file": "reference-server.html", "label": "Server applications inventory", "anchor": "", "sha256": "db0cdccaa8d3c65ad3b2a07d4956eb5a783a18505bfa0f9d9626eef4ab94fe44"}], "sections": [], "synopsis": ["pg_archivecleanup [ option ...] archivelocation oldestkeptwalfile"], "signature": "pg_archivecleanup [ option ...] archivelocation oldestkeptwalfile", "description": ["pg_archivecleanup \u2014 clean up PostgreSQL WAL archive files"], "environment": [], "manual_html": "<div><div class=\"refentry\" id=\"PGARCHIVECLEANUP\">\n<div class=\"titlepage\"></div>\n<div class=\"refnamediv\">\n<h2><span class=\"refentrytitle\"><span class=\"application\">pg_archivecleanup</span></span></h2>\n<p>pg_archivecleanup \u2014 clean up <span class=\"productname\">PostgreSQL</span> WAL archive files</p>\n</div>\n<div class=\"refsynopsisdiv\">\n<h2>Synopsis</h2>\n<div class=\"cmdsynopsis\">\n<p id=\"id-1.9.5.4.4.1\"><code class=\"command\">pg_archivecleanup</code> [<em class=\"replaceable\"><code>option</code></em>...] <em class=\"replaceable\"><code>archivelocation</code></em> <em class=\"replaceable\"><code>oldestkeptwalfile</code></em></p>\n</div>\n</div>\n<div class=\"refsect1\" id=\"id-1.9.5.4.5\">\n<h2>Description</h2>\n<p><span class=\"application\">pg_archivecleanup</span> is designed to be used as an <code class=\"literal\">archive_cleanup_command</code> to clean up WAL file archives when running as a standby server (see <a class=\"xref\" href=\"/docs/14/warm-standby.html\" title=\"27.2.\u00a0Log-Shipping Standby Servers\">Section\u00a027.2</a>). <span class=\"application\">pg_archivecleanup</span> can also be used as a standalone program to clean WAL file archives.</p>\n<p>To configure a standby server to use <span class=\"application\">pg_archivecleanup</span>, put this into its <code class=\"filename\">postgresql.conf</code> configuration file:</p>\n<pre class=\"programlisting\">archive_cleanup_command = 'pg_archivecleanup <em class=\"replaceable\"><code>archivelocation</code></em> %r'\n</pre>\n<p>where <em class=\"replaceable\"><code>archivelocation</code></em> is the directory from which WAL segment files should be removed.</p>\n<p>When used within <a class=\"xref\" href=\"/docs/14/runtime-config-wal.html#GUC-ARCHIVE-CLEANUP-COMMAND\">archive_cleanup_command</a>, all WAL files logically preceding the value of the <code class=\"literal\">%r</code> argument will be removed from <em class=\"replaceable\"><code>archivelocation</code></em>. This minimizes the number of files that need to be retained, while preserving crash-restart capability. Use of this parameter is appropriate if the <em class=\"replaceable\"><code>archivelocation</code></em> is a transient staging area for this particular standby server, but <span class=\"emphasis\"><em>not</em></span> when the <em class=\"replaceable\"><code>archivelocation</code></em> is intended as a long-term WAL archive area, or when multiple standby servers are recovering from the same archive location.</p>\n<p>When used as a standalone program all WAL files logically preceding the <em class=\"replaceable\"><code>oldestkeptwalfile</code></em> will be removed from <em class=\"replaceable\"><code>archivelocation</code></em>. In this mode, if you specify a <code class=\"filename\">.partial</code> or <code class=\"filename\">.backup</code> file name, then only the file prefix will be used as the <em class=\"replaceable\"><code>oldestkeptwalfile</code></em>. This treatment of <code class=\"filename\">.backup</code> file name allows you to remove all WAL files archived prior to a specific base backup without error. For example, the following example will remove all files older than WAL file name <code class=\"filename\">000000010000003700000010</code>:</p>\n<pre class=\"programlisting\">pg_archivecleanup -d archive 000000010000003700000010.00000020.backup\n\npg_archivecleanup:  keep WAL file \"archive/000000010000003700000010\" and later\npg_archivecleanup:  removing file \"archive/00000001000000370000000F\"\npg_archivecleanup:  removing file \"archive/00000001000000370000000E\"\n</pre>\n<p><span class=\"application\">pg_archivecleanup</span> assumes that <em class=\"replaceable\"><code>archivelocation</code></em> is a directory readable and writable by the server-owning user.</p>\n</div>\n<div class=\"refsect1\" id=\"id-1.9.5.4.6\">\n<h2>Options</h2>\n<p><span class=\"application\">pg_archivecleanup</span> accepts the following command-line arguments:</p>\n<div class=\"variablelist\">\n<dl class=\"variablelist\">\n<dt><span class=\"term\"><code class=\"option\">-d</code></span></dt>\n<dd>\n<p>Print lots of debug logging output on <code class=\"filename\">stderr</code>.</p>\n</dd>\n<dt><span class=\"term\"><code class=\"option\">-n</code></span></dt>\n<dd>\n<p>Print the names of the files that would have been removed on <code class=\"filename\">stdout</code> (performs a dry run).</p>\n</dd>\n<dt><span class=\"term\"><code class=\"option\">-V</code><br></span><span class=\"term\"><code class=\"option\">--version</code></span></dt>\n<dd>\n<p>Print the <span class=\"application\">pg_archivecleanup</span> version and exit.</p>\n</dd>\n<dt><span class=\"term\"><code class=\"option\">-x</code> <em class=\"replaceable\"><code>extension</code></em></span></dt>\n<dd>\n<p>Provide an extension that will be stripped from all file names before deciding if they should be deleted. This is typically useful for cleaning up archives that have been compressed during storage, and therefore have had an extension added by the compression program. For example: <code class=\"literal\">-x .gz</code>.</p>\n</dd>\n<dt><span class=\"term\"><code class=\"option\">-?</code><br></span><span class=\"term\"><code class=\"option\">--help</code></span></dt>\n<dd>\n<p>Show help about <span class=\"application\">pg_archivecleanup</span> command line arguments, and exit.</p>\n</dd>\n</dl>\n</div>\n</div>\n<div class=\"refsect1\" id=\"id-1.9.5.4.7\">\n<h2>Environment</h2>\n<p>The environment variable <code class=\"envar\">PG_COLOR</code> specifies whether to use color in diagnostic messages. Possible values are <code class=\"literal\">always</code>, <code class=\"literal\">auto</code> and <code class=\"literal\">never</code>.</p>\n</div>\n<div class=\"refsect1\" id=\"id-1.9.5.4.8\">\n<h2>Notes</h2>\n<p><span class=\"application\">pg_archivecleanup</span> is designed to work with <span class=\"productname\">PostgreSQL</span> 8.0 and later when used as a standalone utility, or with <span class=\"productname\">PostgreSQL</span> 9.0 and later when used as an archive cleanup command.</p>\n<p><span class=\"application\">pg_archivecleanup</span> is written in C and has an easy-to-modify source code, with specifically designated sections to modify for your own needs</p>\n</div>\n<div class=\"refsect1\" id=\"id-1.9.5.4.9\">\n<h2>Examples</h2>\n<p>On Linux or Unix systems, you might use:</p>\n<pre class=\"programlisting\">archive_cleanup_command = 'pg_archivecleanup -d /mnt/standby/archive %r 2&gt;&gt;cleanup.log'\n</pre>\n<p>where the archive directory is physically located on the standby server, so that the <code class=\"varname\">archive_command</code> is accessing it across NFS, but the files are local to the standby. This will:</p>\n<div class=\"itemizedlist\">\n<ul class=\"itemizedlist\">\n<li class=\"listitem\">\n<p>produce debugging output in <code class=\"filename\">cleanup.log</code></p>\n</li>\n<li class=\"listitem\">\n<p>remove no-longer-needed files from the archive directory</p>\n</li>\n</ul>\n</div>\n</div>\n</div></div>", "manual_path": "pgarchivecleanup.html", "comparison_data": {"options": [{"names": ["-d"], "signature": "-d", "description": "Print lots of debug logging output on stderr ."}, {"names": ["-n"], "signature": "-n", "description": "Print the names of the files that would have been removed on stdout (performs a dry run)."}, {"names": ["-V", "--version"], "signature": "-V --version", "description": "Print the pg_archivecleanup version and exit."}, {"names": ["-x"], "signature": "-x extension", "description": "Provide an extension that will be stripped from all file names before deciding if they should be deleted. This is typically useful for cleaning up archives that have been compressed during storage, and therefore have had an extension added by the compression program. For example: -x .gz ."}, {"names": ["-?", "--help"], "signature": "-? --help", "description": "Show help about pg_archivecleanup command line arguments, and exit."}], "synopsis": ["pg_archivecleanup [ option ...] archivelocation oldestkeptwalfile"], "environment": []}, "comparison_hash": "1db06106b1b902165d9e4e88eff43da7068a3d855003616f4ae745c765f35801"}, "15": {"facts": [{"label": "Documented executable", "value": "pg_archivecleanup"}, {"label": "Executable version", "value": "15.19"}, {"label": "Reference inventory", "value": "Server applications"}, {"label": "Option definition groups", "value": "5"}], "tables": [{"key": "options", "rows": [{"summary": "Print lots of debug logging output on stderr .", "signature": {"url": "/docs/15/pgarchivecleanup.html", "text": "-d"}}, {"summary": "Print the names of the files that would have been removed on stdout (performs a dry run).", "signature": {"url": "/docs/15/pgarchivecleanup.html", "text": "-n"}}, {"summary": "Print the pg_archivecleanup version and exit.", "signature": {"url": "/docs/15/pgarchivecleanup.html", "text": "-V --version"}}, {"summary": "Provide an extension that will be stripped from all file names before deciding if they should be deleted. This is typically useful for cleaning up archives that have been compressed during storage, and therefore have had an extension added by the compression program. For example: -x .gz .", "signature": {"url": "/docs/15/pgarchivecleanup.html", "text": "-x extension"}}, {"summary": "Show help about pg_archivecleanup command line arguments, and exit.", "signature": {"url": "/docs/15/pgarchivecleanup.html", "text": "-? --help"}}], "title": "Documented options", "columns": [{"key": "signature", "label": "Option and arguments"}, {"key": "summary", "label": "Description"}]}], "options": [{"names": ["-d"], "summary": "Print lots of debug logging output on stderr .", "signature": "-d", "source_url": "/docs/15/pgarchivecleanup.html", "description": "Print lots of debug logging output on stderr ."}, {"names": ["-n"], "summary": "Print the names of the files that would have been removed on stdout (performs a dry run).", "signature": "-n", "source_url": "/docs/15/pgarchivecleanup.html", "description": "Print the names of the files that would have been removed on stdout (performs a dry run)."}, {"names": ["-V", "--version"], "summary": "Print the pg_archivecleanup version and exit.", "signature": "-V --version", "source_url": "/docs/15/pgarchivecleanup.html", "description": "Print the pg_archivecleanup version and exit."}, {"names": ["-x"], "summary": "Provide an extension that will be stripped from all file names before deciding if they should be deleted. This is typically useful for cleaning up archives that have been compressed during storage, and therefore have had an extension added by the compression program. For example: -x .gz .", "signature": "-x extension", "source_url": "/docs/15/pgarchivecleanup.html", "description": "Provide an extension that will be stripped from all file names before deciding if they should be deleted. This is typically useful for cleaning up archives that have been compressed during storage, and therefore have had an extension added by the compression program. For example: -x .gz ."}, {"names": ["-?", "--help"], "summary": "Show help about pg_archivecleanup command line arguments, and exit.", "signature": "-? --help", "source_url": "/docs/15/pgarchivecleanup.html", "description": "Show help about pg_archivecleanup command line arguments, and exit."}], "related": [], "release": {"ref": "https://ftp.postgresql.org/pub/source/v15.19/postgresql-15.19.tar.bz2", "label": "15.19", "major": "15", "channel": "stable", "manifest": {"pdf": {"A4": {"url": "/files/documentation/pdf/15/postgresql-15-A4.pdf", "bytes": 14609140, "pages": 2987, "sha256": "66228564a4d16efb47d6a914085716ecfe22ca1566db56bc7c3d82f790646d72", "built_at": "2026-09-26"}, "US": {"url": "/files/documentation/pdf/15/postgresql-15-US.pdf", "bytes": 14495690, "pages": 3153, "sha256": "645a498c2390d47a6223ec74770631185807a19c484edb0fc5a295d9f460bc02", "built_at": "2026-09-26"}}, "tree": "15", "index": "index.html", "major": "15", "pages": 1168, "release": "15.19", "source_url": "https://ftp.postgresql.org/pub/source/v15.19/postgresql-15.19.tar.bz2", "svg_assets": 3, "source_mode": "en HTML verified against the pinned official archive", "source_sha256": "e1a64a87a46b825b88c082e4518161a47aab53c45694964f8ba1df28f7859f89"}, "revision": "6af958c6520151fc7697d56e0616b03fb00522c4568158674d452ae0644ba545", "evidence_kind": "English manual and source declarations", "source_sha256": "e1a64a87a46b825b88c082e4518161a47aab53c45694964f8ba1df28f7859f89"}, "sources": [{"url": "/docs/15/pgarchivecleanup.html", "file": "pgarchivecleanup.html", "label": "15.19 English manual \u00b7 pgarchivecleanup.html", "anchor": "", "sha256": "c548d5bed0ef8acda2dffe3ffc3f3aafa9f7a9a9c9baa2e3731870ff2bf2ccbd"}, {"url": "/docs/15/reference-server.html", "file": "reference-server.html", "label": "Server applications inventory", "anchor": "", "sha256": "1240cfbb13ebfd22aac8d5ae40c62a9015b246f7774bcf0bce97355ce06350a0"}], "sections": [], "synopsis": ["pg_archivecleanup [ option ...] archivelocation oldestkeptwalfile"], "signature": "pg_archivecleanup [ option ...] archivelocation oldestkeptwalfile", "description": ["pg_archivecleanup \u2014 clean up PostgreSQL WAL archive files"], "environment": [], "manual_html": "<div><div class=\"refentry\" id=\"PGARCHIVECLEANUP\">\n<div class=\"titlepage\"></div>\n<div class=\"refnamediv\">\n<h2><span class=\"refentrytitle\"><span class=\"application\">pg_archivecleanup</span></span></h2>\n<p>pg_archivecleanup \u2014 clean up <span class=\"productname\">PostgreSQL</span> WAL archive files</p>\n</div>\n<div class=\"refsynopsisdiv\">\n<h2>Synopsis</h2>\n<div class=\"cmdsynopsis\">\n<p id=\"id-1.9.5.4.4.1\"><code class=\"command\">pg_archivecleanup</code> [<em class=\"replaceable\"><code>option</code></em>...] <em class=\"replaceable\"><code>archivelocation</code></em> <em class=\"replaceable\"><code>oldestkeptwalfile</code></em></p>\n</div>\n</div>\n<div class=\"refsect1\" id=\"id-1.9.5.4.5\">\n<h2>Description</h2>\n<p><span class=\"application\">pg_archivecleanup</span> is designed to be used as an <code class=\"literal\">archive_cleanup_command</code> to clean up WAL file archives when running as a standby server (see <a class=\"xref\" href=\"/docs/15/warm-standby.html\" title=\"27.2.\u00a0Log-Shipping Standby Servers\">Section\u00a027.2</a>). <span class=\"application\">pg_archivecleanup</span> can also be used as a standalone program to clean WAL file archives.</p>\n<p>To configure a standby server to use <span class=\"application\">pg_archivecleanup</span>, put this into its <code class=\"filename\">postgresql.conf</code> configuration file:</p>\n<pre class=\"programlisting\">archive_cleanup_command = 'pg_archivecleanup <em class=\"replaceable\"><code>archivelocation</code></em> %r'\n</pre>\n<p>where <em class=\"replaceable\"><code>archivelocation</code></em> is the directory from which WAL segment files should be removed.</p>\n<p>When used within <a class=\"xref\" href=\"/docs/15/runtime-config-wal.html#GUC-ARCHIVE-CLEANUP-COMMAND\">archive_cleanup_command</a>, all WAL files logically preceding the value of the <code class=\"literal\">%r</code> argument will be removed from <em class=\"replaceable\"><code>archivelocation</code></em>. This minimizes the number of files that need to be retained, while preserving crash-restart capability. Use of this parameter is appropriate if the <em class=\"replaceable\"><code>archivelocation</code></em> is a transient staging area for this particular standby server, but <span class=\"emphasis\"><em>not</em></span> when the <em class=\"replaceable\"><code>archivelocation</code></em> is intended as a long-term WAL archive area, or when multiple standby servers are recovering from the same archive location.</p>\n<p>When used as a standalone program all WAL files logically preceding the <em class=\"replaceable\"><code>oldestkeptwalfile</code></em> will be removed from <em class=\"replaceable\"><code>archivelocation</code></em>. In this mode, if you specify a <code class=\"filename\">.partial</code> or <code class=\"filename\">.backup</code> file name, then only the file prefix will be used as the <em class=\"replaceable\"><code>oldestkeptwalfile</code></em>. This treatment of <code class=\"filename\">.backup</code> file name allows you to remove all WAL files archived prior to a specific base backup without error. For example, the following example will remove all files older than WAL file name <code class=\"filename\">000000010000003700000010</code>:</p>\n<pre class=\"programlisting\">pg_archivecleanup -d archive 000000010000003700000010.00000020.backup\n\npg_archivecleanup:  keep WAL file \"archive/000000010000003700000010\" and later\npg_archivecleanup:  removing file \"archive/00000001000000370000000F\"\npg_archivecleanup:  removing file \"archive/00000001000000370000000E\"\n</pre>\n<p><span class=\"application\">pg_archivecleanup</span> assumes that <em class=\"replaceable\"><code>archivelocation</code></em> is a directory readable and writable by the server-owning user.</p>\n</div>\n<div class=\"refsect1\" id=\"id-1.9.5.4.6\">\n<h2>Options</h2>\n<p><span class=\"application\">pg_archivecleanup</span> accepts the following command-line arguments:</p>\n<div class=\"variablelist\">\n<dl class=\"variablelist\">\n<dt><span class=\"term\"><code class=\"option\">-d</code></span></dt>\n<dd>\n<p>Print lots of debug logging output on <code class=\"filename\">stderr</code>.</p>\n</dd>\n<dt><span class=\"term\"><code class=\"option\">-n</code></span></dt>\n<dd>\n<p>Print the names of the files that would have been removed on <code class=\"filename\">stdout</code> (performs a dry run).</p>\n</dd>\n<dt><span class=\"term\"><code class=\"option\">-V</code><br></span><span class=\"term\"><code class=\"option\">--version</code></span></dt>\n<dd>\n<p>Print the <span class=\"application\">pg_archivecleanup</span> version and exit.</p>\n</dd>\n<dt><span class=\"term\"><code class=\"option\">-x</code> <em class=\"replaceable\"><code>extension</code></em></span></dt>\n<dd>\n<p>Provide an extension that will be stripped from all file names before deciding if they should be deleted. This is typically useful for cleaning up archives that have been compressed during storage, and therefore have had an extension added by the compression program. For example: <code class=\"literal\">-x .gz</code>.</p>\n</dd>\n<dt><span class=\"term\"><code class=\"option\">-?</code><br></span><span class=\"term\"><code class=\"option\">--help</code></span></dt>\n<dd>\n<p>Show help about <span class=\"application\">pg_archivecleanup</span> command line arguments, and exit.</p>\n</dd>\n</dl>\n</div>\n</div>\n<div class=\"refsect1\" id=\"id-1.9.5.4.7\">\n<h2>Environment</h2>\n<p>The environment variable <code class=\"envar\">PG_COLOR</code> specifies whether to use color in diagnostic messages. Possible values are <code class=\"literal\">always</code>, <code class=\"literal\">auto</code> and <code class=\"literal\">never</code>.</p>\n</div>\n<div class=\"refsect1\" id=\"id-1.9.5.4.8\">\n<h2>Notes</h2>\n<p><span class=\"application\">pg_archivecleanup</span> is designed to work with <span class=\"productname\">PostgreSQL</span> 8.0 and later when used as a standalone utility, or with <span class=\"productname\">PostgreSQL</span> 9.0 and later when used as an archive cleanup command.</p>\n<p><span class=\"application\">pg_archivecleanup</span> is written in C and has an easy-to-modify source code, with specifically designated sections to modify for your own needs</p>\n</div>\n<div class=\"refsect1\" id=\"id-1.9.5.4.9\">\n<h2>Examples</h2>\n<p>On Linux or Unix systems, you might use:</p>\n<pre class=\"programlisting\">archive_cleanup_command = 'pg_archivecleanup -d /mnt/standby/archive %r 2&gt;&gt;cleanup.log'\n</pre>\n<p>where the archive directory is physically located on the standby server, so that the <code class=\"varname\">archive_command</code> is accessing it across NFS, but the files are local to the standby. This will:</p>\n<div class=\"itemizedlist\">\n<ul class=\"itemizedlist\">\n<li class=\"listitem\">\n<p>produce debugging output in <code class=\"filename\">cleanup.log</code></p>\n</li>\n<li class=\"listitem\">\n<p>remove no-longer-needed files from the archive directory</p>\n</li>\n</ul>\n</div>\n</div>\n</div></div>", "manual_path": "pgarchivecleanup.html", "comparison_data": {"options": [{"names": ["-d"], "signature": "-d", "description": "Print lots of debug logging output on stderr ."}, {"names": ["-n"], "signature": "-n", "description": "Print the names of the files that would have been removed on stdout (performs a dry run)."}, {"names": ["-V", "--version"], "signature": "-V --version", "description": "Print the pg_archivecleanup version and exit."}, {"names": ["-x"], "signature": "-x extension", "description": "Provide an extension that will be stripped from all file names before deciding if they should be deleted. This is typically useful for cleaning up archives that have been compressed during storage, and therefore have had an extension added by the compression program. For example: -x .gz ."}, {"names": ["-?", "--help"], "signature": "-? --help", "description": "Show help about pg_archivecleanup command line arguments, and exit."}], "synopsis": ["pg_archivecleanup [ option ...] archivelocation oldestkeptwalfile"], "environment": []}, "comparison_hash": "1db06106b1b902165d9e4e88eff43da7068a3d855003616f4ae745c765f35801"}, "16": {"facts": [{"label": "Documented executable", "value": "pg_archivecleanup"}, {"label": "Executable version", "value": "16.15"}, {"label": "Reference inventory", "value": "Server applications"}, {"label": "Option definition groups", "value": "5"}], "tables": [{"key": "options", "rows": [{"summary": "Print lots of debug logging output on stderr .", "signature": {"url": "/docs/16/pgarchivecleanup.html", "text": "-d"}}, {"summary": "Print the names of the files that would have been removed on stdout (performs a dry run).", "signature": {"url": "/docs/16/pgarchivecleanup.html", "text": "-n"}}, {"summary": "Print the pg_archivecleanup version and exit.", "signature": {"url": "/docs/16/pgarchivecleanup.html", "text": "-V --version"}}, {"summary": "Provide an extension that will be stripped from all file names before deciding if they should be deleted. This is typically useful for cleaning up archives that have been compressed during storage, and therefore have had an extension added by the compression program. For example: -x .gz .", "signature": {"url": "/docs/16/pgarchivecleanup.html", "text": "-x extension"}}, {"summary": "Show help about pg_archivecleanup command line arguments, and exit.", "signature": {"url": "/docs/16/pgarchivecleanup.html", "text": "-? --help"}}], "title": "Documented options", "columns": [{"key": "signature", "label": "Option and arguments"}, {"key": "summary", "label": "Description"}]}], "options": [{"names": ["-d"], "summary": "Print lots of debug logging output on stderr .", "signature": "-d", "source_url": "/docs/16/pgarchivecleanup.html", "description": "Print lots of debug logging output on stderr ."}, {"names": ["-n"], "summary": "Print the names of the files that would have been removed on stdout (performs a dry run).", "signature": "-n", "source_url": "/docs/16/pgarchivecleanup.html", "description": "Print the names of the files that would have been removed on stdout (performs a dry run)."}, {"names": ["-V", "--version"], "summary": "Print the pg_archivecleanup version and exit.", "signature": "-V --version", "source_url": "/docs/16/pgarchivecleanup.html", "description": "Print the pg_archivecleanup version and exit."}, {"names": ["-x"], "summary": "Provide an extension that will be stripped from all file names before deciding if they should be deleted. This is typically useful for cleaning up archives that have been compressed during storage, and therefore have had an extension added by the compression program. For example: -x .gz .", "signature": "-x extension", "source_url": "/docs/16/pgarchivecleanup.html", "description": "Provide an extension that will be stripped from all file names before deciding if they should be deleted. This is typically useful for cleaning up archives that have been compressed during storage, and therefore have had an extension added by the compression program. For example: -x .gz ."}, {"names": ["-?", "--help"], "summary": "Show help about pg_archivecleanup command line arguments, and exit.", "signature": "-? --help", "source_url": "/docs/16/pgarchivecleanup.html", "description": "Show help about pg_archivecleanup command line arguments, and exit."}], "related": [], "release": {"ref": "https://ftp.postgresql.org/pub/source/v16.15/postgresql-16.15.tar.bz2", "label": "16.15", "major": "16", "channel": "stable", "manifest": {"pdf": {"A4": {"url": "/files/documentation/pdf/16/postgresql-16-A4.pdf", "bytes": 15282337, "pages": 3055, "sha256": "4bb6c1f63deedac98736d8c4c7bc0fad0ac24e85b07e21ee10411872f06afd06", "built_at": "2026-09-26"}, "US": {"url": "/files/documentation/pdf/16/postgresql-16-US.pdf", "bytes": 15164148, "pages": 3220, "sha256": "5b6b6166c89991199e144bb0ae34c17a5f29826251dbf19db1abc0df3a3e771b", "built_at": "2026-09-26"}}, "tree": "16", "index": "index.html", "major": "16", "pages": 1169, "release": "16.15", "source_url": "https://ftp.postgresql.org/pub/source/v16.15/postgresql-16.15.tar.bz2", "svg_assets": 3, "source_mode": "en HTML verified against the pinned official archive", "source_sha256": "c1575341fa7bd40f5274ea465b34390f4dc64cdd0770af327005caaeb9f6b7ed"}, "revision": "3c21e58b35318021716440e67bb8bafd392b6a2b965a244d90e9e33c99e0bdef", "evidence_kind": "English manual and source declarations", "source_sha256": "c1575341fa7bd40f5274ea465b34390f4dc64cdd0770af327005caaeb9f6b7ed"}, "sources": [{"url": "/docs/16/pgarchivecleanup.html", "file": "pgarchivecleanup.html", "label": "16.15 English manual \u00b7 pgarchivecleanup.html", "anchor": "", "sha256": "c7f92a5c8f2deb68b47c39246789aac5b76beaae29e12eba9a2907bfa759d112"}, {"url": "/docs/16/reference-server.html", "file": "reference-server.html", "label": "Server applications inventory", "anchor": "", "sha256": "8aaa4422eece8f26d84715f855d9d0f7f87b200f8b82898c73c865ee42c2c70f"}], "sections": [], "synopsis": ["pg_archivecleanup [ option ...] archivelocation oldestkeptwalfile"], "signature": "pg_archivecleanup [ option ...] archivelocation oldestkeptwalfile", "description": ["pg_archivecleanup \u2014 clean up PostgreSQL WAL archive files"], "environment": [], "manual_html": "<div><div class=\"refentry\" id=\"PGARCHIVECLEANUP\">\n<div class=\"titlepage\"></div>\n<div class=\"refnamediv\">\n<h2><span class=\"refentrytitle\"><span class=\"application\">pg_archivecleanup</span></span></h2>\n<p>pg_archivecleanup \u2014 clean up <span class=\"productname\">PostgreSQL</span> WAL archive files</p>\n</div>\n<div class=\"refsynopsisdiv\">\n<h2>Synopsis</h2>\n<div class=\"cmdsynopsis\">\n<p id=\"id-1.9.5.4.4.1\"><code class=\"command\">pg_archivecleanup</code> [<em class=\"replaceable\"><code>option</code></em>...] <em class=\"replaceable\"><code>archivelocation</code></em> <em class=\"replaceable\"><code>oldestkeptwalfile</code></em></p>\n</div>\n</div>\n<div class=\"refsect1\" id=\"id-1.9.5.4.5\">\n<h2>Description</h2>\n<p><span class=\"application\">pg_archivecleanup</span> is designed to be used as an <code class=\"literal\">archive_cleanup_command</code> to clean up WAL file archives when running as a standby server (see <a class=\"xref\" href=\"/docs/16/warm-standby.html\" title=\"27.2.\u00a0Log-Shipping Standby Servers\">Section\u00a027.2</a>). <span class=\"application\">pg_archivecleanup</span> can also be used as a standalone program to clean WAL file archives.</p>\n<p>To configure a standby server to use <span class=\"application\">pg_archivecleanup</span>, put this into its <code class=\"filename\">postgresql.conf</code> configuration file:</p>\n<pre class=\"programlisting\">archive_cleanup_command = 'pg_archivecleanup <em class=\"replaceable\"><code>archivelocation</code></em> %r'\n</pre>\n<p>where <em class=\"replaceable\"><code>archivelocation</code></em> is the directory from which WAL segment files should be removed.</p>\n<p>When used within <a class=\"xref\" href=\"/docs/16/runtime-config-wal.html#GUC-ARCHIVE-CLEANUP-COMMAND\">archive_cleanup_command</a>, all WAL files logically preceding the value of the <code class=\"literal\">%r</code> argument will be removed from <em class=\"replaceable\"><code>archivelocation</code></em>. This minimizes the number of files that need to be retained, while preserving crash-restart capability. Use of this parameter is appropriate if the <em class=\"replaceable\"><code>archivelocation</code></em> is a transient staging area for this particular standby server, but <span class=\"emphasis\"><em>not</em></span> when the <em class=\"replaceable\"><code>archivelocation</code></em> is intended as a long-term WAL archive area, or when multiple standby servers are recovering from the same archive location.</p>\n<p>When used as a standalone program all WAL files logically preceding the <em class=\"replaceable\"><code>oldestkeptwalfile</code></em> will be removed from <em class=\"replaceable\"><code>archivelocation</code></em>. In this mode, if you specify a <code class=\"filename\">.partial</code> or <code class=\"filename\">.backup</code> file name, then only the file prefix will be used as the <em class=\"replaceable\"><code>oldestkeptwalfile</code></em>. This treatment of <code class=\"filename\">.backup</code> file name allows you to remove all WAL files archived prior to a specific base backup without error. For example, the following example will remove all files older than WAL file name <code class=\"filename\">000000010000003700000010</code>:</p>\n<pre class=\"programlisting\">pg_archivecleanup -d archive 000000010000003700000010.00000020.backup\n\npg_archivecleanup:  keep WAL file \"archive/000000010000003700000010\" and later\npg_archivecleanup:  removing file \"archive/00000001000000370000000F\"\npg_archivecleanup:  removing file \"archive/00000001000000370000000E\"\n</pre>\n<p><span class=\"application\">pg_archivecleanup</span> assumes that <em class=\"replaceable\"><code>archivelocation</code></em> is a directory readable and writable by the server-owning user.</p>\n</div>\n<div class=\"refsect1\" id=\"id-1.9.5.4.6\">\n<h2>Options</h2>\n<p><span class=\"application\">pg_archivecleanup</span> accepts the following command-line arguments:</p>\n<div class=\"variablelist\">\n<dl class=\"variablelist\">\n<dt><span class=\"term\"><code class=\"option\">-d</code></span></dt>\n<dd>\n<p>Print lots of debug logging output on <code class=\"filename\">stderr</code>.</p>\n</dd>\n<dt><span class=\"term\"><code class=\"option\">-n</code></span></dt>\n<dd>\n<p>Print the names of the files that would have been removed on <code class=\"filename\">stdout</code> (performs a dry run).</p>\n</dd>\n<dt><span class=\"term\"><code class=\"option\">-V</code><br></span><span class=\"term\"><code class=\"option\">--version</code></span></dt>\n<dd>\n<p>Print the <span class=\"application\">pg_archivecleanup</span> version and exit.</p>\n</dd>\n<dt><span class=\"term\"><code class=\"option\">-x</code> <em class=\"replaceable\"><code>extension</code></em></span></dt>\n<dd>\n<p>Provide an extension that will be stripped from all file names before deciding if they should be deleted. This is typically useful for cleaning up archives that have been compressed during storage, and therefore have had an extension added by the compression program. For example: <code class=\"literal\">-x .gz</code>.</p>\n</dd>\n<dt><span class=\"term\"><code class=\"option\">-?</code><br></span><span class=\"term\"><code class=\"option\">--help</code></span></dt>\n<dd>\n<p>Show help about <span class=\"application\">pg_archivecleanup</span> command line arguments, and exit.</p>\n</dd>\n</dl>\n</div>\n</div>\n<div class=\"refsect1\" id=\"id-1.9.5.4.7\">\n<h2>Environment</h2>\n<p>The environment variable <code class=\"envar\">PG_COLOR</code> specifies whether to use color in diagnostic messages. Possible values are <code class=\"literal\">always</code>, <code class=\"literal\">auto</code> and <code class=\"literal\">never</code>.</p>\n</div>\n<div class=\"refsect1\" id=\"id-1.9.5.4.8\">\n<h2>Notes</h2>\n<p><span class=\"application\">pg_archivecleanup</span> is designed to work with <span class=\"productname\">PostgreSQL</span> 8.0 and later when used as a standalone utility, or with <span class=\"productname\">PostgreSQL</span> 9.0 and later when used as an archive cleanup command.</p>\n<p><span class=\"application\">pg_archivecleanup</span> is written in C and has an easy-to-modify source code, with specifically designated sections to modify for your own needs</p>\n</div>\n<div class=\"refsect1\" id=\"id-1.9.5.4.9\">\n<h2>Examples</h2>\n<p>On Linux or Unix systems, you might use:</p>\n<pre class=\"programlisting\">archive_cleanup_command = 'pg_archivecleanup -d /mnt/standby/archive %r 2&gt;&gt;cleanup.log'\n</pre>\n<p>where the archive directory is physically located on the standby server, so that the <code class=\"varname\">archive_command</code> is accessing it across NFS, but the files are local to the standby. This will:</p>\n<div class=\"itemizedlist\">\n<ul class=\"itemizedlist\">\n<li class=\"listitem\">\n<p>produce debugging output in <code class=\"filename\">cleanup.log</code></p>\n</li>\n<li class=\"listitem\">\n<p>remove no-longer-needed files from the archive directory</p>\n</li>\n</ul>\n</div>\n</div>\n</div></div>", "manual_path": "pgarchivecleanup.html", "comparison_data": {"options": [{"names": ["-d"], "signature": "-d", "description": "Print lots of debug logging output on stderr ."}, {"names": ["-n"], "signature": "-n", "description": "Print the names of the files that would have been removed on stdout (performs a dry run)."}, {"names": ["-V", "--version"], "signature": "-V --version", "description": "Print the pg_archivecleanup version and exit."}, {"names": ["-x"], "signature": "-x extension", "description": "Provide an extension that will be stripped from all file names before deciding if they should be deleted. This is typically useful for cleaning up archives that have been compressed during storage, and therefore have had an extension added by the compression program. For example: -x .gz ."}, {"names": ["-?", "--help"], "signature": "-? --help", "description": "Show help about pg_archivecleanup command line arguments, and exit."}], "synopsis": ["pg_archivecleanup [ option ...] archivelocation oldestkeptwalfile"], "environment": []}, "comparison_hash": "1db06106b1b902165d9e4e88eff43da7068a3d855003616f4ae745c765f35801"}, "17": {"facts": [{"label": "Documented executable", "value": "pg_archivecleanup"}, {"label": "Executable version", "value": "17.11"}, {"label": "Reference inventory", "value": "Server applications"}, {"label": "Option definition groups", "value": "6"}], "tables": [{"key": "options", "rows": [{"summary": "Remove backup history files as well. See Section 25.3.2 for details about backup history files.", "signature": {"url": "/docs/17/pgarchivecleanup.html", "text": "-b --clean-backup-history"}}, {"summary": "Print lots of debug logging output on stderr .", "signature": {"url": "/docs/17/pgarchivecleanup.html", "text": "-d --debug"}}, {"summary": "Print the names of the files that would have been removed on stdout (performs a dry run).", "signature": {"url": "/docs/17/pgarchivecleanup.html", "text": "-n --dry-run"}}, {"summary": "Print the pg_archivecleanup version and exit.", "signature": {"url": "/docs/17/pgarchivecleanup.html", "text": "-V --version"}}, {"summary": "Provide an extension that will be stripped from all file names before deciding if they should be deleted. This is typically useful for cleaning up archives that have been compressed during storage, and therefore have had an extension added by the compression program. For example: -x .gz .", "signature": {"url": "/docs/17/pgarchivecleanup.html", "text": "-x extension --strip-extension= extension"}}, {"summary": "Show help about pg_archivecleanup command line arguments, and exit.", "signature": {"url": "/docs/17/pgarchivecleanup.html", "text": "-? --help"}}], "title": "Documented options", "columns": [{"key": "signature", "label": "Option and arguments"}, {"key": "summary", "label": "Description"}]}], "options": [{"names": ["-b", "--clean-backup-history"], "summary": "Remove backup history files as well. See Section 25.3.2 for details about backup history files.", "signature": "-b --clean-backup-history", "source_url": "/docs/17/pgarchivecleanup.html", "description": "Remove backup history files as well. See Section 25.3.2 for details about backup history files."}, {"names": ["-d", "--debug"], "summary": "Print lots of debug logging output on stderr .", "signature": "-d --debug", "source_url": "/docs/17/pgarchivecleanup.html", "description": "Print lots of debug logging output on stderr ."}, {"names": ["-n", "--dry-run"], "summary": "Print the names of the files that would have been removed on stdout (performs a dry run).", "signature": "-n --dry-run", "source_url": "/docs/17/pgarchivecleanup.html", "description": "Print the names of the files that would have been removed on stdout (performs a dry run)."}, {"names": ["-V", "--version"], "summary": "Print the pg_archivecleanup version and exit.", "signature": "-V --version", "source_url": "/docs/17/pgarchivecleanup.html", "description": "Print the pg_archivecleanup version and exit."}, {"names": ["-x extension", "--strip-extension= extension"], "summary": "Provide an extension that will be stripped from all file names before deciding if they should be deleted. This is typically useful for cleaning up archives that have been compressed during storage, and therefore have had an extension added by the compression program. For example: -x .gz .", "signature": "-x extension --strip-extension= extension", "source_url": "/docs/17/pgarchivecleanup.html", "description": "Provide an extension that will be stripped from all file names before deciding if they should be deleted. This is typically useful for cleaning up archives that have been compressed during storage, and therefore have had an extension added by the compression program. For example: -x .gz ."}, {"names": ["-?", "--help"], "summary": "Show help about pg_archivecleanup command line arguments, and exit.", "signature": "-? --help", "source_url": "/docs/17/pgarchivecleanup.html", "description": "Show help about pg_archivecleanup command line arguments, and exit."}], "related": [], "release": {"ref": "https://ftp.postgresql.org/pub/source/v17.11/postgresql-17.11.tar.bz2", "label": "17.11", "major": "17", "channel": "stable", "manifest": {"pdf": {"A4": {"url": "/files/documentation/pdf/17/postgresql-17-A4.pdf", "bytes": 15521293, "pages": 3099, "sha256": "1991354df0dc89e70ec39328c28988ef8b19c6a93671dab3893650b63e9f4e36", "built_at": "2026-09-26"}, "US": {"url": "/files/documentation/pdf/17/postgresql-17-US.pdf", "bytes": 15398150, "pages": 3270, "sha256": "07696c8f38abf31babf22d2db337093936e7c472d2af36d050b000c49bbcf52c", "built_at": "2026-09-26"}}, "tree": "17", "index": "index.html", "major": "17", "pages": 1143, "release": "17.11", "source_url": "https://ftp.postgresql.org/pub/source/v17.11/postgresql-17.11.tar.bz2", "svg_assets": 3, "source_mode": "en SGML built with pinned official archive", "source_sha256": "dd27f2b3c59e73ed14aa3324901242bf69a032a6347805f274e6260322d42979"}, "revision": "58419c9b0dd42cb34c8d53695bb025a7e582edf55ccd4c5bcb1c2c7c71a37487", "evidence_kind": "English manual and source declarations", "source_sha256": "dd27f2b3c59e73ed14aa3324901242bf69a032a6347805f274e6260322d42979"}, "sources": [{"url": "/docs/17/pgarchivecleanup.html", "file": "pgarchivecleanup.html", "label": "17.11 English manual \u00b7 pgarchivecleanup.html", "anchor": "", "sha256": "8edc3a696ce98c8700ea93b321bf7a07f69d4c9a1b5713afdc543412f1a55055"}, {"url": "/docs/17/reference-server.html", "file": "reference-server.html", "label": "Server applications inventory", "anchor": "", "sha256": "01f07993ff020684f4c290d17cdafa26fb17ea5c1d476bc3a5efc68bf8ddd9b9"}], "sections": [], "synopsis": ["pg_archivecleanup [ option ...] archivelocation oldestkeptwalfile"], "signature": "pg_archivecleanup [ option ...] archivelocation oldestkeptwalfile", "description": ["pg_archivecleanup \u2014 clean up PostgreSQL WAL archive files"], "environment": [], "manual_html": "<div><div class=\"refentry\" id=\"PGARCHIVECLEANUP\">\n<div class=\"titlepage\"></div>\n<div class=\"refnamediv\">\n<h2><span class=\"refentrytitle\"><span class=\"application\">pg_archivecleanup</span></span></h2>\n<p>pg_archivecleanup \u2014 clean up <span class=\"productname\">PostgreSQL</span> WAL archive files</p>\n</div>\n<div class=\"refsynopsisdiv\">\n<h2>Synopsis</h2>\n<div class=\"cmdsynopsis\">\n<p id=\"id-1.9.5.4.4.1\"><code class=\"command\">pg_archivecleanup</code> [<em class=\"replaceable\"><code>option</code></em>...] <em class=\"replaceable\"><code>archivelocation</code></em> <em class=\"replaceable\"><code>oldestkeptwalfile</code></em></p>\n</div>\n</div>\n<div class=\"refsect1\" id=\"id-1.9.5.4.5\">\n<h2>Description</h2>\n<p><span class=\"application\">pg_archivecleanup</span> is designed to be used as an <code class=\"literal\">archive_cleanup_command</code> to clean up WAL file archives when running as a standby server (see <a class=\"xref\" href=\"/docs/17/warm-standby.html\" title=\"26.2.\u00a0Log-Shipping Standby Servers\">Section\u00a026.2</a>). <span class=\"application\">pg_archivecleanup</span> can also be used as a standalone program to clean WAL file archives.</p>\n<p>To configure a standby server to use <span class=\"application\">pg_archivecleanup</span>, put this into its <code class=\"filename\">postgresql.conf</code> configuration file:</p>\n<pre class=\"programlisting\">archive_cleanup_command = 'pg_archivecleanup <em class=\"replaceable\"><code>archivelocation</code></em> %r'\n</pre>\n<p>where <em class=\"replaceable\"><code>archivelocation</code></em> is the directory from which WAL segment files should be removed.</p>\n<p>When used within <a class=\"xref\" href=\"/docs/17/runtime-config-wal.html#GUC-ARCHIVE-CLEANUP-COMMAND\">archive_cleanup_command</a>, all WAL files logically preceding the value of the <code class=\"literal\">%r</code> argument will be removed from <em class=\"replaceable\"><code>archivelocation</code></em>. This minimizes the number of files that need to be retained, while preserving crash-restart capability. Use of this parameter is appropriate if the <em class=\"replaceable\"><code>archivelocation</code></em> is a transient staging area for this particular standby server, but <span class=\"emphasis\"><em>not</em></span> when the <em class=\"replaceable\"><code>archivelocation</code></em> is intended as a long-term WAL archive area, or when multiple standby servers are recovering from the same archive location.</p>\n<p>When used as a standalone program all WAL files logically preceding the <em class=\"replaceable\"><code>oldestkeptwalfile</code></em> will be removed from <em class=\"replaceable\"><code>archivelocation</code></em>. In this mode, if you specify a <code class=\"filename\">.partial</code> or <code class=\"filename\">.backup</code> file name, then only the file prefix will be used as the <em class=\"replaceable\"><code>oldestkeptwalfile</code></em>. This treatment of <code class=\"filename\">.backup</code> file name allows you to remove all WAL files archived prior to a specific base backup without error. For example, the following example will remove all files older than WAL file name <code class=\"filename\">000000010000003700000010</code>:</p>\n<pre class=\"programlisting\">pg_archivecleanup -d archive 000000010000003700000010.00000020.backup\n\npg_archivecleanup:  keep WAL file \"archive/000000010000003700000010\" and later\npg_archivecleanup:  removing file \"archive/00000001000000370000000F\"\npg_archivecleanup:  removing file \"archive/00000001000000370000000E\"\n</pre>\n<p><span class=\"application\">pg_archivecleanup</span> assumes that <em class=\"replaceable\"><code>archivelocation</code></em> is a directory readable and writable by the server-owning user.</p>\n</div>\n<div class=\"refsect1\" id=\"id-1.9.5.4.6\">\n<h2>Options</h2>\n<p><span class=\"application\">pg_archivecleanup</span> accepts the following command-line arguments:</p>\n<div class=\"variablelist\">\n<dl class=\"variablelist\">\n<dt><span class=\"term\"><code class=\"option\">-b</code><br></span><span class=\"term\"><code class=\"option\">--clean-backup-history</code></span></dt>\n<dd>\n<p>Remove backup history files as well. See <a class=\"xref\" href=\"/docs/17/continuous-archiving.html#BACKUP-BASE-BACKUP\" title=\"25.3.2.\u00a0Making a Base Backup\">Section\u00a025.3.2</a> for details about backup history files.</p>\n</dd>\n<dt><span class=\"term\"><code class=\"option\">-d</code><br></span><span class=\"term\"><code class=\"option\">--debug</code></span></dt>\n<dd>\n<p>Print lots of debug logging output on <code class=\"filename\">stderr</code>.</p>\n</dd>\n<dt><span class=\"term\"><code class=\"option\">-n</code><br></span><span class=\"term\"><code class=\"option\">--dry-run</code></span></dt>\n<dd>\n<p>Print the names of the files that would have been removed on <code class=\"filename\">stdout</code> (performs a dry run).</p>\n</dd>\n<dt><span class=\"term\"><code class=\"option\">-V</code><br></span><span class=\"term\"><code class=\"option\">--version</code></span></dt>\n<dd>\n<p>Print the <span class=\"application\">pg_archivecleanup</span> version and exit.</p>\n</dd>\n<dt><span class=\"term\"><code class=\"option\">-x <em class=\"replaceable\"><code>extension</code></em></code><br></span><span class=\"term\"><code class=\"option\">--strip-extension=<em class=\"replaceable\"><code>extension</code></em></code></span></dt>\n<dd>\n<p>Provide an extension that will be stripped from all file names before deciding if they should be deleted. This is typically useful for cleaning up archives that have been compressed during storage, and therefore have had an extension added by the compression program. For example: <code class=\"literal\">-x .gz</code>.</p>\n</dd>\n<dt><span class=\"term\"><code class=\"option\">-?</code><br></span><span class=\"term\"><code class=\"option\">--help</code></span></dt>\n<dd>\n<p>Show help about <span class=\"application\">pg_archivecleanup</span> command line arguments, and exit.</p>\n</dd>\n</dl>\n</div>\n</div>\n<div class=\"refsect1\" id=\"id-1.9.5.4.7\">\n<h2>Environment</h2>\n<p>The environment variable <code class=\"envar\">PG_COLOR</code> specifies whether to use color in diagnostic messages. Possible values are <code class=\"literal\">always</code>, <code class=\"literal\">auto</code> and <code class=\"literal\">never</code>.</p>\n</div>\n<div class=\"refsect1\" id=\"id-1.9.5.4.8\">\n<h2>Notes</h2>\n<p><span class=\"application\">pg_archivecleanup</span> is designed to work with <span class=\"productname\">PostgreSQL</span> 8.0 and later when used as a standalone utility, or with <span class=\"productname\">PostgreSQL</span> 9.0 and later when used as an archive cleanup command.</p>\n<p><span class=\"application\">pg_archivecleanup</span> is written in C and has an easy-to-modify source code, with specifically designated sections to modify for your own needs</p>\n</div>\n<div class=\"refsect1\" id=\"id-1.9.5.4.9\">\n<h2>Examples</h2>\n<p>On Linux or Unix systems, you might use:</p>\n<pre class=\"programlisting\">archive_cleanup_command = 'pg_archivecleanup -d /mnt/standby/archive %r 2&gt;&gt;cleanup.log'\n</pre>\n<p>where the archive directory is physically located on the standby server, so that the <code class=\"varname\">archive_command</code> is accessing it across NFS, but the files are local to the standby. This will:</p>\n<div class=\"itemizedlist\">\n<ul class=\"itemizedlist\">\n<li class=\"listitem\">\n<p>produce debugging output in <code class=\"filename\">cleanup.log</code></p>\n</li>\n<li class=\"listitem\">\n<p>remove no-longer-needed files from the archive directory</p>\n</li>\n</ul>\n</div>\n</div>\n</div></div>", "manual_path": "pgarchivecleanup.html", "comparison_data": {"options": [{"names": ["-b", "--clean-backup-history"], "signature": "-b --clean-backup-history", "description": "Remove backup history files as well. See Section 25.3.2 for details about backup history files."}, {"names": ["-d", "--debug"], "signature": "-d --debug", "description": "Print lots of debug logging output on stderr ."}, {"names": ["-n", "--dry-run"], "signature": "-n --dry-run", "description": "Print the names of the files that would have been removed on stdout (performs a dry run)."}, {"names": ["-V", "--version"], "signature": "-V --version", "description": "Print the pg_archivecleanup version and exit."}, {"names": ["-x extension", "--strip-extension= extension"], "signature": "-x extension --strip-extension= extension", "description": "Provide an extension that will be stripped from all file names before deciding if they should be deleted. This is typically useful for cleaning up archives that have been compressed during storage, and therefore have had an extension added by the compression program. For example: -x .gz ."}, {"names": ["-?", "--help"], "signature": "-? --help", "description": "Show help about pg_archivecleanup command line arguments, and exit."}], "synopsis": ["pg_archivecleanup [ option ...] archivelocation oldestkeptwalfile"], "environment": []}, "comparison_hash": "18d66c08cf423bd426b6c3ea916de5ab0a2b1ae3ecbe75bc0b1efbbf13ec32db"}, "18": {"facts": [{"label": "Documented executable", "value": "pg_archivecleanup"}, {"label": "Executable version", "value": "18.6"}, {"label": "Reference inventory", "value": "Server applications"}, {"label": "Option definition groups", "value": "6"}], "tables": [{"key": "options", "rows": [{"summary": "Remove backup history files as well. See Section 25.3.2 for details about backup history files.", "signature": {"url": "/docs/18/pgarchivecleanup.html", "text": "-b --clean-backup-history"}}, {"summary": "Print lots of debug logging output on stderr .", "signature": {"url": "/docs/18/pgarchivecleanup.html", "text": "-d --debug"}}, {"summary": "Print the names of the files that would have been removed on stdout (performs a dry run).", "signature": {"url": "/docs/18/pgarchivecleanup.html", "text": "-n --dry-run"}}, {"summary": "Print the pg_archivecleanup version and exit.", "signature": {"url": "/docs/18/pgarchivecleanup.html", "text": "-V --version"}}, {"summary": "Provide an extension that will be stripped from all file names before deciding if they should be deleted. This is typically useful for cleaning up archives that have been compressed during storage, and therefore have had an extension added by the compression program. For example: -x .gz .", "signature": {"url": "/docs/18/pgarchivecleanup.html", "text": "-x extension --strip-extension= extension"}}, {"summary": "Show help about pg_archivecleanup command line arguments, and exit.", "signature": {"url": "/docs/18/pgarchivecleanup.html", "text": "-? --help"}}], "title": "Documented options", "columns": [{"key": "signature", "label": "Option and arguments"}, {"key": "summary", "label": "Description"}]}], "options": [{"names": ["-b", "--clean-backup-history"], "summary": "Remove backup history files as well. See Section 25.3.2 for details about backup history files.", "signature": "-b --clean-backup-history", "source_url": "/docs/18/pgarchivecleanup.html", "description": "Remove backup history files as well. See Section 25.3.2 for details about backup history files."}, {"names": ["-d", "--debug"], "summary": "Print lots of debug logging output on stderr .", "signature": "-d --debug", "source_url": "/docs/18/pgarchivecleanup.html", "description": "Print lots of debug logging output on stderr ."}, {"names": ["-n", "--dry-run"], "summary": "Print the names of the files that would have been removed on stdout (performs a dry run).", "signature": "-n --dry-run", "source_url": "/docs/18/pgarchivecleanup.html", "description": "Print the names of the files that would have been removed on stdout (performs a dry run)."}, {"names": ["-V", "--version"], "summary": "Print the pg_archivecleanup version and exit.", "signature": "-V --version", "source_url": "/docs/18/pgarchivecleanup.html", "description": "Print the pg_archivecleanup version and exit."}, {"names": ["-x extension", "--strip-extension= extension"], "summary": "Provide an extension that will be stripped from all file names before deciding if they should be deleted. This is typically useful for cleaning up archives that have been compressed during storage, and therefore have had an extension added by the compression program. For example: -x .gz .", "signature": "-x extension --strip-extension= extension", "source_url": "/docs/18/pgarchivecleanup.html", "description": "Provide an extension that will be stripped from all file names before deciding if they should be deleted. This is typically useful for cleaning up archives that have been compressed during storage, and therefore have had an extension added by the compression program. For example: -x .gz ."}, {"names": ["-?", "--help"], "summary": "Show help about pg_archivecleanup command line arguments, and exit.", "signature": "-? --help", "source_url": "/docs/18/pgarchivecleanup.html", "description": "Show help about pg_archivecleanup command line arguments, and exit."}], "related": [], "release": {"ref": "https://ftp.postgresql.org/pub/source/v18.6/postgresql-18.6.tar.bz2", "label": "18.6", "major": "18", "channel": "stable", "manifest": {"pdf": {"A4": {"url": "/files/documentation/pdf/18/postgresql-18-A4.pdf", "bytes": 15865106, "pages": 3154, "sha256": "19512c405da53f9f7fcf0abba359223aa65f021be025bf3411381918f92e3190", "built_at": "2026-09-26"}, "US": {"url": "/files/documentation/pdf/18/postgresql-18-US.pdf", "bytes": 15748059, "pages": 3328, "sha256": "facbe6c229e598b872d3d98bef53308f46e06746006fa4590de9a7de9dd46319", "built_at": "2026-09-26"}}, "tree": "18", "index": "index.html", "major": "18", "pages": 1148, "release": "18.6", "source_url": "https://ftp.postgresql.org/pub/source/v18.6/postgresql-18.6.tar.bz2", "svg_assets": 3, "source_mode": "en SGML built with pinned official archive", "source_sha256": "555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f"}, "revision": "ee8d1a3612338fd9adf250730cb640fcc5233b5491337cc00a316a44e3a0b9f8", "evidence_kind": "English manual and source declarations", "source_sha256": "555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f"}, "sources": [{"url": "/docs/18/pgarchivecleanup.html", "file": "pgarchivecleanup.html", "label": "18.6 English manual \u00b7 pgarchivecleanup.html", "anchor": "", "sha256": "430282b0bbc63a05afa75dce3a9f5abd25be1c155de79c0274537e341914d7b4"}, {"url": "/docs/18/reference-server.html", "file": "reference-server.html", "label": "Server applications inventory", "anchor": "", "sha256": "e9f8bbcc8e3641fadd1d20991e8aad6b532155b786ba5a1b7b364ec4f1a5bef3"}], "sections": [], "synopsis": ["pg_archivecleanup [ option ...] archivelocation oldestkeptwalfile"], "signature": "pg_archivecleanup [ option ...] archivelocation oldestkeptwalfile", "description": ["pg_archivecleanup \u2014 clean up PostgreSQL WAL archive files"], "environment": [], "manual_html": "<div><div class=\"refentry\" id=\"PGARCHIVECLEANUP\">\n<div class=\"titlepage\"></div>\n<div class=\"refnamediv\">\n<h2><span class=\"refentrytitle\"><span class=\"application\">pg_archivecleanup</span></span></h2>\n<p>pg_archivecleanup \u2014 clean up <span class=\"productname\">PostgreSQL</span> WAL archive files</p>\n</div>\n<div class=\"refsynopsisdiv\">\n<h2>Synopsis</h2>\n<div class=\"cmdsynopsis\">\n<p id=\"id-1.9.5.4.4.1\"><code class=\"command\">pg_archivecleanup</code> [<em class=\"replaceable\"><code>option</code></em>...] <em class=\"replaceable\"><code>archivelocation</code></em> <em class=\"replaceable\"><code>oldestkeptwalfile</code></em></p>\n</div>\n</div>\n<div class=\"refsect1\" id=\"id-1.9.5.4.5\">\n<h2>Description</h2>\n<p><span class=\"application\">pg_archivecleanup</span> is designed to be used as an <code class=\"literal\">archive_cleanup_command</code> to clean up WAL file archives when running as a standby server (see <a class=\"xref\" href=\"/docs/18/warm-standby.html\" title=\"26.2.\u00a0Log-Shipping Standby Servers\">Section\u00a026.2</a>). <span class=\"application\">pg_archivecleanup</span> can also be used as a standalone program to clean WAL file archives.</p>\n<p>To configure a standby server to use <span class=\"application\">pg_archivecleanup</span>, put this into its <code class=\"filename\">postgresql.conf</code> configuration file:</p>\n<pre class=\"programlisting\">archive_cleanup_command = 'pg_archivecleanup <em class=\"replaceable\"><code>archivelocation</code></em> %r'\n</pre>\n<p>where <em class=\"replaceable\"><code>archivelocation</code></em> is the directory from which WAL segment files should be removed.</p>\n<p>When used within <a class=\"xref\" href=\"/docs/18/runtime-config-wal.html#GUC-ARCHIVE-CLEANUP-COMMAND\">archive_cleanup_command</a>, all WAL files logically preceding the value of the <code class=\"literal\">%r</code> argument will be removed from <em class=\"replaceable\"><code>archivelocation</code></em>. This minimizes the number of files that need to be retained, while preserving crash-restart capability. Use of this parameter is appropriate if the <em class=\"replaceable\"><code>archivelocation</code></em> is a transient staging area for this particular standby server, but <span class=\"emphasis\"><em>not</em></span> when the <em class=\"replaceable\"><code>archivelocation</code></em> is intended as a long-term WAL archive area, or when multiple standby servers are recovering from the same archive location.</p>\n<p>When used as a standalone program all WAL files logically preceding the <em class=\"replaceable\"><code>oldestkeptwalfile</code></em> will be removed from <em class=\"replaceable\"><code>archivelocation</code></em>. In this mode, if you specify a <code class=\"filename\">.partial</code> or <code class=\"filename\">.backup</code> file name, then only the file prefix will be used as the <em class=\"replaceable\"><code>oldestkeptwalfile</code></em>. This treatment of <code class=\"filename\">.backup</code> file name allows you to remove all WAL files archived prior to a specific base backup without error. For example, the following example will remove all files older than WAL file name <code class=\"filename\">000000010000003700000010</code>:</p>\n<pre class=\"programlisting\">pg_archivecleanup -d archive 000000010000003700000010.00000020.backup\n\npg_archivecleanup:  keep WAL file \"archive/000000010000003700000010\" and later\npg_archivecleanup:  removing file \"archive/00000001000000370000000F\"\npg_archivecleanup:  removing file \"archive/00000001000000370000000E\"\n</pre>\n<p><span class=\"application\">pg_archivecleanup</span> assumes that <em class=\"replaceable\"><code>archivelocation</code></em> is a directory readable and writable by the server-owning user.</p>\n</div>\n<div class=\"refsect1\" id=\"id-1.9.5.4.6\">\n<h2>Options</h2>\n<p><span class=\"application\">pg_archivecleanup</span> accepts the following command-line arguments:</p>\n<div class=\"variablelist\">\n<dl class=\"variablelist\">\n<dt><span class=\"term\"><code class=\"option\">-b</code><br></span><span class=\"term\"><code class=\"option\">--clean-backup-history</code></span></dt>\n<dd>\n<p>Remove backup history files as well. See <a class=\"xref\" href=\"/docs/18/continuous-archiving.html#BACKUP-BASE-BACKUP\" title=\"25.3.2.\u00a0Making a Base Backup\">Section\u00a025.3.2</a> for details about backup history files.</p>\n</dd>\n<dt><span class=\"term\"><code class=\"option\">-d</code><br></span><span class=\"term\"><code class=\"option\">--debug</code></span></dt>\n<dd>\n<p>Print lots of debug logging output on <code class=\"filename\">stderr</code>.</p>\n</dd>\n<dt><span class=\"term\"><code class=\"option\">-n</code><br></span><span class=\"term\"><code class=\"option\">--dry-run</code></span></dt>\n<dd>\n<p>Print the names of the files that would have been removed on <code class=\"filename\">stdout</code> (performs a dry run).</p>\n</dd>\n<dt><span class=\"term\"><code class=\"option\">-V</code><br></span><span class=\"term\"><code class=\"option\">--version</code></span></dt>\n<dd>\n<p>Print the <span class=\"application\">pg_archivecleanup</span> version and exit.</p>\n</dd>\n<dt><span class=\"term\"><code class=\"option\">-x <em class=\"replaceable\"><code>extension</code></em></code><br></span><span class=\"term\"><code class=\"option\">--strip-extension=<em class=\"replaceable\"><code>extension</code></em></code></span></dt>\n<dd>\n<p>Provide an extension that will be stripped from all file names before deciding if they should be deleted. This is typically useful for cleaning up archives that have been compressed during storage, and therefore have had an extension added by the compression program. For example: <code class=\"literal\">-x .gz</code>.</p>\n</dd>\n<dt><span class=\"term\"><code class=\"option\">-?</code><br></span><span class=\"term\"><code class=\"option\">--help</code></span></dt>\n<dd>\n<p>Show help about <span class=\"application\">pg_archivecleanup</span> command line arguments, and exit.</p>\n</dd>\n</dl>\n</div>\n</div>\n<div class=\"refsect1\" id=\"id-1.9.5.4.7\">\n<h2>Environment</h2>\n<p>The environment variable <code class=\"envar\">PG_COLOR</code> specifies whether to use color in diagnostic messages. Possible values are <code class=\"literal\">always</code>, <code class=\"literal\">auto</code> and <code class=\"literal\">never</code>.</p>\n</div>\n<div class=\"refsect1\" id=\"id-1.9.5.4.8\">\n<h2>Notes</h2>\n<p><span class=\"application\">pg_archivecleanup</span> is designed to work with <span class=\"productname\">PostgreSQL</span> 8.0 and later when used as a standalone utility, or with <span class=\"productname\">PostgreSQL</span> 9.0 and later when used as an archive cleanup command.</p>\n<p><span class=\"application\">pg_archivecleanup</span> is written in C and has an easy-to-modify source code, with specifically designated sections to modify for your own needs</p>\n</div>\n<div class=\"refsect1\" id=\"id-1.9.5.4.9\">\n<h2>Examples</h2>\n<p>On Linux or Unix systems, you might use:</p>\n<pre class=\"programlisting\">archive_cleanup_command = 'pg_archivecleanup -d /mnt/standby/archive %r 2&gt;&gt;cleanup.log'\n</pre>\n<p>where the archive directory is physically located on the standby server, so that the <code class=\"varname\">archive_command</code> is accessing it across NFS, but the files are local to the standby. This will:</p>\n<div class=\"itemizedlist\">\n<ul class=\"itemizedlist\">\n<li class=\"listitem\">\n<p>produce debugging output in <code class=\"filename\">cleanup.log</code></p>\n</li>\n<li class=\"listitem\">\n<p>remove no-longer-needed files from the archive directory</p>\n</li>\n</ul>\n</div>\n</div>\n</div></div>", "manual_path": "pgarchivecleanup.html", "comparison_data": {"options": [{"names": ["-b", "--clean-backup-history"], "signature": "-b --clean-backup-history", "description": "Remove backup history files as well. See Section 25.3.2 for details about backup history files."}, {"names": ["-d", "--debug"], "signature": "-d --debug", "description": "Print lots of debug logging output on stderr ."}, {"names": ["-n", "--dry-run"], "signature": "-n --dry-run", "description": "Print the names of the files that would have been removed on stdout (performs a dry run)."}, {"names": ["-V", "--version"], "signature": "-V --version", "description": "Print the pg_archivecleanup version and exit."}, {"names": ["-x extension", "--strip-extension= extension"], "signature": "-x extension --strip-extension= extension", "description": "Provide an extension that will be stripped from all file names before deciding if they should be deleted. This is typically useful for cleaning up archives that have been compressed during storage, and therefore have had an extension added by the compression program. For example: -x .gz ."}, {"names": ["-?", "--help"], "signature": "-? --help", "description": "Show help about pg_archivecleanup command line arguments, and exit."}], "synopsis": ["pg_archivecleanup [ option ...] archivelocation oldestkeptwalfile"], "environment": []}, "comparison_hash": "18d66c08cf423bd426b6c3ea916de5ab0a2b1ae3ecbe75bc0b1efbbf13ec32db"}, "19": {"facts": [{"label": "Documented executable", "value": "pg_archivecleanup"}, {"label": "Executable version", "value": "19beta4"}, {"label": "Reference inventory", "value": "Server applications"}, {"label": "Option definition groups", "value": "6"}], "tables": [{"key": "options", "rows": [{"summary": "Remove backup history files as well. See Section 25.3.2 for details about backup history files.", "signature": {"url": "/docs/19/pgarchivecleanup.html", "text": "-b --clean-backup-history"}}, {"summary": "Print lots of debug logging output on stderr .", "signature": {"url": "/docs/19/pgarchivecleanup.html", "text": "-d --debug"}}, {"summary": "Print the names of the files that would have been removed on stdout (performs a dry run).", "signature": {"url": "/docs/19/pgarchivecleanup.html", "text": "-n --dry-run"}}, {"summary": "Print the pg_archivecleanup version and exit.", "signature": {"url": "/docs/19/pgarchivecleanup.html", "text": "-V --version"}}, {"summary": "Provide an extension that will be stripped from all file names before deciding if they should be deleted. This is typically useful for cleaning up archives that have been compressed during storage, and therefore have had an extension added by the compression program. For example: -x .gz .", "signature": {"url": "/docs/19/pgarchivecleanup.html", "text": "-x extension --strip-extension= extension"}}, {"summary": "Show help about pg_archivecleanup command line arguments, and exit.", "signature": {"url": "/docs/19/pgarchivecleanup.html", "text": "-? --help"}}], "title": "Documented options", "columns": [{"key": "signature", "label": "Option and arguments"}, {"key": "summary", "label": "Description"}]}], "options": [{"names": ["-b", "--clean-backup-history"], "summary": "Remove backup history files as well. See Section 25.3.2 for details about backup history files.", "signature": "-b --clean-backup-history", "source_url": "/docs/19/pgarchivecleanup.html", "description": "Remove backup history files as well. See Section 25.3.2 for details about backup history files."}, {"names": ["-d", "--debug"], "summary": "Print lots of debug logging output on stderr .", "signature": "-d --debug", "source_url": "/docs/19/pgarchivecleanup.html", "description": "Print lots of debug logging output on stderr ."}, {"names": ["-n", "--dry-run"], "summary": "Print the names of the files that would have been removed on stdout (performs a dry run).", "signature": "-n --dry-run", "source_url": "/docs/19/pgarchivecleanup.html", "description": "Print the names of the files that would have been removed on stdout (performs a dry run)."}, {"names": ["-V", "--version"], "summary": "Print the pg_archivecleanup version and exit.", "signature": "-V --version", "source_url": "/docs/19/pgarchivecleanup.html", "description": "Print the pg_archivecleanup version and exit."}, {"names": ["-x extension", "--strip-extension= extension"], "summary": "Provide an extension that will be stripped from all file names before deciding if they should be deleted. This is typically useful for cleaning up archives that have been compressed during storage, and therefore have had an extension added by the compression program. For example: -x .gz .", "signature": "-x extension --strip-extension= extension", "source_url": "/docs/19/pgarchivecleanup.html", "description": "Provide an extension that will be stripped from all file names before deciding if they should be deleted. This is typically useful for cleaning up archives that have been compressed during storage, and therefore have had an extension added by the compression program. For example: -x .gz ."}, {"names": ["-?", "--help"], "summary": "Show help about pg_archivecleanup command line arguments, and exit.", "signature": "-? --help", "source_url": "/docs/19/pgarchivecleanup.html", "description": "Show help about pg_archivecleanup command line arguments, and exit."}], "related": [], "release": {"ref": "https://ftp.postgresql.org/pub/source/v19beta4/postgresql-19beta4.tar.bz2", "label": "19beta4", "major": "19", "channel": "preview", "manifest": {"pdf": {"A4": {"url": "/files/documentation/pdf/19/postgresql-19-A4.pdf", "bytes": 16064841, "pages": 3052, "sha256": "4dd099e4125c591128fc5f3ebd02178dc24781f9e5ae629f96d67c4c8547427b", "built_at": "2026-09-26"}, "US": {"url": "/files/documentation/pdf/19/postgresql-19-US.pdf", "bytes": 15974616, "pages": 3225, "sha256": "61971fa857f0956d47341a0388fa6af9ae10acf691d4b2fc009007d384b0342b", "built_at": "2026-09-26"}}, "tree": "19", "index": "index.html", "major": "19", "pages": 1155, "release": "19beta4", "source_url": "https://ftp.postgresql.org/pub/source/v19beta4/postgresql-19beta4.tar.bz2", "svg_assets": 5, "source_mode": "en SGML built with pinned official archive", "source_sha256": "83157ee9c599d03b2f7a3d73ef3a56ec24e0e79cc2b3501a64d1364f56398c86"}, "revision": "1bbbbf4133d426f0e4304010688d2984c30fb67df0cc3a61b3e37eb3f6f37833", "evidence_kind": "English manual and source declarations", "source_sha256": "83157ee9c599d03b2f7a3d73ef3a56ec24e0e79cc2b3501a64d1364f56398c86"}, "sources": [{"url": "/docs/19/pgarchivecleanup.html", "file": "pgarchivecleanup.html", "label": "19beta4 English manual \u00b7 pgarchivecleanup.html", "anchor": "", "sha256": "38d920a5c710e1ac604e5d1953534af8ff8b0f2c8bd3b723ec780621e7bb3cfb"}, {"url": "/docs/19/reference-server.html", "file": "reference-server.html", "label": "Server applications inventory", "anchor": "", "sha256": "425b070323b448b5516d2cb4e9e4ac77efb5d19dd4e8005d0ae1c61db9ec78e6"}], "sections": [], "synopsis": ["pg_archivecleanup [ option ...] archivelocation oldestkeptwalfile"], "signature": "pg_archivecleanup [ option ...] archivelocation oldestkeptwalfile", "description": ["pg_archivecleanup \u2014 clean up PostgreSQL WAL archive files"], "environment": [], "manual_html": "<div><div class=\"refentry\" id=\"PGARCHIVECLEANUP\">\n<div class=\"titlepage\"></div>\n<div class=\"refnamediv\">\n<h2><span class=\"refentrytitle\"><span class=\"application\">pg_archivecleanup</span></span></h2>\n<p>pg_archivecleanup \u2014 clean up <span class=\"productname\">PostgreSQL</span> WAL archive files</p>\n</div>\n<div class=\"refsynopsisdiv\">\n<h2>Synopsis</h2>\n<div class=\"cmdsynopsis\">\n<p id=\"id-1.9.5.4.4.1\"><code class=\"command\">pg_archivecleanup</code> [<em class=\"replaceable\"><code>option</code></em>...] <em class=\"replaceable\"><code>archivelocation</code></em> <em class=\"replaceable\"><code>oldestkeptwalfile</code></em></p>\n</div>\n</div>\n<div class=\"refsect1\" id=\"id-1.9.5.4.5\">\n<h2>Description</h2>\n<p><span class=\"application\">pg_archivecleanup</span> is designed to be used as an <code class=\"literal\">archive_cleanup_command</code> to clean up WAL file archives when running as a standby server (see <a class=\"xref\" href=\"/docs/19/warm-standby.html\" title=\"26.2.\u00a0Log-Shipping Standby Servers\">Section\u00a026.2</a>). <span class=\"application\">pg_archivecleanup</span> can also be used as a standalone program to clean WAL file archives.</p>\n<p>To configure a standby server to use <span class=\"application\">pg_archivecleanup</span>, put this into its <code class=\"filename\">postgresql.conf</code> configuration file:</p>\n<pre class=\"programlisting\">archive_cleanup_command = 'pg_archivecleanup <em class=\"replaceable\"><code>archivelocation</code></em> \"%r\"'\n</pre>\n<p>where <em class=\"replaceable\"><code>archivelocation</code></em> is the directory from which WAL segment files should be removed.</p>\n<p>When used within <a class=\"xref\" href=\"/docs/19/runtime-config-wal.html#GUC-ARCHIVE-CLEANUP-COMMAND\">archive_cleanup_command</a>, all WAL files logically preceding the value of the <code class=\"literal\">%r</code> argument will be removed from <em class=\"replaceable\"><code>archivelocation</code></em>. This minimizes the number of files that need to be retained, while preserving crash-restart capability. Use of this parameter is appropriate if the <em class=\"replaceable\"><code>archivelocation</code></em> is a transient staging area for this particular standby server, but <span class=\"emphasis\"><em>not</em></span> when the <em class=\"replaceable\"><code>archivelocation</code></em> is intended as a long-term WAL archive area, or when multiple standby servers are recovering from the same archive location.</p>\n<p>When used as a standalone program all WAL files logically preceding the <em class=\"replaceable\"><code>oldestkeptwalfile</code></em> will be removed from <em class=\"replaceable\"><code>archivelocation</code></em>. In this mode, if you specify a <code class=\"filename\">.partial</code> or <code class=\"filename\">.backup</code> file name, then only the file prefix will be used as the <em class=\"replaceable\"><code>oldestkeptwalfile</code></em>. This treatment of <code class=\"filename\">.backup</code> file name allows you to remove all WAL files archived prior to a specific base backup without error. For example, the following example will remove all files older than WAL file name <code class=\"filename\">000000010000003700000010</code>:</p>\n<pre class=\"programlisting\">pg_archivecleanup -d archive 000000010000003700000010.00000020.backup\n\npg_archivecleanup:  keep WAL file \"archive/000000010000003700000010\" and later\npg_archivecleanup:  removing file \"archive/00000001000000370000000F\"\npg_archivecleanup:  removing file \"archive/00000001000000370000000E\"\n</pre>\n<p><span class=\"application\">pg_archivecleanup</span> assumes that <em class=\"replaceable\"><code>archivelocation</code></em> is a directory readable and writable by the server-owning user.</p>\n</div>\n<div class=\"refsect1\" id=\"id-1.9.5.4.6\">\n<h2>Options</h2>\n<p><span class=\"application\">pg_archivecleanup</span> accepts the following command-line arguments:</p>\n<div class=\"variablelist\">\n<dl class=\"variablelist\">\n<dt><span class=\"term\"><code class=\"option\">-b</code><br></span><span class=\"term\"><code class=\"option\">--clean-backup-history</code></span></dt>\n<dd>\n<p>Remove backup history files as well. See <a class=\"xref\" href=\"/docs/19/continuous-archiving.html#BACKUP-BASE-BACKUP\" title=\"25.3.2.\u00a0Making a Base Backup\">Section\u00a025.3.2</a> for details about backup history files.</p>\n</dd>\n<dt><span class=\"term\"><code class=\"option\">-d</code><br></span><span class=\"term\"><code class=\"option\">--debug</code></span></dt>\n<dd>\n<p>Print lots of debug logging output on <code class=\"filename\">stderr</code>.</p>\n</dd>\n<dt><span class=\"term\"><code class=\"option\">-n</code><br></span><span class=\"term\"><code class=\"option\">--dry-run</code></span></dt>\n<dd>\n<p>Print the names of the files that would have been removed on <code class=\"filename\">stdout</code> (performs a dry run).</p>\n</dd>\n<dt><span class=\"term\"><code class=\"option\">-V</code><br></span><span class=\"term\"><code class=\"option\">--version</code></span></dt>\n<dd>\n<p>Print the <span class=\"application\">pg_archivecleanup</span> version and exit.</p>\n</dd>\n<dt><span class=\"term\"><code class=\"option\">-x <em class=\"replaceable\"><code>extension</code></em></code><br></span><span class=\"term\"><code class=\"option\">--strip-extension=<em class=\"replaceable\"><code>extension</code></em></code></span></dt>\n<dd>\n<p>Provide an extension that will be stripped from all file names before deciding if they should be deleted. This is typically useful for cleaning up archives that have been compressed during storage, and therefore have had an extension added by the compression program. For example: <code class=\"literal\">-x .gz</code>.</p>\n</dd>\n<dt><span class=\"term\"><code class=\"option\">-?</code><br></span><span class=\"term\"><code class=\"option\">--help</code></span></dt>\n<dd>\n<p>Show help about <span class=\"application\">pg_archivecleanup</span> command line arguments, and exit.</p>\n</dd>\n</dl>\n</div>\n</div>\n<div class=\"refsect1\" id=\"id-1.9.5.4.7\">\n<h2>Environment</h2>\n<p>The environment variable <code class=\"envar\">PG_COLOR</code> specifies whether to use color in diagnostic messages. Possible values are <code class=\"literal\">always</code>, <code class=\"literal\">auto</code> and <code class=\"literal\">never</code>.</p>\n</div>\n<div class=\"refsect1\" id=\"id-1.9.5.4.8\">\n<h2>Notes</h2>\n<p><span class=\"application\">pg_archivecleanup</span> is designed to work with <span class=\"productname\">PostgreSQL</span> 8.0 and later when used as a standalone utility, or with <span class=\"productname\">PostgreSQL</span> 9.0 and later when used as an archive cleanup command.</p>\n<p><span class=\"application\">pg_archivecleanup</span> is written in C and has an easy-to-modify source code, with specifically designated sections to modify for your own needs</p>\n</div>\n<div class=\"refsect1\" id=\"id-1.9.5.4.9\">\n<h2>Examples</h2>\n<p>On Linux or Unix systems, you might use:</p>\n<pre class=\"programlisting\">archive_cleanup_command = 'pg_archivecleanup -d /mnt/standby/archive \"%r\" 2&gt;&gt;cleanup.log'\n</pre>\n<p>where the archive directory is physically located on the standby server, so that the <code class=\"varname\">archive_command</code> is accessing it across NFS, but the files are local to the standby. This will:</p>\n<div class=\"itemizedlist\">\n<ul class=\"itemizedlist\">\n<li class=\"listitem\">\n<p>produce debugging output in <code class=\"filename\">cleanup.log</code></p>\n</li>\n<li class=\"listitem\">\n<p>remove no-longer-needed files from the archive directory</p>\n</li>\n</ul>\n</div>\n</div>\n</div></div>", "manual_path": "pgarchivecleanup.html", "comparison_data": {"options": [{"names": ["-b", "--clean-backup-history"], "signature": "-b --clean-backup-history", "description": "Remove backup history files as well. See Section 25.3.2 for details about backup history files."}, {"names": ["-d", "--debug"], "signature": "-d --debug", "description": "Print lots of debug logging output on stderr ."}, {"names": ["-n", "--dry-run"], "signature": "-n --dry-run", "description": "Print the names of the files that would have been removed on stdout (performs a dry run)."}, {"names": ["-V", "--version"], "signature": "-V --version", "description": "Print the pg_archivecleanup version and exit."}, {"names": ["-x extension", "--strip-extension= extension"], "signature": "-x extension --strip-extension= extension", "description": "Provide an extension that will be stripped from all file names before deciding if they should be deleted. This is typically useful for cleaning up archives that have been compressed during storage, and therefore have had an extension added by the compression program. For example: -x .gz ."}, {"names": ["-?", "--help"], "signature": "-? --help", "description": "Show help about pg_archivecleanup command line arguments, and exit."}], "synopsis": ["pg_archivecleanup [ option ...] archivelocation oldestkeptwalfile"], "environment": []}, "comparison_hash": "18d66c08cf423bd426b6c3ea916de5ab0a2b1ae3ecbe75bc0b1efbbf13ec32db"}, "20": {"facts": [{"label": "Documented executable", "value": "pg_archivecleanup"}, {"label": "Executable version", "value": "20devel"}, {"label": "Reference inventory", "value": "Server applications"}, {"label": "Option definition groups", "value": "6"}], "tables": [{"key": "options", "rows": [{"summary": "Remove backup history files as well. See Section 25.3.2 for details about backup history files.", "signature": {"url": "/docs/devel/pgarchivecleanup.html", "text": "-b --clean-backup-history"}}, {"summary": "Print lots of debug logging output on stderr .", "signature": {"url": "/docs/devel/pgarchivecleanup.html", "text": "-d --debug"}}, {"summary": "Print the names of the files that would have been removed on stdout (performs a dry run).", "signature": {"url": "/docs/devel/pgarchivecleanup.html", "text": "-n --dry-run"}}, {"summary": "Print the pg_archivecleanup version and exit.", "signature": {"url": "/docs/devel/pgarchivecleanup.html", "text": "-V --version"}}, {"summary": "Provide an extension that will be stripped from all file names before deciding if they should be deleted. This is typically useful for cleaning up archives that have been compressed during storage, and therefore have had an extension added by the compression program. For example: -x .gz .", "signature": {"url": "/docs/devel/pgarchivecleanup.html", "text": "-x extension --strip-extension= extension"}}, {"summary": "Show help about pg_archivecleanup command line arguments, and exit.", "signature": {"url": "/docs/devel/pgarchivecleanup.html", "text": "-? --help"}}], "title": "Documented options", "columns": [{"key": "signature", "label": "Option and arguments"}, {"key": "summary", "label": "Description"}]}], "options": [{"names": ["-b", "--clean-backup-history"], "summary": "Remove backup history files as well. See Section 25.3.2 for details about backup history files.", "signature": "-b --clean-backup-history", "source_url": "/docs/devel/pgarchivecleanup.html", "description": "Remove backup history files as well. See Section 25.3.2 for details about backup history files."}, {"names": ["-d", "--debug"], "summary": "Print lots of debug logging output on stderr .", "signature": "-d --debug", "source_url": "/docs/devel/pgarchivecleanup.html", "description": "Print lots of debug logging output on stderr ."}, {"names": ["-n", "--dry-run"], "summary": "Print the names of the files that would have been removed on stdout (performs a dry run).", "signature": "-n --dry-run", "source_url": "/docs/devel/pgarchivecleanup.html", "description": "Print the names of the files that would have been removed on stdout (performs a dry run)."}, {"names": ["-V", "--version"], "summary": "Print the pg_archivecleanup version and exit.", "signature": "-V --version", "source_url": "/docs/devel/pgarchivecleanup.html", "description": "Print the pg_archivecleanup version and exit."}, {"names": ["-x extension", "--strip-extension= extension"], "summary": "Provide an extension that will be stripped from all file names before deciding if they should be deleted. This is typically useful for cleaning up archives that have been compressed during storage, and therefore have had an extension added by the compression program. For example: -x .gz .", "signature": "-x extension --strip-extension= extension", "source_url": "/docs/devel/pgarchivecleanup.html", "description": "Provide an extension that will be stripped from all file names before deciding if they should be deleted. This is typically useful for cleaning up archives that have been compressed during storage, and therefore have had an extension added by the compression program. For example: -x .gz ."}, {"names": ["-?", "--help"], "summary": "Show help about pg_archivecleanup command line arguments, and exit.", "signature": "-? --help", "source_url": "/docs/devel/pgarchivecleanup.html", "description": "Show help about pg_archivecleanup command line arguments, and exit."}], "related": [], "release": {"ref": "https://ftp.postgresql.org/pub/snapshot/dev/postgresql-snapshot.tar.bz2", "label": "20devel", "major": "20", "channel": "devel", "manifest": {"pdf": {"A4": {"url": "/files/documentation/pdf/20/postgresql-20-A4.pdf", "bytes": 16030631, "pages": 3052, "sha256": "bd5d82c0ce38fc18f92a0447818a91a193a261776bca1c37564bf9a683e177d0", "built_at": "2026-09-28"}, "US": {"url": "/files/documentation/pdf/20/postgresql-20-US.pdf", "bytes": 15936613, "pages": 3223, "sha256": "d97d9e0db479a02f4234b175f50fcad70c3661619afc8d6df9b9437882e3c299", "built_at": "2026-09-28"}}, "tree": "0", "index": "index.html", "major": "20", "pages": 1156, "release": "20devel", "source_url": "https://ftp.postgresql.org/pub/snapshot/dev/postgresql-snapshot.tar.bz2", "svg_assets": 6, "source_mode": "en SGML built with pinned official archive", "source_sha256": "4d3346909b201ac1648232cf290462a7070c119326f56196f1f0253ed80fae41", "source_snapshot_utc": "26-Sep-2026 20:22"}, "revision": "2eba5e0fd4c3bffb2803247b6cd537878e9d6ee5a6dfbe3c50ece8b421b80918", "evidence_kind": "English manual and source declarations", "source_sha256": "4d3346909b201ac1648232cf290462a7070c119326f56196f1f0253ed80fae41"}, "sources": [{"url": "/docs/devel/pgarchivecleanup.html", "file": "pgarchivecleanup.html", "label": "20devel English manual \u00b7 pgarchivecleanup.html", "anchor": "", "sha256": "166a818b711f1ccb41a984c200fcae8e4ab6012abeffe2f82e4806b7c76f8652"}, {"url": "/docs/devel/reference-server.html", "file": "reference-server.html", "label": "Server applications inventory", "anchor": "", "sha256": "5532c1ebfb8c6f310301be63a28daf0ae212e2a78025bea61a1bdca99e02c43d"}], "sections": [], "synopsis": ["pg_archivecleanup [ option ...] archivelocation oldestkeptwalfile"], "signature": "pg_archivecleanup [ option ...] archivelocation oldestkeptwalfile", "description": ["pg_archivecleanup \u2014 clean up PostgreSQL WAL archive files"], "environment": [], "manual_html": "<div><div class=\"refentry\" id=\"PGARCHIVECLEANUP\">\n<div class=\"titlepage\"></div>\n<div class=\"refnamediv\">\n<h2><span class=\"refentrytitle\"><span class=\"application\">pg_archivecleanup</span></span></h2>\n<p>pg_archivecleanup \u2014 clean up <span class=\"productname\">PostgreSQL</span> WAL archive files</p>\n</div>\n<div class=\"refsynopsisdiv\">\n<h2>Synopsis</h2>\n<div class=\"cmdsynopsis\">\n<p id=\"id-1.9.5.4.4.1\"><code class=\"command\">pg_archivecleanup</code> [<em class=\"replaceable\"><code>option</code></em>...] <em class=\"replaceable\"><code>archivelocation</code></em> <em class=\"replaceable\"><code>oldestkeptwalfile</code></em></p>\n</div>\n</div>\n<div class=\"refsect1\" id=\"id-1.9.5.4.5\">\n<h2>Description</h2>\n<p><span class=\"application\">pg_archivecleanup</span> is designed to be used as an <code class=\"literal\">archive_cleanup_command</code> to clean up WAL file archives when running as a standby server (see <a class=\"xref\" href=\"/docs/devel/warm-standby.html\" title=\"26.2.\u00a0Log-Shipping Standby Servers\">Section\u00a026.2</a>). <span class=\"application\">pg_archivecleanup</span> can also be used as a standalone program to clean WAL file archives.</p>\n<p>To configure a standby server to use <span class=\"application\">pg_archivecleanup</span>, put this into its <code class=\"filename\">postgresql.conf</code> configuration file:</p>\n<pre class=\"programlisting\">archive_cleanup_command = 'pg_archivecleanup <em class=\"replaceable\"><code>archivelocation</code></em> \"%r\"'\n</pre>\n<p>where <em class=\"replaceable\"><code>archivelocation</code></em> is the directory from which WAL segment files should be removed.</p>\n<p>When used within <a class=\"xref\" href=\"/docs/devel/runtime-config-wal.html#GUC-ARCHIVE-CLEANUP-COMMAND\">archive_cleanup_command</a>, all WAL files logically preceding the value of the <code class=\"literal\">%r</code> argument will be removed from <em class=\"replaceable\"><code>archivelocation</code></em>. This minimizes the number of files that need to be retained, while preserving crash-restart capability. Use of this parameter is appropriate if the <em class=\"replaceable\"><code>archivelocation</code></em> is a transient staging area for this particular standby server, but <span class=\"emphasis\"><em>not</em></span> when the <em class=\"replaceable\"><code>archivelocation</code></em> is intended as a long-term WAL archive area, or when multiple standby servers are recovering from the same archive location.</p>\n<p>When used as a standalone program all WAL files logically preceding the <em class=\"replaceable\"><code>oldestkeptwalfile</code></em> will be removed from <em class=\"replaceable\"><code>archivelocation</code></em>. In this mode, if you specify a <code class=\"filename\">.partial</code> or <code class=\"filename\">.backup</code> file name, then only the file prefix will be used as the <em class=\"replaceable\"><code>oldestkeptwalfile</code></em>. This treatment of <code class=\"filename\">.backup</code> file name allows you to remove all WAL files archived prior to a specific base backup without error. For example, the following example will remove all files older than WAL file name <code class=\"filename\">000000010000003700000010</code>:</p>\n<pre class=\"programlisting\">pg_archivecleanup -d archive 000000010000003700000010.00000020.backup\n\npg_archivecleanup:  keep WAL file \"archive/000000010000003700000010\" and later\npg_archivecleanup:  removing file \"archive/00000001000000370000000F\"\npg_archivecleanup:  removing file \"archive/00000001000000370000000E\"\n</pre>\n<p><span class=\"application\">pg_archivecleanup</span> assumes that <em class=\"replaceable\"><code>archivelocation</code></em> is a directory readable and writable by the server-owning user.</p>\n</div>\n<div class=\"refsect1\" id=\"id-1.9.5.4.6\">\n<h2>Options</h2>\n<p><span class=\"application\">pg_archivecleanup</span> accepts the following command-line arguments:</p>\n<div class=\"variablelist\">\n<dl class=\"variablelist\">\n<dt><span class=\"term\"><code class=\"option\">-b</code><br></span><span class=\"term\"><code class=\"option\">--clean-backup-history</code></span></dt>\n<dd>\n<p>Remove backup history files as well. See <a class=\"xref\" href=\"/docs/devel/continuous-archiving.html#BACKUP-BASE-BACKUP\" title=\"25.3.2.\u00a0Making a Base Backup\">Section\u00a025.3.2</a> for details about backup history files.</p>\n</dd>\n<dt><span class=\"term\"><code class=\"option\">-d</code><br></span><span class=\"term\"><code class=\"option\">--debug</code></span></dt>\n<dd>\n<p>Print lots of debug logging output on <code class=\"filename\">stderr</code>.</p>\n</dd>\n<dt><span class=\"term\"><code class=\"option\">-n</code><br></span><span class=\"term\"><code class=\"option\">--dry-run</code></span></dt>\n<dd>\n<p>Print the names of the files that would have been removed on <code class=\"filename\">stdout</code> (performs a dry run).</p>\n</dd>\n<dt><span class=\"term\"><code class=\"option\">-V</code><br></span><span class=\"term\"><code class=\"option\">--version</code></span></dt>\n<dd>\n<p>Print the <span class=\"application\">pg_archivecleanup</span> version and exit.</p>\n</dd>\n<dt><span class=\"term\"><code class=\"option\">-x <em class=\"replaceable\"><code>extension</code></em></code><br></span><span class=\"term\"><code class=\"option\">--strip-extension=<em class=\"replaceable\"><code>extension</code></em></code></span></dt>\n<dd>\n<p>Provide an extension that will be stripped from all file names before deciding if they should be deleted. This is typically useful for cleaning up archives that have been compressed during storage, and therefore have had an extension added by the compression program. For example: <code class=\"literal\">-x .gz</code>.</p>\n</dd>\n<dt><span class=\"term\"><code class=\"option\">-?</code><br></span><span class=\"term\"><code class=\"option\">--help</code></span></dt>\n<dd>\n<p>Show help about <span class=\"application\">pg_archivecleanup</span> command line arguments, and exit.</p>\n</dd>\n</dl>\n</div>\n</div>\n<div class=\"refsect1\" id=\"id-1.9.5.4.7\">\n<h2>Environment</h2>\n<p>The environment variable <code class=\"envar\">PG_COLOR</code> specifies whether to use color in diagnostic messages. Possible values are <code class=\"literal\">always</code>, <code class=\"literal\">auto</code> and <code class=\"literal\">never</code>.</p>\n</div>\n<div class=\"refsect1\" id=\"id-1.9.5.4.8\">\n<h2>Notes</h2>\n<p><span class=\"application\">pg_archivecleanup</span> is designed to work with <span class=\"productname\">PostgreSQL</span> 8.0 and later when used as a standalone utility, or with <span class=\"productname\">PostgreSQL</span> 9.0 and later when used as an archive cleanup command.</p>\n<p><span class=\"application\">pg_archivecleanup</span> is written in C and has an easy-to-modify source code, with specifically designated sections to modify for your own needs</p>\n</div>\n<div class=\"refsect1\" id=\"id-1.9.5.4.9\">\n<h2>Examples</h2>\n<p>On Linux or Unix systems, you might use:</p>\n<pre class=\"programlisting\">archive_cleanup_command = 'pg_archivecleanup -d /mnt/standby/archive \"%r\" 2&gt;&gt;cleanup.log'\n</pre>\n<p>where the archive directory is physically located on the standby server, so that the <code class=\"varname\">archive_command</code> is accessing it across NFS, but the files are local to the standby. This will:</p>\n<div class=\"itemizedlist\">\n<ul class=\"itemizedlist\">\n<li class=\"listitem\">\n<p>produce debugging output in <code class=\"filename\">cleanup.log</code></p>\n</li>\n<li class=\"listitem\">\n<p>remove no-longer-needed files from the archive directory</p>\n</li>\n</ul>\n</div>\n</div>\n</div></div>", "manual_path": "pgarchivecleanup.html", "comparison_data": {"options": [{"names": ["-b", "--clean-backup-history"], "signature": "-b --clean-backup-history", "description": "Remove backup history files as well. See Section 25.3.2 for details about backup history files."}, {"names": ["-d", "--debug"], "signature": "-d --debug", "description": "Print lots of debug logging output on stderr ."}, {"names": ["-n", "--dry-run"], "signature": "-n --dry-run", "description": "Print the names of the files that would have been removed on stdout (performs a dry run)."}, {"names": ["-V", "--version"], "signature": "-V --version", "description": "Print the pg_archivecleanup version and exit."}, {"names": ["-x extension", "--strip-extension= extension"], "signature": "-x extension --strip-extension= extension", "description": "Provide an extension that will be stripped from all file names before deciding if they should be deleted. This is typically useful for cleaning up archives that have been compressed during storage, and therefore have had an extension added by the compression program. For example: -x .gz ."}, {"names": ["-?", "--help"], "signature": "-? --help", "description": "Show help about pg_archivecleanup command line arguments, and exit."}], "synopsis": ["pg_archivecleanup [ option ...] archivelocation oldestkeptwalfile"], "environment": []}, "comparison_hash": "18d66c08cf423bd426b6c3ea916de5ab0a2b1ae3ecbe75bc0b1efbbf13ec32db"}}}, "snapshot": {"facts": [{"label": "Documented executable", "value": "pg_archivecleanup"}, {"label": "Executable version", "value": "18.6"}, {"label": "Reference inventory", "value": "Server applications"}, {"label": "Option definition groups", "value": "6"}], "tables": [{"key": "options", "rows": [{"summary": "Remove backup history files as well. See Section 25.3.2 for details about backup history files.", "signature": {"url": "/docs/18/pgarchivecleanup.html", "text": "-b --clean-backup-history"}}, {"summary": "Print lots of debug logging output on stderr .", "signature": {"url": "/docs/18/pgarchivecleanup.html", "text": "-d --debug"}}, {"summary": "Print the names of the files that would have been removed on stdout (performs a dry run).", "signature": {"url": "/docs/18/pgarchivecleanup.html", "text": "-n --dry-run"}}, {"summary": "Print the pg_archivecleanup version and exit.", "signature": {"url": "/docs/18/pgarchivecleanup.html", "text": "-V --version"}}, {"summary": "Provide an extension that will be stripped from all file names before deciding if they should be deleted. This is typically useful for cleaning up archives that have been compressed during storage, and therefore have had an extension added by the compression program. For example: -x .gz .", "signature": {"url": "/docs/18/pgarchivecleanup.html", "text": "-x extension --strip-extension= extension"}}, {"summary": "Show help about pg_archivecleanup command line arguments, and exit.", "signature": {"url": "/docs/18/pgarchivecleanup.html", "text": "-? --help"}}], "title": "Documented options", "columns": [{"key": "signature", "label": "Option and arguments"}, {"key": "summary", "label": "Description"}]}], "options": [{"names": ["-b", "--clean-backup-history"], "summary": "Remove backup history files as well. See Section 25.3.2 for details about backup history files.", "signature": "-b --clean-backup-history", "source_url": "/docs/18/pgarchivecleanup.html", "description": "Remove backup history files as well. See Section 25.3.2 for details about backup history files."}, {"names": ["-d", "--debug"], "summary": "Print lots of debug logging output on stderr .", "signature": "-d --debug", "source_url": "/docs/18/pgarchivecleanup.html", "description": "Print lots of debug logging output on stderr ."}, {"names": ["-n", "--dry-run"], "summary": "Print the names of the files that would have been removed on stdout (performs a dry run).", "signature": "-n --dry-run", "source_url": "/docs/18/pgarchivecleanup.html", "description": "Print the names of the files that would have been removed on stdout (performs a dry run)."}, {"names": ["-V", "--version"], "summary": "Print the pg_archivecleanup version and exit.", "signature": "-V --version", "source_url": "/docs/18/pgarchivecleanup.html", "description": "Print the pg_archivecleanup version and exit."}, {"names": ["-x extension", "--strip-extension= extension"], "summary": "Provide an extension that will be stripped from all file names before deciding if they should be deleted. This is typically useful for cleaning up archives that have been compressed during storage, and therefore have had an extension added by the compression program. For example: -x .gz .", "signature": "-x extension --strip-extension= extension", "source_url": "/docs/18/pgarchivecleanup.html", "description": "Provide an extension that will be stripped from all file names before deciding if they should be deleted. This is typically useful for cleaning up archives that have been compressed during storage, and therefore have had an extension added by the compression program. For example: -x .gz ."}, {"names": ["-?", "--help"], "summary": "Show help about pg_archivecleanup command line arguments, and exit.", "signature": "-? --help", "source_url": "/docs/18/pgarchivecleanup.html", "description": "Show help about pg_archivecleanup command line arguments, and exit."}], "related": [], "release": {"ref": "https://ftp.postgresql.org/pub/source/v18.6/postgresql-18.6.tar.bz2", "label": "18.6", "major": "18", "channel": "stable", "manifest": {"pdf": {"A4": {"url": "/files/documentation/pdf/18/postgresql-18-A4.pdf", "bytes": 15865106, "pages": 3154, "sha256": "19512c405da53f9f7fcf0abba359223aa65f021be025bf3411381918f92e3190", "built_at": "2026-09-26"}, "US": {"url": "/files/documentation/pdf/18/postgresql-18-US.pdf", "bytes": 15748059, "pages": 3328, "sha256": "facbe6c229e598b872d3d98bef53308f46e06746006fa4590de9a7de9dd46319", "built_at": "2026-09-26"}}, "tree": "18", "index": "index.html", "major": "18", "pages": 1148, "release": "18.6", "source_url": "https://ftp.postgresql.org/pub/source/v18.6/postgresql-18.6.tar.bz2", "svg_assets": 3, "source_mode": "en SGML built with pinned official archive", "source_sha256": "555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f"}, "revision": "ee8d1a3612338fd9adf250730cb640fcc5233b5491337cc00a316a44e3a0b9f8", "evidence_kind": "English manual and source declarations", "source_sha256": "555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f"}, "sources": [{"url": "/docs/18/pgarchivecleanup.html", "file": "pgarchivecleanup.html", "label": "18.6 English manual \u00b7 pgarchivecleanup.html", "anchor": "", "sha256": "430282b0bbc63a05afa75dce3a9f5abd25be1c155de79c0274537e341914d7b4"}, {"url": "/docs/18/reference-server.html", "file": "reference-server.html", "label": "Server applications inventory", "anchor": "", "sha256": "e9f8bbcc8e3641fadd1d20991e8aad6b532155b786ba5a1b7b364ec4f1a5bef3"}], "sections": [], "synopsis": ["pg_archivecleanup [ option ...] archivelocation oldestkeptwalfile"], "signature": "pg_archivecleanup [ option ...] archivelocation oldestkeptwalfile", "description": ["pg_archivecleanup \u2014 clean up PostgreSQL WAL archive files"], "environment": [], "manual_html": "<div><div class=\"refentry\" id=\"PGARCHIVECLEANUP\">\n<div class=\"titlepage\"></div>\n<div class=\"refnamediv\">\n<h2><span class=\"refentrytitle\"><span class=\"application\">pg_archivecleanup</span></span></h2>\n<p>pg_archivecleanup \u2014 clean up <span class=\"productname\">PostgreSQL</span> WAL archive files</p>\n</div>\n<div class=\"refsynopsisdiv\">\n<h2>Synopsis</h2>\n<div class=\"cmdsynopsis\">\n<p id=\"id-1.9.5.4.4.1\"><code class=\"command\">pg_archivecleanup</code> [<em class=\"replaceable\"><code>option</code></em>...] <em class=\"replaceable\"><code>archivelocation</code></em> <em class=\"replaceable\"><code>oldestkeptwalfile</code></em></p>\n</div>\n</div>\n<div class=\"refsect1\" id=\"id-1.9.5.4.5\">\n<h2>Description</h2>\n<p><span class=\"application\">pg_archivecleanup</span> is designed to be used as an <code class=\"literal\">archive_cleanup_command</code> to clean up WAL file archives when running as a standby server (see <a class=\"xref\" href=\"/docs/18/warm-standby.html\" title=\"26.2.\u00a0Log-Shipping Standby Servers\">Section\u00a026.2</a>). <span class=\"application\">pg_archivecleanup</span> can also be used as a standalone program to clean WAL file archives.</p>\n<p>To configure a standby server to use <span class=\"application\">pg_archivecleanup</span>, put this into its <code class=\"filename\">postgresql.conf</code> configuration file:</p>\n<pre class=\"programlisting\">archive_cleanup_command = 'pg_archivecleanup <em class=\"replaceable\"><code>archivelocation</code></em> %r'\n</pre>\n<p>where <em class=\"replaceable\"><code>archivelocation</code></em> is the directory from which WAL segment files should be removed.</p>\n<p>When used within <a class=\"xref\" href=\"/docs/18/runtime-config-wal.html#GUC-ARCHIVE-CLEANUP-COMMAND\">archive_cleanup_command</a>, all WAL files logically preceding the value of the <code class=\"literal\">%r</code> argument will be removed from <em class=\"replaceable\"><code>archivelocation</code></em>. This minimizes the number of files that need to be retained, while preserving crash-restart capability. Use of this parameter is appropriate if the <em class=\"replaceable\"><code>archivelocation</code></em> is a transient staging area for this particular standby server, but <span class=\"emphasis\"><em>not</em></span> when the <em class=\"replaceable\"><code>archivelocation</code></em> is intended as a long-term WAL archive area, or when multiple standby servers are recovering from the same archive location.</p>\n<p>When used as a standalone program all WAL files logically preceding the <em class=\"replaceable\"><code>oldestkeptwalfile</code></em> will be removed from <em class=\"replaceable\"><code>archivelocation</code></em>. In this mode, if you specify a <code class=\"filename\">.partial</code> or <code class=\"filename\">.backup</code> file name, then only the file prefix will be used as the <em class=\"replaceable\"><code>oldestkeptwalfile</code></em>. This treatment of <code class=\"filename\">.backup</code> file name allows you to remove all WAL files archived prior to a specific base backup without error. For example, the following example will remove all files older than WAL file name <code class=\"filename\">000000010000003700000010</code>:</p>\n<pre class=\"programlisting\">pg_archivecleanup -d archive 000000010000003700000010.00000020.backup\n\npg_archivecleanup:  keep WAL file \"archive/000000010000003700000010\" and later\npg_archivecleanup:  removing file \"archive/00000001000000370000000F\"\npg_archivecleanup:  removing file \"archive/00000001000000370000000E\"\n</pre>\n<p><span class=\"application\">pg_archivecleanup</span> assumes that <em class=\"replaceable\"><code>archivelocation</code></em> is a directory readable and writable by the server-owning user.</p>\n</div>\n<div class=\"refsect1\" id=\"id-1.9.5.4.6\">\n<h2>Options</h2>\n<p><span class=\"application\">pg_archivecleanup</span> accepts the following command-line arguments:</p>\n<div class=\"variablelist\">\n<dl class=\"variablelist\">\n<dt><span class=\"term\"><code class=\"option\">-b</code><br></span><span class=\"term\"><code class=\"option\">--clean-backup-history</code></span></dt>\n<dd>\n<p>Remove backup history files as well. See <a class=\"xref\" href=\"/docs/18/continuous-archiving.html#BACKUP-BASE-BACKUP\" title=\"25.3.2.\u00a0Making a Base Backup\">Section\u00a025.3.2</a> for details about backup history files.</p>\n</dd>\n<dt><span class=\"term\"><code class=\"option\">-d</code><br></span><span class=\"term\"><code class=\"option\">--debug</code></span></dt>\n<dd>\n<p>Print lots of debug logging output on <code class=\"filename\">stderr</code>.</p>\n</dd>\n<dt><span class=\"term\"><code class=\"option\">-n</code><br></span><span class=\"term\"><code class=\"option\">--dry-run</code></span></dt>\n<dd>\n<p>Print the names of the files that would have been removed on <code class=\"filename\">stdout</code> (performs a dry run).</p>\n</dd>\n<dt><span class=\"term\"><code class=\"option\">-V</code><br></span><span class=\"term\"><code class=\"option\">--version</code></span></dt>\n<dd>\n<p>Print the <span class=\"application\">pg_archivecleanup</span> version and exit.</p>\n</dd>\n<dt><span class=\"term\"><code class=\"option\">-x <em class=\"replaceable\"><code>extension</code></em></code><br></span><span class=\"term\"><code class=\"option\">--strip-extension=<em class=\"replaceable\"><code>extension</code></em></code></span></dt>\n<dd>\n<p>Provide an extension that will be stripped from all file names before deciding if they should be deleted. This is typically useful for cleaning up archives that have been compressed during storage, and therefore have had an extension added by the compression program. For example: <code class=\"literal\">-x .gz</code>.</p>\n</dd>\n<dt><span class=\"term\"><code class=\"option\">-?</code><br></span><span class=\"term\"><code class=\"option\">--help</code></span></dt>\n<dd>\n<p>Show help about <span class=\"application\">pg_archivecleanup</span> command line arguments, and exit.</p>\n</dd>\n</dl>\n</div>\n</div>\n<div class=\"refsect1\" id=\"id-1.9.5.4.7\">\n<h2>Environment</h2>\n<p>The environment variable <code class=\"envar\">PG_COLOR</code> specifies whether to use color in diagnostic messages. Possible values are <code class=\"literal\">always</code>, <code class=\"literal\">auto</code> and <code class=\"literal\">never</code>.</p>\n</div>\n<div class=\"refsect1\" id=\"id-1.9.5.4.8\">\n<h2>Notes</h2>\n<p><span class=\"application\">pg_archivecleanup</span> is designed to work with <span class=\"productname\">PostgreSQL</span> 8.0 and later when used as a standalone utility, or with <span class=\"productname\">PostgreSQL</span> 9.0 and later when used as an archive cleanup command.</p>\n<p><span class=\"application\">pg_archivecleanup</span> is written in C and has an easy-to-modify source code, with specifically designated sections to modify for your own needs</p>\n</div>\n<div class=\"refsect1\" id=\"id-1.9.5.4.9\">\n<h2>Examples</h2>\n<p>On Linux or Unix systems, you might use:</p>\n<pre class=\"programlisting\">archive_cleanup_command = 'pg_archivecleanup -d /mnt/standby/archive %r 2&gt;&gt;cleanup.log'\n</pre>\n<p>where the archive directory is physically located on the standby server, so that the <code class=\"varname\">archive_command</code> is accessing it across NFS, but the files are local to the standby. This will:</p>\n<div class=\"itemizedlist\">\n<ul class=\"itemizedlist\">\n<li class=\"listitem\">\n<p>produce debugging output in <code class=\"filename\">cleanup.log</code></p>\n</li>\n<li class=\"listitem\">\n<p>remove no-longer-needed files from the archive directory</p>\n</li>\n</ul>\n</div>\n</div>\n</div></div>", "manual_path": "pgarchivecleanup.html", "comparison_data": {"options": [{"names": ["-b", "--clean-backup-history"], "signature": "-b --clean-backup-history", "description": "Remove backup history files as well. See Section 25.3.2 for details about backup history files."}, {"names": ["-d", "--debug"], "signature": "-d --debug", "description": "Print lots of debug logging output on stderr ."}, {"names": ["-n", "--dry-run"], "signature": "-n --dry-run", "description": "Print the names of the files that would have been removed on stdout (performs a dry run)."}, {"names": ["-V", "--version"], "signature": "-V --version", "description": "Print the pg_archivecleanup version and exit."}, {"names": ["-x extension", "--strip-extension= extension"], "signature": "-x extension --strip-extension= extension", "description": "Provide an extension that will be stripped from all file names before deciding if they should be deleted. This is typically useful for cleaning up archives that have been compressed during storage, and therefore have had an extension added by the compression program. For example: -x .gz ."}, {"names": ["-?", "--help"], "signature": "-? --help", "description": "Show help about pg_archivecleanup command line arguments, and exit."}], "synopsis": ["pg_archivecleanup [ option ...] archivelocation oldestkeptwalfile"], "environment": []}, "comparison_hash": "18d66c08cf423bd426b6c3ea916de5ab0a2b1ae3ecbe75bc0b1efbbf13ec32db"}, "comparison": {"left": "16", "right": "17", "status": "changed", "diff": "--- PostgreSQL 16\n+++ PostgreSQL 17\n@@ -2,18 +2,28 @@\n   \"environment\": [],\n   \"options\": [\n     {\n+      \"description\": \"Remove backup history files as well. See Section 25.3.2 for details about backup history files.\",\n+      \"names\": [\n+        \"-b\",\n+        \"--clean-backup-history\"\n+      ],\n+      \"signature\": \"-b --clean-backup-history\"\n+    },\n+    {\n       \"description\": \"Print lots of debug logging output on stderr .\",\n       \"names\": [\n-        \"-d\"\n+        \"-d\",\n+        \"--debug\"\n       ],\n-      \"signature\": \"-d\"\n+      \"signature\": \"-d --debug\"\n     },\n     {\n       \"description\": \"Print the names of the files that would have been removed on stdout (performs a dry run).\",\n       \"names\": [\n-        \"-n\"\n+        \"-n\",\n+        \"--dry-run\"\n       ],\n-      \"signature\": \"-n\"\n+      \"signature\": \"-n --dry-run\"\n     },\n     {\n       \"description\": \"Print the pg_archivecleanup version and exit.\",\n@@ -26,9 +36,10 @@\n     {\n       \"description\": \"Provide an extension that will be stripped from all file names before deciding if they should be deleted. This is typically useful for cleaning up archives that have been compressed during storage, and therefore have had an extension added by the compression program. For example: -x .gz .\",\n       \"names\": [\n-        \"-x\"\n+        \"-x extension\",\n+        \"--strip-extension= extension\"\n       ],\n-      \"signature\": \"-x extension\"\n+      \"signature\": \"-x extension --strip-extension= extension\"\n     },\n     {\n       \"description\": \"Show help about pg_archivecleanup command line arguments, and exit.\","}}