docs: Changing column type doesn't always require an index rebuild.
authorRobert Haas
Fri, 1 Apr 2022 12:48:44 +0000 (08:48 -0400)
committerRobert Haas
Fri, 1 Apr 2022 12:48:44 +0000 (08:48 -0400)
James Coleman and Robert Haas, reviewed by Matthias van de Meent.

Discussion: https://postgr.es/m/CAAaqYe90Ea3RG=A7H-ONvTcx549-oQhp07BrHErwM=AyH2ximg@mail.gmail.com

doc/src/sgml/ref/alter_table.sgml

index 5c0735e08a8027a65f44989c28617327fbe2db2e..e610cbbc0ecb4781c35d1c544eabe4e5fedd556e 100644 (file)
@@ -1366,7 +1366,13 @@ WITH ( MODULUS numeric_literal, REM
     existing column, if the USING clause does not change
     the column contents and the old type is either binary coercible to the new
     type or an unconstrained domain over the new type, a table rewrite is not
-    needed; but any indexes on the affected columns must still be rebuilt.
+    needed. However, indexes must always be rebuilt unless the system can
+    verify that the new index would be logically equivalent to the existing
+    one.  For example, if the collation for a column has been changed an index
+    rebuild is always required because the new sort order might be different.
+    However, in the absence of a collation change, a column can be changed
+    from text to varchar (or vice versa) without
+    rebuilding the indexes because these data types sort identically.
     Table and/or index rebuilds may take a
     significant amount of time for a large table; and will temporarily require
     as much as double the disk space.