diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,8 @@
+# 1.2
+
+- Migrated to `hasql-1.7`
+- Changed references to `QueryError` in observations to `SessionError`
+
 # 1.1
 
 - `ReadyForUseConnectionStatus` got extended with the `ConnectionReadyForUseReason` details.
diff --git a/diagrams-output/connection-status-model.png b/diagrams-output/connection-status-model.png
new file mode 100644
Binary files /dev/null and b/diagrams-output/connection-status-model.png differ
diff --git a/diagrams-output/observation-status-model.png b/diagrams-output/observation-status-model.png
deleted file mode 100644
Binary files a/diagrams-output/observation-status-model.png and /dev/null differ
diff --git a/hasql-pool.cabal b/hasql-pool.cabal
--- a/hasql-pool.cabal
+++ b/hasql-pool.cabal
@@ -1,6 +1,6 @@
 cabal-version: 3.0
 name: hasql-pool
-version: 1.1
+version: 1.2
 category: Hasql, Database, PostgreSQL
 synopsis: Pool of connections for Hasql
 homepage: https://github.com/nikita-volkov/hasql-pool
@@ -22,7 +22,10 @@
   location: git://github.com/nikita-volkov/hasql-pool.git
 
 common base-settings
+  default-language: Haskell2010
   default-extensions:
+    ApplicativeDo
+    Arrows
     BangPatterns
     BlockArguments
     ConstraintKinds
@@ -40,33 +43,28 @@
     FunctionalDependencies
     GADTs
     GeneralizedNewtypeDeriving
-    InstanceSigs
+    ImportQualifiedPost
     LambdaCase
     LiberalTypeSynonyms
-    MagicHash
     MultiParamTypeClasses
     MultiWayIf
     NoImplicitPrelude
     NoMonomorphismRestriction
     NumericUnderscores
     OverloadedStrings
-    ParallelListComp
     PatternGuards
     QuasiQuotes
     RankNTypes
     RecordWildCards
+    RoleAnnotations
     ScopedTypeVariables
     StandaloneDeriving
     StrictData
-    TemplateHaskell
     TupleSections
     TypeApplications
     TypeFamilies
     TypeOperators
-    UnboxedTuples
 
-  default-language: Haskell2010
-
 library
   import: base-settings
   hs-source-dirs:
@@ -85,11 +83,12 @@
     Hasql.Pool.Config.Config
     Hasql.Pool.Config.Setting
     Hasql.Pool.Prelude
+    Hasql.Pool.SessionErrorDestructors
 
   build-depends:
     base >=4.11 && <5,
     bytestring >=0.10 && <0.14,
-    hasql >=1.6.0.1 && <1.7,
+    hasql >=1.7 && <1.8,
     stm >=2.5 && <3,
     text >=1.2 && <3,
     time >=1.9 && <2,
diff --git a/src/library/exposed/Hasql/Pool.hs b/src/library/exposed/Hasql/Pool.hs
--- a/src/library/exposed/Hasql/Pool.hs
+++ b/src/library/exposed/Hasql/Pool.hs
@@ -10,15 +10,16 @@
   )
 where
 
-import qualified Data.Text.Encoding as Text
-import qualified Data.Text.Encoding.Error as Text
-import qualified Data.UUID.V4 as Uuid
+import Data.Text.Encoding qualified as Text
+import Data.Text.Encoding.Error qualified as Text
+import Data.UUID.V4 qualified as Uuid
 import Hasql.Connection (Connection)
-import qualified Hasql.Connection as Connection
-import qualified Hasql.Pool.Config.Config as Config
+import Hasql.Connection qualified as Connection
+import Hasql.Pool.Config.Config qualified as Config
 import Hasql.Pool.Observation
 import Hasql.Pool.Prelude
-import qualified Hasql.Session as Session
+import Hasql.Pool.SessionErrorDestructors qualified as ErrorsDestruction
+import Hasql.Session qualified as Session
 
 -- | A connection tagged with metadata.
 data Entry = Entry
@@ -175,11 +176,12 @@
           Session.run poolInitSession connection >>= \case
             Left err -> do
               Connection.release connection
-              case err of
-                Session.QueryError _ _ (Session.ClientError details) -> do
-                  poolObserver (ConnectionObservation id (TerminatedConnectionStatus (NetworkErrorConnectionTerminationReason (fmap (Text.decodeUtf8With Text.lenientDecode) details))))
-                _ ->
-                  poolObserver (ConnectionObservation id (TerminatedConnectionStatus (InitializationErrorTerminationReason err)))
+              ErrorsDestruction.reset
+                ( \details -> do
+                    poolObserver (ConnectionObservation id (TerminatedConnectionStatus (NetworkErrorConnectionTerminationReason (fmap (Text.decodeUtf8With Text.lenientDecode) details))))
+                )
+                (poolObserver (ConnectionObservation id (TerminatedConnectionStatus (InitializationErrorTerminationReason err))))
+                err
               return $ Left $ SessionUsageError err
             Right () -> do
               poolObserver (ConnectionObservation id (ReadyForUseConnectionStatus EstablishedConnectionReadyForUseReason))
