{-| This module provides functions greating a temporary postgres instance on a random port for testing. @ result <- 'start' [] case result of Left err -> print err Right tempDB -> do -- Do stuff 'stop' tempDB @ The are few different methods for starting @postgres@ which provide different methods of dealing with @stdout@ and @stderr@. The start methods use a config based on the one used by [pg_tmp](http://ephemeralpg.org/), but can be overriden by in different values to the first argument of the start functions. -} {-# LANGUAGE RecordWildCards, LambdaCase, ScopedTypeVariables #-} module Database.Postgres.Temp ( -- * Types DB (..) , StartError (..) -- * Starting @postgres@ -- $options , start , startAndLogToTmp , startWithHandles -- * Stopping @postgres@ , stop ) where import Database.Postgres.Temp.Internal {- $options 'startWithHandles' is the most general way to start postgres. It allows the user to pass in it's own handles for @stdout@ and @stderr@. 'start' and 'startAndLogToTmp' both call 'startWithHandles' passing in different handles. 'start' uses the current process's @stdout@ and @stderr@ and 'startAndLogToTmp' logs to files in the 'mainDir'. @postgres@ is started with a default config with the following options: @ listen_addresses = '' shared_buffers = 12MB fsync = off synchronous_commit = off full_page_writes = off log_min_duration_statement = 0 log_connections = on log_disconnections = on unix_socket_directories = {mainDir} client_min_messages = ERROR @ Any of the options can be overriden by passing in a different value when starting @ Right db <- 'start' [("log_min_duration_statement", "1000")] @ -}