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 w
70F5
ant 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