diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,11 @@
+# hpqtypes-extras-1.13.1.0 (2021-11-26)
+* Add support for including columns in indexes.
+
+# hpqtypes-extras-1.13.0.0 (2021-11-08)
+* Add support for handling lock_timeout during migrations.
+* Improvements for making no downtime migrations easier to write.
+* Commiting after each migration was made non-optional.
+
 # hpqtypes-extras-1.12.0.1 (2021-10-11)
 * Add support for log-base-0.11.0.0
 
diff --git a/hpqtypes-extras.cabal b/hpqtypes-extras.cabal
--- a/hpqtypes-extras.cabal
+++ b/hpqtypes-extras.cabal
@@ -1,6 +1,6 @@
 cabal-version:       2.2
 name:                hpqtypes-extras
-version:             1.13.0.0
+version:             1.13.1.0
 synopsis:            Extra utilities for hpqtypes library
 description:         The following extras for hpqtypes library:
                      .
diff --git a/src/Database/PostgreSQL/PQTypes/Checks.hs b/src/Database/PostgreSQL/PQTypes/Checks.hs
--- a/src/Database/PostgreSQL/PQTypes/Checks.hs
+++ b/src/Database/PostgreSQL/PQTypes/Checks.hs
@@ -1064,7 +1064,8 @@
 sqlGetIndexes :: Table -> SQL
 sqlGetIndexes table = toSQLCommand . sqlSelect "pg_catalog.pg_class c" $ do
   sqlResult "c.relname::text" -- index name
-  sqlResult $ "ARRAY(" <> selectCoordinates <> ")" -- array of index coordinates
+  sqlResult $ "ARRAY(" <> selectCoordinates "0" "i.indnkeyatts" <> ")" -- array of key columns in the index
+  sqlResult $ "ARRAY(" <> selectCoordinates "i.indnkeyatts" "i.indnatts" <> ")" -- array of included columns in the index
   sqlResult "am.amname::text" -- the method used (btree, gin etc)
   sqlResult "i.indisunique" -- is it unique?
   sqlResult "i.indisvalid"  -- is it valid?
@@ -1078,22 +1079,24 @@
   sqlWhereIsNULL "r.contype" -- fetch only "pure" indexes
   where
     -- Get all coordinates of the index.
-    selectCoordinates = smconcat [
+    selectCoordinates start end = smconcat [
         "WITH RECURSIVE coordinates(k, name) AS ("
-      , "  VALUES (0, NULL)"
+      , "  VALUES (" <> start <> "::integer, NULL)"
       , "  UNION ALL"
       , "    SELECT k+1, pg_catalog.pg_get_indexdef(i.indexrelid, k+1, true)"
       , "      FROM coordinates"
-      , "     WHERE pg_catalog.pg_get_indexdef(i.indexrelid, k+1, true) != ''"
+      , "     WHERE k < " <> end
       , ")"
-      , "SELECT name FROM coordinates WHERE k > 0"
+      , "SELECT name FROM coordinates WHERE name IS NOT NULL"
       ]
 
-fetchTableIndex :: (String, Array1 String, String, Bool, Bool, Maybe String)
-                -> (TableIndex, RawSQL ())
-fetchTableIndex (name, Array1 columns, method, unique, valid, mconstraint) =
+fetchTableIndex
+  :: (String, Array1 String, Array1 String, String, Bool, Bool, Maybe String)
+  -> (TableIndex, RawSQL ())
+fetchTableIndex (name, Array1 keyColumns, Array1 includeColumns, method, unique, valid, mconstraint) =
   (TableIndex
-   { idxColumns = map unsafeSQL columns
+   { idxColumns = map unsafeSQL keyColumns
+   , idxInclude = map unsafeSQL includeColumns
    , idxMethod = read method
    , idxUnique = unique
    , idxValid = valid
diff --git a/src/Database/PostgreSQL/PQTypes/Model/Index.hs b/src/Database/PostgreSQL/PQTypes/Model/Index.hs
--- a/src/Database/PostgreSQL/PQTypes/Model/Index.hs
+++ b/src/Database/PostgreSQL/PQTypes/Model/Index.hs
@@ -29,6 +29,7 @@
 
 data TableIndex = TableIndex {
   idxColumns :: [RawSQL ()]
+, idxInclude :: [RawSQL ()]
 , idxMethod  :: IndexMethod
 , idxUnique  :: Bool
 , idxValid   :: Bool -- ^ If creation of index with CONCURRENTLY fails, index
@@ -54,6 +55,7 @@
 tblIndex :: TableIndex
 tblIndex = TableIndex {
   idxColumns = []
+, idxInclude = []
 , idxMethod = BTree
 , idxUnique = False
 , idxValid = True
@@ -84,6 +86,7 @@
 uniqueIndexOnColumn :: RawSQL () -> TableIndex
 uniqueIndexOnColumn column = TableIndex {
   idxColumns = [column]
+, idxInclude = []
 , idxMethod = BTree
 , idxUnique = True
 , idxValid = True
@@ -93,6 +96,7 @@
 uniqueIndexOnColumns :: [RawSQL ()] -> TableIndex
 uniqueIndexOnColumns columns = TableIndex {
   idxColumns = columns
+, idxInclude = []
 , idxMethod = BTree
 , idxUnique = True
 , idxValid = True
@@ -102,6 +106,7 @@
 uniqueIndexOnColumnWithCondition :: RawSQL () -> RawSQL () -> TableIndex
 uniqueIndexOnColumnWithCondition column whereC = TableIndex {
   idxColumns = [column]
+, idxInclude = []
 , idxMethod = BTree
 , idxUnique = True
 , idxValid = True
@@ -114,6 +119,9 @@
   , tname
   , "__"
   , mintercalate "__" $ map (asText sanitize) idxColumns
+  , if null idxInclude
+    then ""
+    else "$$" <> mintercalate "__" (map (asText sanitize) idxInclude)
   , maybe "" (("__" <>) . hashWhere) idxWhere
   ]
   where
@@ -154,6 +162,9 @@
   , " USING" <+> (rawSQL (T.pack . show $ idxMethod) ()) <+> "("
   , mintercalate ", " idxColumns
   , ")"
+  , if null idxInclude
+    then ""
+    else " INCLUDE (" <> mintercalate ", " idxInclude <> ")"
   , maybe "" (" WHERE" <+>) idxWhere
   ]
 
diff --git a/test/Main.hs b/test/Main.hs
--- a/test/Main.hs
+++ b/test/Main.hs
@@ -126,7 +126,7 @@
   , mgrFrom      = 3
   , mgrAction    = CreateIndexConcurrentlyMigration
                      (tblName tableBankSchema3)
-                     (indexOnColumn "name")
+                     ((indexOnColumn "name") { idxInclude = ["id", "location"] })
   }
 
 tableBankSchema5 :: Table
@@ -134,7 +134,7 @@
     tblVersion = (tblVersion tableBankSchema4) + 2
   , tblColumns = filter (\c -> colName c /= "cash")
       (tblColumns tableBankSchema4)
-  , tblIndexes = [indexOnColumn "name"]
+  , tblIndexes = [(indexOnColumn "name") { idxInclude = ["id", "location"] }]
   }
 
 tableBadGuySchema1 :: Table
