diff --git a/contrib/citext/citext--unpackaged--1.0.sql b/contrib/citext/citext--unpackaged--1.0.sql
index b20d170b655f1140d0947a3660df4c07e0147635..ef6d6b0639601da6162d501f8f1f4f6a00f40d48 100644
--- a/contrib/citext/citext--unpackaged--1.0.sql
+++ b/contrib/citext/citext--unpackaged--1.0.sql
@@ -105,7 +105,12 @@ UPDATE pg_catalog.pg_attribute SET attcollation = 100
 FROM typeoids
 WHERE atttypid = typeoids.typoid;
 
-UPDATE pg_catalog.pg_index SET indcollation[0] = 100
+-- Updating the index indcollations is particularly tedious, but since we
+-- don't currently allow SQL assignment to individual elements of oidvectors,
+-- there's little choice.
+
+UPDATE pg_catalog.pg_index SET indcollation =
+  pg_catalog.regexp_replace(indcollation::pg_catalog.text, '^0', '100')::pg_catalog.oidvector
 WHERE indclass[0] IN (
   WITH RECURSIVE typeoids(typoid) AS
     ( SELECT 'citext'::pg_catalog.regtype UNION
@@ -115,7 +120,8 @@ WHERE indclass[0] IN (
   WHERE opcintype = typeoids.typoid
 );
 
-UPDATE pg_catalog.pg_index SET indcollation[1] = 100
+UPDATE pg_catalog.pg_index SET indcollation =
+  pg_catalog.regexp_replace(indcollation::pg_catalog.text, E'^(\\d+) 0', E'\\1 100')::pg_catalog.oidvector
 WHERE indclass[1] IN (
   WITH RECURSIVE typeoids(typoid) AS
     ( SELECT 'citext'::pg_catalog.regtype UNION
@@ -125,7 +131,8 @@ WHERE indclass[1] IN (
   WHERE opcintype = typeoids.typoid
 );
 
-UPDATE pg_catalog.pg_index SET indcollation[2] = 100
+UPDATE pg_catalog.pg_index SET indcollation =
+  pg_catalog.regexp_replace(indcollation::pg_catalog.text, E'^(\\d+ \\d+) 0', E'\\1 100')::pg_catalog.oidvector
 WHERE indclass[2] IN (
   WITH RECURSIVE typeoids(typoid) AS
     ( SELECT 'citext'::pg_catalog.regtype UNION
@@ -135,7 +142,8 @@ WHERE indclass[2] IN (
   WHERE opcintype = typeoids.typoid
 );
 
-UPDATE pg_catalog.pg_index SET indcollation[3] = 100
+UPDATE pg_catalog.pg_index SET indcollation =
+  pg_catalog.regexp_replace(indcollation::pg_catalog.text, E'^(\\d+ \\d+ \\d+) 0', E'\\1 100')::pg_catalog.oidvector
 WHERE indclass[3] IN (
   WITH RECURSIVE typeoids(typoid) AS
     ( SELECT 'citext'::pg_catalog.regtype UNION
@@ -145,7 +153,8 @@ WHERE indclass[3] IN (
   WHERE opcintype = typeoids.typoid
 );
 
-UPDATE pg_catalog.pg_index SET indcollation[4] = 100
+UPDATE pg_catalog.pg_index SET indcollation =
+  pg_catalog.regexp_replace(indcollation::pg_catalog.text, E'^(\\d+ \\d+ \\d+ \\d+) 0', E'\\1 100')::pg_catalog.oidvector
 WHERE indclass[4] IN (
   WITH RECURSIVE typeoids(typoid) AS
     ( SELECT 'citext'::pg_catalog.regtype UNION
@@ -155,7 +164,8 @@ WHERE indclass[4] IN (
   WHERE opcintype = typeoids.typoid
 );
 
-UPDATE pg_catalog.pg_index SET indcollation[5] = 100
+UPDATE pg_catalog.pg_index SET indcollation =
+  pg_catalog.regexp_replace(indcollation::pg_catalog.text, E'^(\\d+ \\d+ \\d+ \\d+ \\d+) 0', E'\\1 100')::pg_catalog.oidvector
 WHERE indclass[5] IN (
   WITH RECURSIVE typeoids(typoid) AS
     ( SELECT 'citext'::pg_catalog.regtype UNION
@@ -165,7 +175,8 @@ WHERE indclass[5] IN (
   WHERE opcintype = typeoids.typoid
 );
 
-UPDATE pg_catalog.pg_index SET indcollation[6] = 100
+UPDATE pg_catalog.pg_index SET indcollation =
+  pg_catalog.regexp_replace(indcollation::pg_catalog.text, E'^(\\d+ \\d+ \\d+ \\d+ \\d+ \\d+) 0', E'\\1 100')::pg_catalog.oidvector
 WHERE indclass[6] IN (
   WITH RECURSIVE typeoids(typoid) AS
     ( SELECT 'citext'::pg_catalog.regtype UNION
@@ -175,7 +186,8 @@ WHERE indclass[6] IN (
   WHERE opcintype = typeoids.typoid
 );
 
-UPDATE pg_catalog.pg_index SET indcollation[7] = 100
+UPDATE pg_catalog.pg_index SET indcollation =
+  pg_catalog.regexp_replace(indcollation::pg_catalog.text, E'^(\\d+ \\d+ \\d+ \\d+ \\d+ \\d+ \\d+) 0', E'\\1 100')::pg_catalog.oidvector
 WHERE indclass[7] IN (
   WITH RECURSIVE typeoids(typoid) AS
     ( SELECT 'citext'::pg_catalog.regtype UNION