diff --git a/doc/src/sgml/mvcc.sgml b/doc/src/sgml/mvcc.sgml
index 6dd2e4d12a9..19e99a52ab3 100644
--- a/doc/src/sgml/mvcc.sgml
+++ b/doc/src/sgml/mvcc.sgml
@@ -680,20 +680,6 @@ ERROR: could not serialize access due to read/write dependencies among transact
-
-
-
- Support for the Serializable transaction isolation level has not yet
- been added to Hot Standby replication targets (described in
- ). The strictest isolation level currently
- supported in hot standby mode is Repeatable Read. While performing all
- permanent database writes within Serializable transactions on the
- master will ensure that all standbys will eventually reach a consistent
- state, a Repeatable Read transaction run on the standby can sometimes
- see a transient state which is inconsistent with any serial execution
- of serializable transactions on the master.
-
-
@@ -1455,6 +1441,38 @@ SELECT pg_advisory_lock(q.id) FROM
+
+ Caveats
+
+
+ Some DDL commands, currently only and the
+ table-rewriting forms of , are not
+ MVCC-safe. This means that after the truncation or rewrite commits, the
+ table will appear empty to concurrent transactions, if they are using a
+ snapshot taken before the DDL command committed. This will only be an
+ issue for a transaction that did not access the table in question
+ before the DDL command started — any transaction that has done so
+ would hold at least an ACCESS SHARE table lock,
+ which would block the DDL command until that transaction completes.
+ So these commands will not cause any apparent inconsistency in the
+ table contents for successive queries on the target table, but they
+ could cause visible inconsistency between the contents of the target
+ table and other tables in the database.
+
+
+
+ Support for the Serializable transaction isolation level has not yet
+ been added to Hot Standby replication targets (described in
+ ). The strictest isolation level currently
+ supported in hot standby mode is Repeatable Read. While performing all
+ permanent database writes within Serializable transactions on the
+ master will ensure that all standbys will eventually reach a consistent
+ state, a Repeatable Read transaction run on the standby can sometimes
+ see a transient state that is inconsistent with any serial execution
+ of the transactions on the master.
+
+
+
Locking and Indexes
diff --git a/doc/src/sgml/ref/alter_table.sgml b/doc/src/sgml/ref/alter_table.sgml
index e4ef90ed9dd..342c2cdcc7f 100644
--- a/doc/src/sgml/ref/alter_table.sgml
+++ b/doc/src/sgml/ref/alter_table.sgml
@@ -843,7 +843,8 @@ ALTER TABLE [ IF EXISTS ] name
Adding a CHECK> or NOT NULL> constraint requires
- scanning the table to verify that existing rows meet the constraint.
+ scanning the table to verify that existing rows meet the constraint,
+ but does not require a table rewrite.
@@ -865,11 +866,17 @@ ALTER TABLE [ IF EXISTS ] name
- To force an immediate rewrite of the table, you can use
- VACUUM FULL>,
- or one of the forms of ALTER TABLE that forces a rewrite. This results in
- no semantically-visible change in the table, but gets rid of
- no-longer-useful data.
+ To force immediate reclamation of space occupied by a dropped column,
+ you can execute one of the forms of ALTER TABLE> that
+ performs a rewrite of the whole table. This results in reconstructing
+ each row with the dropped column replaced by a null value.
+
+
+
+ The rewriting forms of ALTER TABLE> are not MVCC-safe.
+ After a table rewrite, the table will appear empty to concurrent
+ transactions, if they are using a snapshot taken before the rewrite
+ occurred. See for more details.
diff --git a/doc/src/sgml/ref/truncate.sgml b/doc/src/sgml/ref/truncate.sgml
index 7b9c2f30128..5d77e5daec9 100644
--- a/doc/src/sgml/ref/truncate.sgml
+++ b/doc/src/sgml/ref/truncate.sgml
@@ -140,23 +140,12 @@ TRUNCATE [ TABLE ] [ ONLY ] name [
that were added due to cascading).
-
-
- TRUNCATE> is not MVCC-safe (see
- for general information about MVCC). After truncation, the table
- will appear empty to all concurrent transactions, even if they
- are using a snapshot taken before the truncation occurred. This
- will only be an issue for a transaction that did not access the
- truncated table before the truncation happened — any
- transaction that has done so would hold at least an
- ACCESS SHARE lock, which would block
- TRUNCATE> until that transaction completes. So
- truncation will not cause any apparent inconsistency in the table
- contents for successive queries on the same table, but it could
- cause visible inconsistency between the contents of the truncated
- table and other tables in the database.
-
-
+
+ TRUNCATE> is not MVCC-safe. After truncation, the table will
+ appear empty to concurrent transactions, if they are using a snapshot
+ taken before the truncation occurred.
+ See for more details.
+ TRUNCATE> is transaction-safe with respect to the data