@@ -209,16 +211,20 @@
         Left exc -> do
           returnConn
           throwIO exc
-        Right (Left err) -> case err of
-          Session.QueryError _ _ (Session.ClientError details) -> do
-            Connection.release (entryConnection entry)
-            atomically $ modifyTVar' poolCapacity succ
-            poolObserver (ConnectionObservation (entryId entry) (TerminatedConnectionStatus (NetworkErrorConnectionTerminationReason (fmap (Text.decodeUtf8With Text.lenientDecode) details))))
-            return $ Left $ SessionUsageError err
-          _ -> do
-            returnConn
-            poolObserver (ConnectionObservation (entryId entry) (ReadyForUseConnectionStatus (SessionFailedConnectionReadyForUseReason err)))
-            return $ Left $ SessionUsageError err
+        Right (Left err) ->
+          ErrorsDestruction.reset
+            ( \details -> do
+                Connection.release (entryConnection entry)
+                atomically $ modifyTVar' poolCapacity succ
+                poolObserver (ConnectionObservation (entryId entry) (TerminatedConnectionStatus (NetworkErrorConnectionTerminationReason (fmap (Text.decodeUtf8With Text.lenientDecode) details))))
+                return $ Left $ SessionUsageError err
+            )
+            ( do
+                returnConn
+                poolObserver (ConnectionObservation (entryId entry) (ReadyForUseConnectionStatus (SessionFailedConnectionReadyForUseReason err)))
+                return $ Left $ SessionUsageError err
+            )
+            err
         Right (Right res) -> do
           returnConn
           poolObserver (ConnectionObservation (entryId entry) (ReadyForUseConnectionStatus SessionSucceededConnectionReadyForUseReason))
@@ -239,7 +245,7 @@
   = -- | Attempt to establish a connection failed.
     ConnectionUsageError Connection.ConnectionError
   | -- | Session execution failed.
-    SessionUsageError Session.QueryError
+    SessionUsageError Session.SessionError
   | -- | Timeout acquiring a connection.
     AcquisitionTimeoutUsageError
   deriving (Show, Eq)
diff --git a/src/library/exposed/Hasql/Pool/Config.hs b/src/library/exposed/Hasql/Pool/Config.hs
--- a/src/library/exposed/Hasql/Pool/Config.hs
+++ b/src/library/exposed/Hasql/Pool/Config.hs
@@ -14,8 +14,8 @@
   )
 where
 
-import qualified Hasql.Pool.Config.Config as Config
-import qualified Hasql.Pool.Config.Setting as Setting
+import Hasql.Pool.Config.Config qualified as Config
+import Hasql.Pool.Config.Setting qualified as Setting
 import Hasql.Pool.Prelude
 
 -- | Compile config from a list of settings.
diff --git a/src/library/exposed/Hasql/Pool/Config/Defaults.hs b/src/library/exposed/Hasql/Pool/Config/Defaults.hs
--- a/src/library/exposed/Hasql/Pool/Config/Defaults.hs
+++ b/src/library/exposed/Hasql/Pool/Config/Defaults.hs
@@ -1,9 +1,9 @@
 module Hasql.Pool.Config.Defaults where
 
-import qualified Hasql.Connection as Connection
+import Hasql.Connection qualified as Connection
 import Hasql.Pool.Observation (Observation)
 import Hasql.Pool.Prelude
-import qualified Hasql.Session as Session
+import Hasql.Session qualified as Session
 
 -- |
 -- 3 connections.
diff --git a/src/library/exposed/Hasql/Pool/Observation.hs b/src/library/exposed/Hasql/Pool/Observation.hs
--- a/src/library/exposed/Hasql/Pool/Observation.hs
+++ b/src/library/exposed/Hasql/Pool/Observation.hs
@@ -5,7 +5,7 @@
 module Hasql.Pool.Observation where
 
 import Hasql.Pool.Prelude
-import qualified Hasql.Session as Session
+import Hasql.Session qualified as Session
 
 -- | An observation of a change of the state of a pool.
 data Observation
@@ -20,7 +20,7 @@
 
 -- | Status of a connection.
 --
