Skip to main content

Quickly create Postgres databases, e.g. for testing

Project description

pg_temp

pg_temp build status

Provides a simple class for creating a temporary userland Postgres db server.

The TempDB() class constructor will set up the database server in a temporary directory. If any databases are specified they are created inside the newly created server. The class provides a cleanup() method for stopping the server and disposing of the temporary files.

The module also provides an init_temp_db() function for managing the TempDB class as a singleton. This is useful for scenarios where you want to import in more than one module, but ensure that they all use the same database (and that the server and database are only created once). For example, this is handy in unit test code where you want to be able to test a single file or use a test runner to run tests in multiple files with only a single database.

init_temp_db() also registers an atexit handler to cleanup the temp database when the process exits.

Examples:

Create a temporary server with a database called 'testdb':

from pg_temp import TempDB
temp_db = TempDB(databases=['testdb'])

# you can connect to this database using temp_db's pg_socket_dir
connection = psycopg2.connect(host=temp_db.pg_socket_dir, database='testdb')

# ... do stuff...

temp_db.cleanup()

Alternatively, useful in a test runner:

import pg_temp
temp_db = pg_temp.init_temp_db(databases=['testdb'])
# repeat above in multiple modules

# you can connect to this database using temp_db's pg_socket_dir
connection = psycopg2.connect(host=temp_db.pg_socket_dir, database='testdb')

# ... do stuff...
# the db is automatically cleaned up when the process exits

Last an interactive example:

>>> import pg_temp
>>> import psycopg2
>>> temp_db = pg_temp.TempDB(databases=['testdb'])
Creating temp PG server... done
(Connect on: `psql -h /var/folders/d7/n3_h9vnn3w3bbmsnbdb73fmw0000gn/T/pg_tmp_OQMGwC/socket`)
>>> connection = psycopg2.connect(host=temp_db.pg_socket_dir, database='testdb')
>>> cur = connection.cursor()
# The rest is stolen from psycopg's documentation.  You get the idea...
>>> cur.execute("CREATE TABLE test (id serial PRIMARY KEY, num integer, data varchar);")
>>> cur.execute("INSERT INTO test (num, data) VALUES (%s, %s)",
... (100, "abc'def"))
>>> cur.execute("SELECT * FROM test;")
>>> cur.fetchone()
(1, 100, "abc'def")
>>> connection.close()
>>> temp_db.cleanup()

Development

Install dependencies for testing:

# Create a virtualenv
virtualenv venv

# Activate the virtualenv
. venv/bin/activate

# Install dependencies for testing
pip install -r requirements-dev.txt

Run the unit tests directly:

make test

To test against multiple Python versions, without needing to use Virtualenv directly, run the unit tests using tox:

make tox

Check code style using flake8:

make check

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pg_temp-0.9.0.tar.gz (7.1 kB view details)

Uploaded Source

Built Distributions

pg_temp-0.9.0-py3-none-any.whl (7.4 kB view details)

Uploaded Python 3

pg_temp-0.9.0-py2.py3-none-any.whl (7.1 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file pg_temp-0.9.0.tar.gz.

File metadata

  • Download URL: pg_temp-0.9.0.tar.gz
  • Upload date:
  • Size: 7.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.22.0 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.8.10

File hashes

Hashes for pg_temp-0.9.0.tar.gz
Algorithm Hash digest
SHA256 e771e36eb489507f22be73eaf8357a723cc1e559883003e79d73a3aa7b965474
MD5 4d76e5089d0c534c97bfc5b57866552c
BLAKE2b-256 2f7fd2f8dc29774a3226921c484f853bcc4478e0e534dbc0ceb75ee410129e5b

See more details on using hashes here.

File details

Details for the file pg_temp-0.9.0-py3-none-any.whl.

File metadata

  • Download URL: pg_temp-0.9.0-py3-none-any.whl
  • Upload date:
  • Size: 7.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.22.0 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.8.10

File hashes

Hashes for pg_temp-0.9.0-py3-none-any.whl
Algorithm Hash digest
SHA256 92d5c68ea9ee50263fb85341e3a8804511398324a11f6d8eaeb365e589ed4fc3
MD5 f5863f82f1e530c5c7d14b88a35b173d
BLAKE2b-256 4f20ea8a13fd114745ae44137ae728649e7b9d6d30465420607affce07d33383

See more details on using hashes here.

File details

Details for the file pg_temp-0.9.0-py2.py3-none-any.whl.

File metadata

  • Download URL: pg_temp-0.9.0-py2.py3-none-any.whl
  • Upload date:
  • Size: 7.1 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.4.2 requests/2.22.0 setuptools/45.2.0 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.8.2

File hashes

Hashes for pg_temp-0.9.0-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 1ca9647b30751b4474664d676491e5c176880f038d6b84cbb9fab2597db9bcf1
MD5 6c5c72d543453d662473fcf141fd6d03
BLAKE2b-256 a2eaecf3944cf5f7f87a3190afb655de135537fa162123459dfaf98460f44620

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page