diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,6 @@
+# consumers-2.3.4.0 (2025-11-27)
+* Compatibility with `hpqtypes` >= 1.13.0.0.
+
 # consumers-2.3.3.1 (2025-04-03)
 * Do not prepare query that updates jobs in the monitor thread.
 
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
 # consumers
 
-[![Hackage version](https://img.shields.io/hackage/v/consumers.svg?label=Hackage)](https://hackage.haskell.org/package/consumers)
 [![Haskell-CI](https://github.com/scrive/consumers/actions/workflows/haskell-ci.yml/badge.svg?branch=master)](https://github.com/scrive/consumers/actions/workflows/haskell-ci.yml)
+[![Hackage version](https://img.shields.io/hackage/v/consumers.svg?label=Hackage)](https://hackage.haskell.org/package/consumers)
 
 Library for setting up concurrent consumers of data stored inside
 PostgreSQL database in a simple, declarative manner.
diff --git a/consumers.cabal b/consumers.cabal
--- a/consumers.cabal
+++ b/consumers.cabal
@@ -1,6 +1,6 @@
 cabal-version:      3.0
 name:               consumers
-version:            2.3.3.1
+version:            2.3.4.0
 synopsis:           Concurrent PostgreSQL data consumers
 
 description:        Library for setting up concurrent consumers of data
@@ -17,7 +17,7 @@
 copyright:          Scrive AB
 category:           Concurrency, Database
 build-type:         Simple
-tested-with:        GHC == { 8.10.7, 9.0.2, 9.2.8, 9.4.8, 9.6.6, 9.8.4, 9.10.1, 9.12.1 }
+tested-with:        GHC == { 9.2.8, 9.4.8, 9.6.7, 9.8.4, 9.10.3, 9.12.2, 9.14.1 }
 
 bug-reports:   https://github.com/scrive/consumers/issues
 source-repository head
@@ -53,11 +53,11 @@
                     Database.PostgreSQL.Consumers.Components,
                     Database.PostgreSQL.Consumers.Utils
 
-  build-depends:    base              >= 4.14   && < 5
+  build-depends:    base              >= 4.16   && < 5
                   , aeson             >= 2.0
                   , containers        >= 0.5
                   , exceptions        >= 0.10
-                  , hpqtypes          >= 1.11
+                  , hpqtypes          >= 1.13
                   , lifted-base       >= 0.2
                   , lifted-threads    >= 1.0
                   , log-base          >= 0.11
@@ -99,7 +99,7 @@
                       exceptions,
                       HUnit,
                       hpqtypes,
-                      hpqtypes-extras,
+                      hpqtypes-extras >= 1.19.0.0,
                       log-base,
                       monad-control,
                       monad-time,
@@ -107,7 +107,6 @@
                       stm,
                       text,
                       time,
-                      transformers,
                       transformers-base
 
   hs-source-dirs:     test
diff --git a/src/Database/PostgreSQL/Consumers/Components.hs b/src/Database/PostgreSQL/Consumers/Components.hs
--- a/src/Database/PostgreSQL/Consumers/Components.hs
+++ b/src/Database/PostgreSQL/Consumers/Components.hs
@@ -190,7 +190,8 @@
   forkP "listener" $
     case ccNotificationChannel cc of
       Just chan ->
-        runDBT cs noTs
+        runDBT cs defaultTransactionSettings
+          . unsafeWithoutTransaction
           . bracket_ (listen chan) (unlisten chan)
           . forever
           $ do
@@ -206,11 +207,6 @@
   where
     signalDispatcher = do
       liftBase $ tryPutMVar semaphore ()
-
-    noTs =
-      defaultTransactionSettings
-        { tsAutoTransaction = False
-        }
 
 -- | Spawn a thread that monitors working consumers for activity and
 -- periodically updates its own.
diff --git a/src/Database/PostgreSQL/Consumers/Consumer.hs b/src/Database/PostgreSQL/Consumers/Consumer.hs
--- a/src/Database/PostgreSQL/Consumers/Consumer.hs
+++ b/src/Database/PostgreSQL/Consumers/Consumer.hs
@@ -36,7 +36,7 @@
   => ConsumerConfig n idx job
   -> ConnectionSourceM m
   -> m ConsumerID
-registerConsumer ConsumerConfig {..} cs = runDBT cs ts $ do
+registerConsumer ConsumerConfig {..} cs = runDBT cs defaultTransactionSettings $ do
   now <- currentTime
   runPreparedSQL_ (preparedSqlName "registerConsumer" ccConsumersTable) $
     smconcat
@@ -45,11 +45,6 @@
       , "RETURNING id"
       ]
   fetchOne runIdentity
-  where
-    ts =
-      defaultTransactionSettings
-        { tsAutoTransaction = False
-        }
 
 -- | Unregister consumer with a given ID.
 unregisterConsumer
@@ -60,7 +55,7 @@
   -> m ()
 unregisterConsumer ConsumerConfig {..} cs wid = runDBT cs ts $ do
   -- Free tasks manually in case there is no foreign key constraint on
-  -- reserved_by,
+  -- reserved_by.
   runPreparedSQL_ (preparedSqlName "deregisterJobs" ccJobsTable) $
     smconcat
       [ "UPDATE" <+> raw ccJobsTable
