diff --git a/orville-postgresql.cabal b/orville-postgresql.cabal
--- a/orville-postgresql.cabal
+++ b/orville-postgresql.cabal
@@ -5,7 +5,7 @@
 -- see: https://github.com/sol/hpack
 
 name:           orville-postgresql
-version:        1.1.0.0
+version:        1.1.1.0
 synopsis:       A Haskell library for PostgreSQL
 description:    Orville's goal is to provide a powerful API for applications to access PostgreSQL databases with minimal use of sophisticated language techniques or extensions. See https://github.com/flipstone/orville for more details.
 category:       database, library, postgresql
@@ -184,7 +184,7 @@
     , network-uri ==2.6.*
     , postgresql-libpq >=0.9.4.2 && <0.12
     , random >=1.0 && <2
-    , resource-pool <0.3 || >=0.4 && <0.6
+    , resource-pool >=0.2.2.0 && <0.3 || >=0.4 && <0.6
     , safe-exceptions >=0.1.7 && <0.2
     , text >=1.2 && <1.3 || >=2.0 && <2.2
     , time >=1.9.1 && <1.16
@@ -267,7 +267,7 @@
     , hedgehog >=1.0.5 && <1.7
     , orville-postgresql
     , postgresql-libpq >=0.9.4.2 && <0.12
-    , resource-pool <0.3 || >=0.4 && <0.6
+    , resource-pool >=0.2.2.0 && <0.3 || >=0.4 && <0.6
     , safe-exceptions >=0.1.7 && <0.2
     , text >=1.2 && <1.3 || >=2.0 && <2.2
     , time >=1.9.1 && <1.16
diff --git a/src/Orville/PostgreSQL/Raw/Connection.hs b/src/Orville/PostgreSQL/Raw/Connection.hs
--- a/src/Orville/PostgreSQL/Raw/Connection.hs
+++ b/src/Orville/PostgreSQL/Raw/Connection.hs
@@ -22,6 +22,7 @@
   , StripeOption (OneStripePerCapability, StripeCount)
   , ConnectionPool
   , createConnectionPool
+  , destroyIdleConnections
   , Connection
   , withPoolConnection
   , executeRaw
@@ -44,9 +45,9 @@
 import Data.IORef (IORef, newIORef, readIORef, writeIORef)
 import Data.Maybe (fromMaybe)
 #if MIN_VERSION_resource_pool(0,4,0)
-import Data.Pool (Pool, newPool, defaultPoolConfig, setNumStripes, withResource)
+import Data.Pool (Pool, newPool, defaultPoolConfig, setNumStripes, withResource, destroyAllResources)
 #else
-import Data.Pool (Pool, createPool, withResource)
+import Data.Pool (Pool, createPool, withResource, destroyAllResources)
 #endif
 import qualified Data.Text as T
 import qualified Data.Text.Encoding as Enc
@@ -119,6 +120,22 @@
       linger
       connPerStripe
 #endif
+
+{- | Destroy (close) connections currently in the connection pool, proactively
+freeing the associated resources and returning the pool to an empty state. This
+can be useful when it is known that all connections have become invalid or are
+no longer needed.
+
+Connections in use, such as in 'withPoolConnection', are not considered /in/ the
+pool and will not be immediately affected by 'destroyIdleConnections'.
+
+Any exceptions thrown by the destroy function are ignored.
+
+@since 1.1.1.0
+-}
+destroyIdleConnections :: ConnectionPool -> IO ()
+destroyIdleConnections (ConnectionPool pool) =
+  destroyAllResources pool
 
 {- | Values for the 'connectionPoolStripes' field of 'ConnectionOptions'.
 
diff --git a/test/Test/Connection.hs b/test/Test/Connection.hs
--- a/test/Test/Connection.hs
+++ b/test/Test/Connection.hs
@@ -28,6 +28,8 @@
     , prop_truncateValuesAtUnsafeNulByte pool
     , prop_errorOnInvalidSql pool
     , prop_returningAConnectionToPoolWithOpenTransactionCausesException pool
+    , prop_acquiredConnectionNotDestroyed pool
+    , prop_poolUsableAfterDestroyingConnections pool
     ]
 
 prop_safeOrUnsafeNonNullBytes :: Property.NamedDBProperty
@@ -137,7 +139,7 @@
 
         Conn.sqlExecutionErrorSqlState err === Just syntaxErrorState
       Right _ -> do
-        HH.footnote "Expected 'executeRow' to return failure, but it did not"
+        HH.footnote "Expected 'executeRaw' to return failure, but it did not"
         HH.failure
 
 prop_returningAConnectionToPoolWithOpenTransactionCausesException :: Property.NamedDBProperty
@@ -156,3 +158,55 @@
       Right _ -> do
         HH.footnote "Expected 'withPoolConnection' to return failure, but it did not"
         HH.failure
+
+prop_acquiredConnectionNotDestroyed :: Property.NamedDBProperty
+prop_acquiredConnectionNotDestroyed =
+  Property.namedDBProperty "destroying idle connections in the pool does not affect connections already acquired" $ \pool -> do
+    textBytes <- fmap Enc.encodeUtf8 . HH.forAll $ PgGen.pgText (Range.linear 0 256)
+
+    value <-
+      MIO.liftIO . Conn.withPoolConnection pool $ \connection -> do
+        Conn.destroyIdleConnections pool
+        result <-
+          Conn.executeRaw
+            connection
+            (B8.pack "SELECT $1::text")
+            [ Just $ PgTextFormatValue.fromByteString textBytes
+            ]
+
+        LibPQ.getvalue' result 0 0
+
+    value === Just textBytes
+
+prop_poolUsableAfterDestroyingConnections :: Property.NamedDBProperty
+prop_poolUsableAfterDestroyingConnections =
+  Property.namedDBProperty "the connection pool can be used after destroying idle connections" $ \pool -> do
+    textBytes1 <- fmap Enc.encodeUtf8 . HH.forAll $ PgGen.pgText (Range.linear 0 256)
+    textBytes2 <- fmap Enc.encodeUtf8 . HH.forAll $ PgGen.pgText (Range.linear 0 256)
+
+    value1 <-
+      MIO.liftIO . Conn.withPoolConnection pool $ \connection -> do
+        result <-
+          Conn.executeRaw
+            connection
+            (B8.pack "SELECT $1::text")
+            [ Just $ PgTextFormatValue.fromByteString textBytes1
+            ]
+
+        LibPQ.getvalue' result 0 0
+
+    MIO.liftIO $ Conn.destroyIdleConnections pool
+
+    value2 <-
+      MIO.liftIO . Conn.withPoolConnection pool $ \connection -> do
+        result <-
+          Conn.executeRaw
+            connection
+            (B8.pack "SELECT $1::text")
+            [ Just $ PgTextFormatValue.fromByteString textBytes2
+            ]
+
+        LibPQ.getvalue' result 0 0
+
+    value1 === Just textBytes1
+    value2 === Just textBytes2
