diff --git a/src/Database/Postgres/Temp/Internal.hs b/src/Database/Postgres/Temp/Internal.hs
--- a/src/Database/Postgres/Temp/Internal.hs
+++ b/src/Database/Postgres/Temp/Internal.hs
@@ -15,7 +15,7 @@
 import System.Posix.Signals
 import qualified Database.PostgreSQL.Simple as PG
 import qualified Data.ByteString.Char8 as BSC
-import Control.Monad (void)
+import Control.Monad (void, forever)
 import Network.Socket.Free (openFreePort)
 import Data.Foldable
 import Control.Concurrent.Async(race_)
@@ -183,7 +183,8 @@
             traverse_ (throwIO . StartPostgresFailed postgresOptions)
 
     logger WaitForDB
-    waitForDB (makeConnectionString "template1") `race_` checkForCrash
+    waitForDB (makeConnectionString "template1") `race_`
+      forever (checkForCrash >> threadDelay 100000)
 
     logger CreateDB
     let createDBHostArgs = case socketType of
diff --git a/test/Database/Postgres/Temp/InternalSpec.hs b/test/Database/Postgres/Temp/InternalSpec.hs
--- a/test/Database/Postgres/Temp/InternalSpec.hs
+++ b/test/Database/Postgres/Temp/InternalSpec.hs
@@ -59,9 +59,14 @@
       doesDirectoryExist mainFilePath `shouldReturn` False
       countPostgresProcesses `shouldReturn` beforePostgresCount
 
-    it "can override settings" $ \_ -> do
+    it "can override settings" $ \mainFilePath -> do
       let expectedDuration = "100ms"
-      bracket (start [("log_min_duration_statement", expectedDuration)])
+      stdOut <- mkDevNull
+      stdErr <- mkDevNull
+      bracket (startWithLogger (const $ pure ()) Unix
+                [("log_min_duration_statement", expectedDuration)]
+                mainFilePath stdOut stdErr
+                )
               (either (\_ -> return ()) (void . stop)) $ \result -> do
         db <- case result of
                 Right x  -> return x
@@ -73,7 +78,7 @@
     it "dies promptly when a bad setting is passed" $ \mainFilePath -> do
       stdOut <- mkDevNull
       stdErr <- mkDevNull
-      r <- timeout 5000000 $ startWithLogger print Unix 
+      r <- timeout 5000000 $ startWithLogger (const $ pure ()) Unix
             [ ("log_directory", "/this/does/not/exist")
             , ("logging_collector", "true")
             ] mainFilePath stdOut stdErr
@@ -94,11 +99,11 @@
       stdOut <- mkDevNull
       stdErr <- mkDevNull
       bracket (fromRight (error "failed to start db") <$> startWithLogger (\_ -> return ()) Unix [] mainFilePath stdOut stdErr) stop $ \db -> do
-        bracket (connectPostgreSQL $ BSC.pack $ connectionString db) close $ \_ -> 
+        bracket (connectPostgreSQL $ BSC.pack $ connectionString db) close $ \_ ->
           bracket (connectPostgreSQL $ BSC.pack $ connectionString db) close $ \conn2 -> do
             query_ conn2 "SELECT COUNT(*) FROM pg_stat_activity" `shouldReturn` [Only (2 :: Int)]
 
             terminateConnections db
 
-            bracket (connectPostgreSQL $ BSC.pack $ connectionString db) close $ \conn3 -> 
+            bracket (connectPostgreSQL $ BSC.pack $ connectionString db) close $ \conn3 ->
               query_ conn3 "SELECT COUNT(*) FROM  pg_stat_activity" `shouldReturn` [Only (1 :: Int)]
diff --git a/tmp-postgres.cabal b/tmp-postgres.cabal
--- a/tmp-postgres.cabal
+++ b/tmp-postgres.cabal
@@ -1,5 +1,5 @@
 name:                tmp-postgres
-version:             0.1.2.1
+version:             0.1.2.2
 synopsis: Start and stop a temporary postgres for testing
 description:
  This module provides functions creating a temporary postgres instance on a random port for testing.
