diff --git a/doc/src/sgml/ref/alter_publication.sgml b/doc/src/sgml/ref/alter_publication.sgml
index 0a965b3bbf8..858231fbcbf 100644
--- a/doc/src/sgml/ref/alter_publication.sgml
+++ b/doc/src/sgml/ref/alter_publication.sgml
@@ -31,9 +31,9 @@ ALTER PUBLICATION name WITH ( name OWNER TO { new_owner | CURRENT_USER | SESSION_USER }
ALTER PUBLICATION name RENAME TO new_name
-ALTER PUBLICATION name ADD TABLE table_name [, ...]
-ALTER PUBLICATION name SET TABLE table_name [, ...]
-ALTER PUBLICATION name DROP TABLE table_name [, ...]
+ALTER PUBLICATION name ADD TABLE [ ONLY ] table_name [ * ] [, ...]
+ALTER PUBLICATION name SET TABLE [ ONLY ] table_name [ * ] [, ...]
+ALTER PUBLICATION name DROP TABLE [ ONLY ] table_name [ * ] [, ...]
@@ -116,7 +116,11 @@ ALTER PUBLICATION name DROP TABLE <
table_name
- Name of an existing table.
+ Name of an existing table. If ONLY> is specified before the
+ table name, only that table is affected. If ONLY> is not
+ specified, the table and all its descendant tables (if any) are
+ affected. Optionally, *> can be specified after the table
+ name to explicitly indicate that descendant tables are included.
diff --git a/doc/src/sgml/ref/create_publication.sgml b/doc/src/sgml/ref/create_publication.sgml
index 3cdde801fa1..0369b579c5c 100644
--- a/doc/src/sgml/ref/create_publication.sgml
+++ b/doc/src/sgml/ref/create_publication.sgml
@@ -22,7 +22,7 @@ PostgreSQL documentation
CREATE PUBLICATION name
- [ FOR TABLE table_name [, ...]
+ [ FOR TABLE [ ONLY ] table_name [ * ] [, ...]
| FOR ALL TABLES ]
[ WITH ( option [, ... ] ) ]
@@ -68,7 +68,12 @@ CREATE PUBLICATION name
FOR TABLE
- Specifies a list of tables to add to the publication.
+ Specifies a list of tables to add to the publication. If
+ ONLY> is specified before the table name, only
+ that table is added to the publication. If ONLY> is not
+ specified, the table and all its descendant tables (if any) are added.
+ Optionally, *> can be specified after the table name to
+ explicitly indicate that descendant tables are included.
diff --git a/src/test/regress/expected/publication.out b/src/test/regress/expected/publication.out
index 0964718a60e..5b7fb674dad 100644
--- a/src/test/regress/expected/publication.out
+++ b/src/test/regress/expected/publication.out
@@ -71,6 +71,29 @@ Publications:
DROP TABLE testpub_tbl2;
DROP PUBLICATION testpub_foralltables;
+CREATE TABLE testpub_tbl3 (a int);
+CREATE TABLE testpub_tbl3a (b text) INHERITS (testpub_tbl3);
+CREATE PUBLICATION testpub3 FOR TABLE testpub_tbl3;
+CREATE PUBLICATION testpub4 FOR TABLE ONLY testpub_tbl3;
+\dRp+ testpub3
+ Publication testpub3
+ Inserts | Updates | Deletes
+---------+---------+---------
+ t | t | t
+Tables:
+ "public.testpub_tbl3"
+ "public.testpub_tbl3a"
+
+\dRp+ testpub4
+ Publication testpub4
+ Inserts | Updates | Deletes
+---------+---------+---------
+ t | t | t
+Tables:
+ "public.testpub_tbl3"
+
+DROP TABLE testpub_tbl3, testpub_tbl3a;
+DROP PUBLICATION testpub3, testpub4;
-- fail - view
CREATE PUBLICATION testpub_fortbl FOR TABLE testpub_view;
ERROR: "testpub_view" is not a table
diff --git a/src/test/regress/sql/publication.sql b/src/test/regress/sql/publication.sql
index 85530bec0e7..b118bc9906f 100644
--- a/src/test/regress/sql/publication.sql
+++ b/src/test/regress/sql/publication.sql
@@ -44,6 +44,16 @@ SELECT pubname, puballtables FROM pg_publication WHERE pubname = 'testpub_forall
DROP TABLE testpub_tbl2;
DROP PUBLICATION testpub_foralltables;
+CREATE TABLE testpub_tbl3 (a int);
+CREATE TABLE testpub_tbl3a (b text) INHERITS (testpub_tbl3);
+CREATE PUBLICATION testpub3 FOR TABLE testpub_tbl3;
+CREATE PUBLICATION testpub4 FOR TABLE ONLY testpub_tbl3;
+\dRp+ testpub3
+\dRp+ testpub4
+
+DROP TABLE testpub_tbl3, testpub_tbl3a;
+DROP PUBLICATION testpub3, testpub4;
+
-- fail - view
CREATE PUBLICATION testpub_fortbl FOR TABLE testpub_view;
CREATE PUBLICATION testpub_fortbl FOR TABLE testpub_tbl1, pub_test.testpub_nopk;