diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+# 1.6
+
+- Added position to `ServerError` (breaking change).
+
 # 1.5
 
 - Added column number to `RowError` (breaking change).
diff --git a/hasql.cabal b/hasql.cabal
--- a/hasql.cabal
+++ b/hasql.cabal
@@ -1,5 +1,5 @@
 name: hasql
-version: 1.5.1
+version: 1.6
 category: Hasql, Database, PostgreSQL
 synopsis: An efficient PostgreSQL driver with a flexible mapping API
 description:
diff --git a/library/Hasql/Private/Decoders/Result.hs b/library/Hasql/Private/Decoders/Result.hs
--- a/library/Hasql/Private/Decoders/Result.hs
+++ b/library/Hasql/Private/Decoders/Result.hs
@@ -81,7 +81,16 @@
         LibPQ.resultErrorField result LibPQ.DiagMessageDetail
       hint <-
         LibPQ.resultErrorField result LibPQ.DiagMessageHint
-      pure $ Left $ ServerError code message detail hint
+      position <-
+        parsePosition <$> LibPQ.resultErrorField result LibPQ.DiagStatementPosition
+      pure $ Left $ ServerError code message detail hint position
+  where
+    parsePosition = \case
+      Nothing -> Nothing
+      Just pos ->
+        case Attoparsec.parseOnly (Attoparsec.decimal <* Attoparsec.endOfInput) pos of
+          Right pos -> Just pos
+          _ -> Nothing
 
 {-# INLINE maybe #-}
 maybe :: Row.Row a -> Result (Maybe a)
diff --git a/library/Hasql/Private/Errors.hs b/library/Hasql/Private/Errors.hs
--- a/library/Hasql/Private/Errors.hs
+++ b/library/Hasql/Private/Errors.hs
@@ -54,6 +54,9 @@
       -- This is intended to differ from detail in that it offers advice
       -- (potentially inappropriate) rather than hard facts. Might run to
       -- multiple lines.
+      (Maybe Int)
+      -- ^ __Position__. Error cursor position as an index into the original
+      -- statement string. Positions are measured in characters not bytes.
   | -- |
     -- The database returned an unexpected result.
     -- Indicates an improper statement or a schema mismatch.
diff --git a/tasty/Main.hs b/tasty/Main.hs
--- a/tasty/Main.hs
+++ b/tasty/Main.hs
@@ -153,7 +153,7 @@
                 where
                   resultTest =
                     \case
-                      Right (Left (Session.QueryError _ _ (Session.ResultError (Session.ServerError "26000" _ _ _)))) -> False
+                      Right (Left (Session.QueryError _ _ (Session.ResultError (Session.ServerError "26000" _ _ _ _)))) -> False
                       _ -> True
                   session =
                     catchError session (const (pure ())) *> session