--- <<diagrams-output/observation-status-model.png>>
+-- <<diagrams-output/connection-status-model.png>>
 data ConnectionStatus
   = -- | Connection is being established.
     --
@@ -40,7 +40,7 @@
   = -- | Connection just got established.
     EstablishedConnectionReadyForUseReason
   | -- | Session execution ended with a failure that does not require a connection reset.
-    SessionFailedConnectionReadyForUseReason Session.QueryError
+    SessionFailedConnectionReadyForUseReason Session.SessionError
   | -- | Session execution ended with success.
     SessionSucceededConnectionReadyForUseReason
   deriving (Show, Eq)
@@ -56,5 +56,5 @@
   | -- | User has invoked the 'Hasql.Pool.release' procedure.
     ReleaseConnectionTerminationReason
   | -- | Initialization session failure.
-    InitializationErrorTerminationReason Session.QueryError
+    InitializationErrorTerminationReason Session.SessionError
   deriving (Show, Eq)
diff --git a/src/library/other/Hasql/Pool/Config/Config.hs b/src/library/other/Hasql/Pool/Config/Config.hs
--- a/src/library/other/Hasql/Pool/Config/Config.hs
+++ b/src/library/other/Hasql/Pool/Config/Config.hs
@@ -1,10 +1,10 @@
 module Hasql.Pool.Config.Config where
 
-import qualified Hasql.Connection as Connection
-import qualified Hasql.Pool.Config.Defaults as Defaults
+import Hasql.Connection qualified as Connection
+import Hasql.Pool.Config.Defaults qualified as Defaults
 import Hasql.Pool.Observation (Observation)
 import Hasql.Pool.Prelude
-import qualified Hasql.Session as Session
+import Hasql.Session qualified as Session
 
 -- | Configufation for Hasql connection pool.
 data Config = Config
diff --git a/src/library/other/Hasql/Pool/Config/Setting.hs b/src/library/other/Hasql/Pool/Config/Setting.hs
--- a/src/library/other/Hasql/Pool/Config/Setting.hs
+++ b/src/library/other/Hasql/Pool/Config/Setting.hs
@@ -1,11 +1,11 @@
 module Hasql.Pool.Config.Setting where
 
-import qualified Hasql.Connection as Connection
+import Hasql.Connection qualified as Connection
 import Hasql.Pool.Config.Config (Config)
-import qualified Hasql.Pool.Config.Config as Config
+import Hasql.Pool.Config.Config qualified as Config
 import Hasql.Pool.Observation (Observation)
 import Hasql.Pool.Prelude
-import qualified Hasql.Session as Session
+import Hasql.Session qualified as Session
 
 apply :: Setting -> Config -> Config
 apply (Setting run) = run
diff --git a/src/library/other/Hasql/Pool/SessionErrorDestructors.hs b/src/library/other/Hasql/Pool/SessionErrorDestructors.hs
new file mode 100644
--- /dev/null
+++ b/src/library/other/Hasql/Pool/SessionErrorDestructors.hs
@@ -0,0 +1,10 @@
+module Hasql.Pool.SessionErrorDestructors where
+
+import Hasql.Pool.Prelude
+import Hasql.Session qualified as Session
+
+reset :: (Maybe ByteString -> x) -> x -> Session.SessionError -> x
+reset onReset onNoReset = \case
+  Session.QueryError _ _ (Session.ClientError details) -> onReset details
+  Session.PipelineError (Session.ClientError details) -> onReset details
+  _ -> onNoReset
diff --git a/src/test/Main.hs b/src/test/Main.hs
--- a/src/test/Main.hs
+++ b/src/test/Main.hs
@@ -1,17 +1,17 @@
 module Main where
 
 import Control.Concurrent.Async (race)
-import qualified Data.ByteString.Char8 as B8
-import qualified Data.Text as Text
-import qualified Hasql.Connection as Connection
-import qualified Hasql.Decoders as Decoders
-import qualified Hasql.Encoders as Encoders
+import Data.ByteString.Char8 qualified as B8
+import Data.Text qualified as Text
+import Hasql.Connection qualified as Connection
+import Hasql.Decoders qualified as Decoders
+import Hasql.Encoders qualified as Encoders
 import Hasql.Pool
-import qualified Hasql.Pool.Config as Config
-import qualified Hasql.Session as Session
-import qualified Hasql.Statement as Statement
-import qualified System.Environment
-import qualified System.Random.Stateful as Random
+import Hasql.Pool.Config qualified as Config
+import Hasql.Session qualified as Session
+import Hasql.Statement qualified as Statement
+import System.Environment qualified
+import System.Random.Stateful qualified as Random
 import Test.Hspec
 import Prelude
 
