From 127af9efc508edaebea8046f37a5e2a4cad09ff6 Mon Sep 17 00:00:00 2001
From: Jacob Champion <jacob.champion@enterprisedb.com>
Date: Thu, 10 Sep 2026 09:32:40 -0700
Subject: [PATCH] doc: Improve output_plugin_libraries documentation

Describe the effects of removing the builtin plugins from
output_plugin_libraries. It may not be obvious to DBAs why they might
want to keep those in the allowlist, since it wasn't previously possible
to pick and choose plugins without modifying the Postgres installation
itself.

Reported-by: Hayato Kuroda <kuroda.hayato@fujitsu.com>
Backpatch-through: 14
---
 doc/src/sgml/config.sgml             | 40 ++++++++++++++++++++++++++++
 doc/src/sgml/ref/pg_recvlogical.sgml |  2 +-
 2 files changed, 41 insertions(+), 1 deletion(-)

diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgml
index 0165eb9ec02..36f04efd1c2 100644
--- a/doc/src/sgml/config.sgml
+++ b/doc/src/sgml/config.sgml
@@ -4874,6 +4874,8 @@ restore_command = 'copy "C:\\server\\archivedir\\%f" "%p"'  # Windows
          restriction. The default is <literal>'pgoutput, test_decoding'</literal>,
          which are the two logical output plugins included in the standard
          <productname>PostgreSQL</productname> distribution.
+         (<xref linkend="guc-output-plugin-libraries-builtins"/> documents the
+         behavior of the system if they are removed from this list.)
         </para>
         <para>
          The format is a comma-separated list of library names, where each name
@@ -4912,6 +4914,44 @@ HINT:  If it is safe for all REPLICATION users to use this library as an output
 </programlisting>
          </para>
         </note>
+
+        <table id="guc-output-plugin-libraries-builtins">
+         <title>Plugins Allowed by Default</title>
+         <tgroup cols="2">
+          <colspec colname="col1" colwidth="1*"/>
+          <colspec colname="col2" colwidth="2*"/>
+          <thead>
+           <row>
+            <entry>Plugin</entry>
+            <entry>Description</entry>
+           </row>
+          </thead>
+
+          <tbody>
+           <row>
+            <entry><xref linkend="logicaldecoding-pgoutput"/></entry>
+            <entry>
+             Core plugin for logical replication. Removing <literal>pgoutput</literal>
+             from <literal>output_plugin_libraries</literal> will cause future
+             subscription connections, and publication slot creation, to fail
+             with an error. (Beware that existing replication tools may not
+             degrade gracefully if the server is configured in this way.)
+            </entry>
+           </row>
+           <row>
+            <entry><xref linkend="test-decoding"/></entry>
+            <entry>
+             Decodes the WAL stream into a human-readable text representation.
+             <xref linkend="app-pgrecvlogical"/> uses this plugin by default, so
+             removing it from <literal>output_plugin_libraries</literal> will
+             prevent the use of that utility unless a replacement plugin is
+             installed and explicitly selected with
+             <link linkend="app-pgrecvlogical-option-plugin"><literal>--plugin</literal></link>.
+            </entry>
+           </row>
+          </tbody>
+         </tgroup>
+        </table>
        </listitem>
       </varlistentry>
 
diff --git a/doc/src/sgml/ref/pg_recvlogical.sgml b/doc/src/sgml/ref/pg_recvlogical.sgml
index 5f76e424e26..85cc6dbb2bb 100644
--- a/doc/src/sgml/ref/pg_recvlogical.sgml
+++ b/doc/src/sgml/ref/pg_recvlogical.sgml
@@ -270,7 +270,7 @@ PostgreSQL documentation
      </varlistentry>
 
      <varlistentry>
-      <term><option>-P <replaceable>plugin</replaceable></option></term>
+      <term id="app-pgrecvlogical-option-plugin"><option>-P <replaceable>plugin</replaceable></option></term>
       <term><option>--plugin=<replaceable>plugin</replaceable></option></term>
       <listitem>
        <para>
-- 
2.34.1

