| Safe Haskell | None |
|---|---|
| Language | Haskell2010 |
Database.Postgres.Temp.Internal
Description
This module provides the high level functions that are re-exported
by Database.Postgres.Temp. Additionally it includes some
identifiers that are used for testing but are not exported.
Synopsis
- data DB = DB {}
- toConnectionString :: DB -> ByteString
- toConnectionOptions :: DB -> Options
- toDataDirectory :: DB -> FilePath
- makeDataDirPermanent :: DB -> DB
- toTemporaryDirectory :: DB -> FilePath
- defaultPostgresConfig :: [String]
- defaultConfig :: Config
- defaultPostgresConf :: [String] -> Config
- startConfig :: Config -> IO (Either StartError DB)
- start :: IO (Either StartError DB)
- stop :: DB -> IO ()
- stopPostgres :: DB -> IO ExitCode
- restart :: DB -> IO (Either StartError DB)
- reloadConfig :: DB -> IO ()
- withConfig :: Config -> (DB -> IO a) -> IO (Either StartError a)
- with :: (DB -> IO a) -> IO (Either StartError a)
- withRestart :: DB -> (DB -> IO a) -> IO (Either StartError a)
- optionsToDefaultConfig :: Options -> Config
- prettyPrintConfig :: Config -> String
- prettyPrintDB :: DB -> String
Documentation
Handle for holding temporary resources, the postgres process handle
and postgres connection information. The DB also includes the
final plan used to start initdb, createdb and
postgres. See toConnectionString or toConnectionOptions
for converting a DB to postgresql connection string.
Constructors
| DB | |
Fields
| |
toConnectionString :: DB -> ByteString Source #
Convert a DB to a connection string. Alternatively one can access the
Options using toConnectionOptions
toDataDirectory :: DB -> FilePath Source #
Access the data directory. This was either generated or
specified explicitly when creating the Config
makeDataDirPermanent :: DB -> DB Source #
Make the data directory permanent. Useful for debugging.
If you are using with or withConfig this function will
not modify the DB that is passed for cleanup. You will
need to setup your own bracket like
bracket (fmapmakeDataDirPermanentstart) (either memptystop)
toTemporaryDirectory :: DB -> FilePath Source #
Get the directory that is used to create other temporary directories
defaultPostgresConfig :: [String] Source #
Default postgres options
defaultConfig :: Config Source #
The default configuration. This will create a database called "postgres"
via initdb (it's default behavior).
It will create a temporary directory for the data and a temporary directory
for a unix socket on a random port.
Additionally it will use the following "postgresql.conf"
which is optimized for performance.
shared_buffers = 12MB fsync = off synchronous_commit = off full_page_writes = off log_min_duration_statement = 0 log_connections = on log_disconnections = on client_min_messages = ERROR
defaultConfig also passes the --no-sync flag to initdb.
If you would like to customize this behavior you can start with the
defaultConfig and overwrite fields or combine a defaultConfig with another Config
using <> (mappend).
Alternatively you can eschew defaultConfig altogether, however
your postgres might start and run faster if you use
defaultConfig.
defaultConfig also sets the initDbConfig to
pure standardProcessConfig and
postgresConfig to standardProcessConfig.
To append additional lines to "postgresql.conf" file create a
custom Config like the following.
custom = defaultConfig <> mempty
{ plan = mempty
{ postgresConfigFile =
[ "wal_level = replica"
, "archive_mode = on"
, "max_wal_senders = 2"
, "fsync = on"
, "synchronous_commit = on"
]
}
}
Or using the provided lenses and your favorite lens library
custom = defaultConfig &planL.postgresConfigFile<>~ [ "wal_level = replica" , "archive_mode = on" , "max_wal_senders = 2" , "fsync = on" , "synchronous_commit = on" ]
This is common enough there is defaultPostgresConf which
is a helper to do this.
As an alternative to using defaultConfig one could create a
config from connections parameters using optionsToDefaultConfig
defaultPostgresConf :: [String] -> Config Source #
mappend the defaultConfig with a Config that provides additional
"postgresql.conf" lines. Equivalent to
defaultPostgresConf extra = defaultConfig <> mempty
{ plan = mempty
{ postgresConfigFile = extra
}
}
or with lenses
defaultPostgresConf extra = defaultConfig & planL . postgresConfigFile <>~ extra
Arguments
| :: Config |
|
| -> IO (Either StartError DB) |
Create zero or more temporary resources and use them to make a Config.
The passed in config is inspected and a generated config is created. The final config is built by
generated <> extra
Returns a DB that requires cleanup. startConfig should be
used with a bracket and stop, e.g.
withConfig::Config-> (DB-> IO a) -> IO (EitherStartErrora)withConfigplan f =bracket(startConfigplan) (either memptystop) $ either (pure . Left) (fmap Right . f)
or just use withConfig. If you are calling startConfig you
probably want withConfig anyway.
Based on the value of socketClass a "postgresql.conf" is created with
listen_addresses = 'IP_ADDRESS'
if it is IpSocket. If is UnixSocket then the lines
listen_addresses = '' unix_socket_directories = 'SOCKET_DIRECTORY'
are added.
start :: IO (Either StartError DB) Source #
Default start behavior. Equivalent to calling startConfig with the
defaultConfig
Stop the postgres process and cleanup any temporary resources that
might have been created.
stopPostgres :: DB -> IO ExitCode Source #
Only stop the postgres process but leave any temporary resources.
Useful for testing backup strategies when used in conjunction with
restart or withRestart.
reloadConfig :: DB -> IO () Source #
Reload the configuration file without shutting down. Calls
pg_reload_conf().
Arguments
| :: Config |
|
| -> (DB -> IO a) |
|
| -> IO (Either StartError a) |
Exception safe database create with options. See startConfig for more
details. Calls stop even in the face of exceptions.
Arguments
| :: (DB -> IO a) |
|
| -> IO (Either StartError a) |
Default expectation safe interface. Equivalent to
with=withConfigdefaultConfig
withRestart :: DB -> (DB -> IO a) -> IO (Either StartError a) Source #
Exception safe version of restart