Add your description here
Project description
DBMan
DBMan is an CLI tool to manage PostgreSQL databases running in separate Docker containers. The content of the databases is obtained from pg_dumps of production databases.
It will assign each database to a unique ZFS dataset inside a predefined ZFS dataset. It will allow snapshotting the dataset and restoring the dataset from a snapshot.
Configuration
DBMan uses environment variables for configuration. Copy .env.example to .env and modify the values as needed:
# ZFS configuration
DBMAN_ZFS_DATASET=big/docker-postgres
DBMAN_ZFS_MOUNT_POINT=/mnt/big/docker-postgres
DBMAN_ZFS_COMPRESSION=lz4 # Default compression algorithm for new databases
# Docker configuration
DBMAN_DOCKER_IMAGE=postgres:latest
# PostgreSQL configuration
DBMAN_POSTGRES_USER=postgres
DBMAN_POSTGRES_PASSWORD=postgres
# Database configuration
DBMAN_SQLITE_DB=~/.dbman/dbman.db
You can also override the ZFS compression algorithm using the -c or --compression command line option:
uv run dbman.py -c zstd create mydb dump.sql
Installation
-
You need
uvto run dbman. More info about installing it can be found here https://docs.astral.sh/uv/getting-started/installation/ -
Copy
.env.exampleto.envand configure your environment variables. -
Test it:
uv run dbman.py
Usage
The tool can be used to:
-
create new databases from pg_dumps - it will automatically create a new Docker container with the data from the dump. It will allow naming the container and the database. It will automatically assign a port to the container.
# Create a database with default compression (inherited from parent ZFS dataset) uv run dbman.py create mydb dump.sql # or using the short command uv run dbman.py c mydb dump.sql # Create a database with specific compression uv run dbman.py create -c zstd mydb dump.sql # or using the short command uv run dbman.py c -c zstd mydb dump.sql
-
list all databases and their statuses
uv run dbman.py list # or using the short command uv run dbman.py ls
-
create a snapshot of a database
uv run dbman.py snapshot mydb mysnapshot # or using the short command uv run dbman.py snap mydb mysnapshot
-
restore a database from a snapshot
uv run dbman.py restore mydb mysnapshot # or using the short command uv run dbman.py rest mydb mysnapshot
-
list all snapshots of a database
uv run dbman.py list-snapshots mydb # or using the short command uv run dbman.py lss mydb
-
start a subshell with database environment variables
uv run dbman.py shell mydb # or using the short command uv run dbman.py sh mydb
-
print database environment variables
# Print variables uv run dbman.py env mydb # or using the short command uv run dbman.py e mydb # Export variables to the current shell eval $(uv run dbman.py env --export mydb) # Unset variables from the current shell eval $(uv run dbman.py env --clean mydb)
-
destroy a database
uv run dbman.py destroy mydb # or using the short command uv run dbman.py del mydb
For detailed usage information, run:
uv run dbman.py --help
Note
This tool was also used as a proof-of-concept in creating code by using AI. I started
with a docstring in dbman.py and asked Cursor to create an implementation for me.
It created a functional ~250 lines of code which mostly did what I wanted. When I tweaked
and improved it, I also extensively used AI to do the modifications, rather than coding it
myself.
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file postgres_dbman-0.1.0.tar.gz.
File metadata
- Download URL: postgres_dbman-0.1.0.tar.gz
- Upload date:
- Size: 18.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.7.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
be915bf04857f83270f97852f8a71b51470d4af498df164c6833c53b921d446a
|
|
| MD5 |
c1dbc39ccb8836806f6b05d272f573a9
|
|
| BLAKE2b-256 |
59400f97332cb676d1d5f6b3f9d73195544dcfc7ba64b2e20e1032a49a318541
|
File details
Details for the file postgres_dbman-0.1.0-py3-none-any.whl.
File metadata
- Download URL: postgres_dbman-0.1.0-py3-none-any.whl
- Upload date:
- Size: 18.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.7.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e711006e94d240237ce7115f6000a88ede1643cdafc2732b00e212ee64a5ab96
|
|
| MD5 |
c5a9017a39bce6079e8f5bbec0e8d7c2
|
|
| BLAKE2b-256 |
f369df4b4ff1b14102743c9943be450417fe91c5b320f42e8aabfeb38a0392b4
|