diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,12 @@
 # Revision history for pgmq-effectful
 
+## 0.4.0.0 -- 2026-07-14
+
+* Version bump only — coordinated release with pgmq-migration 0.4.0.0.
+  No library source changes since 0.3.0.0; the test suite was updated for the
+  native `pgmq-migration` API.
+* Bumped `pgmq-core` and `pgmq-hasql` dependency bounds to `>=0.4 && <0.5`.
+
 ## 0.3.0.0 -- 2026-05-31
 
 ### Breaking Changes
diff --git a/pgmq-effectful.cabal b/pgmq-effectful.cabal
--- a/pgmq-effectful.cabal
+++ b/pgmq-effectful.cabal
@@ -1,6 +1,6 @@
 cabal-version:   3.4
 name:            pgmq-effectful
-version:         0.3.0.0
+version:         0.4.0.0
 synopsis:        Effectful effects for PGMQ (PostgreSQL Message Queue)
 description:
   Effectful effects and interpreters for pgmq-hs, a Haskell client
@@ -57,8 +57,8 @@
     , hs-opentelemetry-api                   >=1.0   && <2
     , hs-opentelemetry-semantic-conventions  >=1.40  && <2
     , http-types                             >=0.12  && <0.13
-    , pgmq-core                              >=0.3   && <0.4
-    , pgmq-hasql                             >=0.3   && <0.4
+    , pgmq-core                              >=0.4   && <0.5
+    , pgmq-hasql                             >=0.4   && <0.5
     , text                                   >=2.0   && <2.2
     , unliftio                               >=0.2   && <0.3
     , unordered-containers                   >=0.2   && <0.3
@@ -100,9 +100,10 @@
     , hs-opentelemetry-propagator-w3c        >=1.0   && <2
     , hs-opentelemetry-sdk                   >=1.0   && <2
     , hs-opentelemetry-semantic-conventions  >=1.40  && <2
-    , pgmq-core                              >=0.3   && <0.4
+    , pg-migrate
+    , pgmq-core                              >=0.4   && <0.5
     , pgmq-effectful
-    , pgmq-migration                         >=0.3   && <0.4
+    , pgmq-migration                         >=0.4   && <0.5
     , random                                 ^>=1.2
     , tasty                                  ^>=1.5
     , tasty-hunit                            ^>=0.10
diff --git a/test/EphemeralDb.hs b/test/EphemeralDb.hs
--- a/test/EphemeralDb.hs
+++ b/test/EphemeralDb.hs
@@ -13,6 +13,12 @@
   )
 where
 
+import Data.List.NonEmpty (NonEmpty (..))
+import Database.PostgreSQL.Migrate
+  ( defaultRunOptions,
+    migrationPlan,
+    runMigrationPlan,
+  )
 import EphemeralPg
   ( StartError,
     connectionSettings,
@@ -33,11 +39,12 @@
             PoolConfig.staticConnectionSettings connSettings
           ]
   pool <- Pool.acquire poolConfig
-  installResult <- Pool.use pool Migration.migrate
+  component <- either (error . ("Invalid PGMQ migration component: " <>) . show) pure Migration.pgmqMigrations
+  plan <- either (error . ("Invalid PGMQ migration plan: " <>) . show) pure (migrationPlan (component :| []))
+  installResult <- runMigrationPlan defaultRunOptions connSettings plan
   case installResult of
-    Left poolErr -> error $ "Failed to install pgmq schema: " <> show poolErr
-    Right (Left migrationErr) -> error $ "Migration failed: " <> show migrationErr
-    Right (Right ()) -> action pool
+    Left migrationErr -> error $ "Migration failed: " <> show migrationErr
+    Right _ -> action pool
 
 -- | Alias for 'withPgmqDb' kept for parallelism with pgmq-hasql.
 withPgmqPool :: (Pool.Pool -> IO a) -> IO (Either StartError a)
