diff --git a/doc/src/sgml/logical-replication.sgml b/doc/src/sgml/logical-replication.sgml
index 0ab191e402..1ae3287f22 100644
--- a/doc/src/sgml/logical-replication.sgml
+++ b/doc/src/sgml/logical-replication.sgml
@@ -1093,89 +1093,60 @@ test_sub=# SELECT * FROM child ORDER BY a;
Column Lists
- By default, all columns of a published table will be replicated to the
- appropriate subscribers. The subscriber table must have at least all the
- columns of the published table. However, if a
- column list is specified then only the columns named
- in the list will be replicated. This means the subscriber-side table only
- needs to have those columns named by the column list. A user might choose to
- use column lists for behavioral, security or performance reasons.
+ Each publication can optionally specify which columns of each table are
+ replicated to subscribers. The table on the subscriber side must have at
+ least all the columns that are published. If no column list is specified,
+ then all columns in the publisher are replicated.
+ See for details on the syntax.
-
- Column List Rules
+
+ The choice of columns can be based on behavioral or performance reasons.
+ However, do not rely on this feature for security: a malicious subscriber
+ is able to obtain data from columns that are not specifically
+ published. If security is a consideration, protections can be applied
+ at the publisher side.
+
-
- A column list is specified per table following the table name, and enclosed
- by parentheses. See for details.
-
+
+ If no column list is specified, any columns added later are automatically
+ replicated. This means that having a column list which names all columns
+ is not the same as having no column list at all.
+
-
- When specifying a column list, the order of columns is not important. If no
- column list is specified, all columns of the table are replicated through
- this publication, including any columns added later. This means a column
- list which names all columns is not quite the same as having no column list
- at all. For example, if additional columns are added to the table then only
- those named columns mentioned in the column list will continue to be
- replicated.
-
+
+ A column list can contain only simple column references. The order
+ of columns in the list is not preserved.
+
-
- Column lists have no effect for TRUNCATE command.
-
+
+ For partitioned tables, the publication parameter
+ publish_via_partition_root determines which column list
+ is used. If publish_via_partition_root is
+ true, the root partitioned table's column list is used.
+ Otherwise, if publish_via_partition_root is
+ false (the default), each partition's column list is used.
+
-
+
+ If a publication publishes UPDATE or
+ DELETE operations, any column list must include the
+ table's replica identity columns (see
+ ).
+ If a publication publishes only INSERT operations, then
+ the column list may omit replica identity columns.
+
-
- Column List Restrictions
+
+ Column lists have no effect for the TRUNCATE command.
+
-
- A column list can contain only simple column references.
-
-
-
- If a publication publishes UPDATE or
- DELETE operations, any column list must include the
- table's replica identity columns (see
- ).
- If a publication publishes only INSERT operations, then
- the column list is arbitrary and may omit some replica identity columns.
-
-
-
-
-
- Partitioned Tables
-
-
- For partitioned tables, the publication parameter
- publish_via_partition_root determines which column list
- is used. If publish_via_partition_root is
- true, the root partitioned table's column list is used.
- Otherwise, if publish_via_partition_root is
- false (default), each partition's column list is used.
-
-
-
-
-
- Initial Data Synchronization
-
-
- If the subscription requires copying pre-existing table data and a
- publication specifies a column list, only data from those columns will be
- copied.
-
-
-
-
- If the subscriber is in a release prior to 15, copy pre-existing data
- doesn't use column lists even if they are defined in the publication.
- This is because old releases can only copy the entire table data.
-
-
-
-
+
+ During initial data synchronization, only the published columns are
+ copied. However, if the subscriber is from a release prior to 15, then
+ all the columns in the table are copied during initial data synchronization,
+ ignoring any column lists.
+
Combining Multiple Column Lists
@@ -1193,12 +1164,6 @@ test_sub=# SELECT * FROM child ORDER BY a;
ALTER SUBSCRIPTION ... DROP PUBLICATION and then add it
back after adjusting the column list.
-
- Background: The main purpose of the column list feature is to allow
- statically different table shapes on publisher and subscriber, or hide
- sensitive column data. In both cases, it doesn't seem to make sense to
- combine column lists.
-
diff --git a/doc/src/sgml/ref/create_publication.sgml b/doc/src/sgml/ref/create_publication.sgml
index f61641896a..0a68c4bf73 100644
--- a/doc/src/sgml/ref/create_publication.sgml
+++ b/doc/src/sgml/ref/create_publication.sgml
@@ -94,7 +94,7 @@ CREATE PUBLICATION name
effect on TRUNCATE commands. See
for details about column
lists.
-
+
Only persistent base tables and partitioned tables can be part of a