tmp-postgres
provides functions for creating a temporary postgres
instance.
By default it will create a temporary data directory and
a temporary directory for a UNIX domain socket for postgres
to listen on.
Here is an example using the exception-safe 'with' function:
with $ \db -> bracket
(connectPostgreSQL (toConnectionString db))
close $
\conn -> execute_ conn "CREATE TABLE foo (id int)"
To extend or override the defaults use withConfig
(or startConfig
).
tmp-postgres
ultimately calls initdb
(optionally) , postgres
and
createdb
(optionally).
All of the command line, environment variables and configuration files that are generated by default for the respective executables can be extended.
In general tmp-postgres
is useful if you want a clean temporary
postgres
and do not want to worry about clashing with an existing
postgres instance (or needing to ensure postgres
is already running).
Here are some different use cases for tmp-postgres
and their respective
configurations:
- The default 'with' and 'start' functions can be used to make a sandboxed temporary database for testing.
- By disabling
initdb
one could run a temporary isolated postgres on a base backup to test a migration. - By using the 'stopPostgres' and 'withRestart' functions one can test backup strategies.
WARNING!!
Ubuntu's PostgreSQL installation does not put initdb
on the PATH
. We need to add it manually.
The necessary binaries are in the /usr/lib/postgresql/VERSION/bin/
directory, and should be added to the PATH
echo "export PATH=$PATH:/usr/lib/postgresql/VERSION/bin/" >> /home/ubuntu/.bashrc
$ brew install postgres
$ stack install tmp-postgres
Ubuntu's PostgreSQL installation does not put initdb
on the PATH. We need to add it manually.
$ sudo apt-get install postgresql-VERSION
$ echo "export PATH=$PATH:/usr/lib/postgresql/VERSION/bin/" >> /home/ubuntu/.bashrc
$ stack install tmp-postgres
Assuming you are using one of the standard workflow containers, simply add workflow steps which install postgresql as above. For example,
jobs:
build:
runs-on: ubuntu-18.04
steps:
- name: "Install postgresql"
run: "sudo apt-get update && sudo apt-get install postgresql-10"
# ...
- name: "Run test"
run: |
export PATH=$PATH:/usr/lib/postgresql/10/bin
stack test