tmp-postgres: Start and stop a temporary postgres

[ bsd3, library, program, web ] [ Propose Tags ] [ Report a vulnerability ]

tmp-postgres provides functions creating a temporary postgres instance.

By default it will create a temporary directory for the data, a random port for listening and a temporary directory for a UNIX domain socket.

Here is an example using the expection safe with function:

 with $ \db -> bracket (connectPostgreSQL (toConnectionString db)) close $ \conn ->
  execute_ conn "CREATE TABLE foo (id int)"

MacOS and Linux are support. Windows is not.

Requires PostgreSQL 9.3+

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

[Skip to Readme]

Downloads

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees

Candidates

Versions [RSS] 0.1.0.0, 0.1.0.1, 0.1.0.2, 0.1.0.3, 0.1.0.4, 0.1.0.5, 0.1.0.6, 0.1.0.7, 0.1.0.8, 0.1.1.0, 0.1.1.1, 0.1.2.0, 0.1.2.1, 0.1.2.2, 0.2.0.0, 0.3.0.0, 0.3.0.1, 1.0.0.0, 1.0.0.1, 1.0.0.2, 1.0.1.0, 1.2.0.0, 1.2.0.1, 1.2.1.0, 1.3.0.0, 1.4.0.0, 1.5.0.0, 1.6.0.0, 1.7.0.0, 1.7.0.1, 1.7.1.0, 1.8.0.0, 1.9.0.0, 1.9.0.1, 1.9.0.2, 1.10.0.0, 1.11.0.0, 1.12.0.0, 1.12.0.1, 1.13.0.0, 1.13.1.0, 1.13.1.1, 1.13.1.2, 1.14.0.0, 1.14.0.1, 1.14.1.0, 1.15.0.0, 1.15.1.0, 1.15.1.1, 1.16.0.0, 1.16.1.0, 1.17.0.0, 1.18.0.0, 1.19.0.0, 1.19.0.1, 1.20.0.0, 1.20.0.1, 1.21.0.0, 1.21.1.0, 1.21.1.1, 1.22.0.0, 1.23.0.0, 1.23.0.1, 1.23.0.2, 1.23.0.3, 1.24.0.0, 1.25.0.0, 1.25.0.1, 1.26.0.0, 1.27.0.0, 1.27.0.1, 1.27.0.2, 1.27.0.3, 1.27.0.4, 1.28.0.0, 1.28.1.0, 1.29.0.0, 1.29.0.1, 1.30.0.0, 1.30.0.1, 1.31.0.0, 1.31.0.1, 1.31.0.2, 1.31.0.3, 1.32.0.0, 1.32.0.1, 1.33.0.0, 1.34.0.0, 1.34.0.1, 1.34.1.0
Dependencies ansi-wl-pprint, async, base (>=4.6 && <5), bytestring, containers, directory, generic-monoid, port-utils, postgres-options (>=0.2.0.0), postgresql-simple, process (>=1.2.0.0), temporary, transformers, unix [details]
Tested with ghc ==8.6.5
License BSD-3-Clause
Copyright 2017-2019 Jonathan Fischoff
Author Jonathan Fischoff
Maintainer jonathangfischoff@gmail.com
Category Web
Home page https://github.com/jfischoff/tmp-postgres#readme
Source repo head: git clone https://github.com/jfischoff/tmp-postgres
Uploaded by JonathanFischoff at 2019-11-10T00:21:08Z
Distributions
Reverse Dependencies 4 direct, 1 indirect [details]
Downloads 34960 total (224 in the last 30 days)
Rating 2.25 (votes: 2) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs available [build log]
Last success reported on 2019-11-10 [all 1 reports]

Readme for tmp-postgres-1.7.0.1

[back to package description]

Hackage Travis CI Status

tmp-postgres

tmp-postgres provides functions creating a temporary postgres instance. By default it will create a temporary directory for the data, a random port for listening and a temporary directory for a UNIX domain socket.

Here is an example using the expection 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, postgres and createdb. All of the command line, environment variables and configuration files that are generated by default for the respective executables can be extended or overrided.

All tmp-postgres by default is most useful for creating tests by configuring "tmp-postgres" differently it can be used for other purposes.

  • By disabling initdb and createdb one could run a temporary postgres on a base backup to test a migration.
  • By using the stopPostgres and withRestart functions one can test backup strategies.

The level of custom configuration is extensive but with great power comes ability to screw everything up. tmp-postgres doesn't validate any custom configuration and one can easily create a Config that would not allow postgres to start.

Installation

macOS

$ brew install postgres
$ stack install tmp-postgres

Ubuntu

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