diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -48,3 +48,7 @@
 
 1.13.1.2
   #124 Respect database name in withNewDbConfig
+
+1.14.0.0
+  #126 Check for an empty data directory to give a better error message
+  #114 Silent postgresql.conf
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
@@ -220,14 +220,44 @@
     }
   }
 
--- | The same as 'defaultConfig' but all the handles are set to @/dev/null@.
---   See 'silentProcessConfig' as well.
---
---   @since 1.12.0.0
+
+--   @since 1.14.0.0
+silentPostgresConfig :: [String]
+silentPostgresConfig =
+  [ "shared_buffers = 12MB"
+  , "fsync = off"
+  , "synchronous_commit = off"
+  , "full_page_writes = off"
+  , "log_min_messages = PANIC"
+  , "log_min_error_statement = PANIC"
+  , "log_statement = none"
+  , "client_min_messages = ERROR"
+  ]
+
+{-|
+The similar to 'defaultConfig' but all the handles are set to @/dev/null@.
+and uses a @postgresql.conf@ which disables logging:
+
+ @
+   shared_buffers = 12MB
+   fsync = off
+   synchronous_commit = off
+   full_page_writes = off
+   log_min_messages = PANIC
+   log_min_error_statement = PANIC
+   log_statement = none
+   client_min_messages = ERROR
+ @
+
+See 'silentProcessConfig' as well.
+
+@since 1.14.0.0
+-}
 silentConfig :: Config
 silentConfig = defaultConfig <> mempty
   { plan = mempty
-    { initDbConfig = pure silentProcessConfig
+    { postgresConfigFile = silentPostgresConfig
+    , initDbConfig = pure silentProcessConfig
     , postgresPlan = mempty
         { postgresConfig = silentProcessConfig
         }
diff --git a/src/Database/Postgres/Temp/Internal/Core.hs b/src/Database/Postgres/Temp/Internal/Core.hs
--- a/src/Database/Postgres/Temp/Internal/Core.hs
+++ b/src/Database/Postgres/Temp/Internal/Core.hs
@@ -9,7 +9,7 @@
 import           Control.Concurrent (threadDelay)
 import           Control.Concurrent.Async (race_, withAsync)
 import           Control.Exception
-import           Control.Monad (forever, (>=>))
+import           Control.Monad (forever, (>=>), unless)
 import qualified Data.ByteString.Char8 as BSC
 import           Data.Foldable (for_)
 import           Data.IORef
@@ -18,6 +18,7 @@
 import           Data.Typeable
 import qualified Database.PostgreSQL.Simple as PG
 import qualified Database.PostgreSQL.Simple.Options as Client
+import           System.Directory
 import           System.Exit (ExitCode(..))
 import           System.IO
 import           System.Posix.Signals (sigQUIT, signalProcess)
@@ -77,6 +78,9 @@
   | ConnectionTimedOut
   -- ^ Timed out waiting for @postgres@ to accept a connection
   | DeleteDbError PG.SqlError
+  | EmptyDataDirectory
+  -- ^ This will happen if a 'Database.Postgres.Temp.Config.Plan' is missing a
+  --   'initDbConfig'.
   deriving (Show, Eq, Typeable)
 
 instance Exception StartError
@@ -349,6 +353,11 @@
   completePlanLogger $ StartPlan $ show $ pretty plan
   for_ completePlanInitDb $ executeProcessAndTee "initdb" >=>
     \(res, stdOut, stdErr) -> throwIfNotSuccess (InitDbFailed stdOut stdErr) res
+
+  -- Try to give a better error if @initdb@ was not
+  -- configured to run.
+  versionFileExists <- doesFileExist $ completePlanDataDirectory <> "/PG_VERSION"
+  unless versionFileExists $ throwIO EmptyDataDirectory
 
   -- We must provide a config file before we can start postgres.
   writeFile (completePlanDataDirectory <> "/postgresql.conf") completePlanConfig
diff --git a/test/Main.hs b/test/Main.hs
--- a/test/Main.hs
+++ b/test/Main.hs
@@ -1,6 +1,6 @@
 import           Control.Concurrent
 import           Control.Exception
-import           Control.Monad ((<=<), void)
+import           Control.Monad ((<=<), void, unless)
 import           Data.Function
 import qualified Data.Map.Strict as Map
 import           Data.Monoid
@@ -35,10 +35,19 @@
 withNewDbConfig' config db = either throwIO pure <=<
   withNewDbConfig config db
 
+
+countPostgresProcesses :: IO Int
+countPostgresProcesses = do
+  -- TODO we should restrict to child process
+  (exitCode, xs, _) <-  readProcessWithExitCode "pgrep" ["postgres"] []
+
+  unless (exitCode == ExitSuccess || exitCode == ExitFailure 1) $ throwIO exitCode
+
+  pure $ length $ lines xs
+
 testSuccessfulConfigNoTmp :: ConfigAndAssertion -> IO ()
 testSuccessfulConfigNoTmp ConfigAndAssertion {..} = do
-  -- ensure the count of postgres processes that are child processes before is 0
-  -- for each exception location
+  initialPostgresCount <- countPostgresProcesses
   withConfig' cConfig $ \db -> do
     cAssert db
     -- check for a valid connection
@@ -47,7 +56,7 @@
 
     one `shouldBe` (1 :: Int)
 
-  -- ensure the count of postgres processes that are child processes after is 0
+  countPostgresProcesses `shouldReturn` initialPostgresCount
 
 testSuccessfulConfig :: ConfigAndAssertion -> IO ()
 testSuccessfulConfig configAssert = do
@@ -389,7 +398,7 @@
           }
 
     withConfig dontTimeout (const $ pure ())
-      `shouldReturn` Left (StartPostgresFailed $ ExitFailure 1)
+      `shouldReturn` Left EmptyDataDirectory
 
   it "initdb with non-empty data directory fails with InitDbFailed" $
     withTempDirectory "/tmp" "tmp-postgres-test" $ \dirPath -> do
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:             1.13.1.2
+version:             1.14.0.0
 synopsis: Start and stop a temporary postgres
 description: Start and stop a temporary postgres. See README.md
 homepage:            https://github.com/jfischoff/tmp-postgres#readme
