Bringing all of PostgreSQL's awesomeness to Django.
Project description
| :white_check_mark: | Tests | |
| :memo: | License | |
| :package: | PyPi | |
| :four_leaf_clover: | Code coverage | |
| Django Versions | 2.0, 2.1, 2.2, 3.0, 3.1, 3.2, 4.0, 4.1, 4.2, 5.0, 5.1, 5.2, 6.0.4 | |
| Python Versions | 3.6, 3.7, 3.8, 3.9, 3.10, 3.11, 3.12, 3.13 | |
| Psycopg Versions | 2, 3 | |
| :book: | Documentation | Read The Docs |
| :warning: | Upgrade | Upgrade from v1.x |
| :checkered_flag: | Installation | Installation Guide |
| :fire: | Features | Features & Documentation |
| :droplet: | Future enhancements | Potential features |
django-postgres-extra aims to make all of PostgreSQL's awesome features available through the Django ORM. We do this by taking care of all the hassle. As opposed to the many small packages that are available to try to bring a single feature to Django with minimal effort. django-postgres-extra goes the extra mile, with well tested implementations, seamless migrations and much more.
With seamless we mean that any features we add will work truly seamlessly. You should not have to manually modify your migrations to work with fields and objects provided by this package.
:warning: This README is for v2. See the v1 branch for v1.x.
Major features
-
Conflict handling (atomic upsert)
Adds support for PostgreSQL's
ON CONFLICTsyntax for inserts. SupportsDO UPDATEandDO NOTHING. Single statement, atomic and concurrency safe upserts. Supports conditional updates as well. -
Table partitioning
Adds support for PostgreSQL 11.x declarative table partitioning. Integrated into Django migrations. Supports all types of partitioning. Includes a command to automatically create time-based partitions.
-
Views & materialized views
Adds support for creating views & materialized views as any other model. Integrated into Django migrations.
-
Locking models & tables
Support for explicit table-level locks.
-
Creating/dropping schemas
Support for managing PostgreSQL schemas.
-
Truncating tables
Support for
TRUNCATE TABLEstatements (including cascading).
For Django 3.1 and older:
- Conditional unique index
- Case insensitive index
For Django 2.2 and older:
- Unique index
- HStore unique and required constraints on specific HStore keys
Working with the code
Prerequisites
- PostgreSQL 14 or newer.
- Django 5.x or newer.
- Python 3.11 or newer.
These are just for local development. CI for code analysis etc runs against these. Tests will pass on all Python, Django and PostgreSQL versions documented. Linting, formatting and type-checking the code might not work on other Python and/or Django versions.
Getting started
-
Clone the repository:
λ git clone https://github.com/SectorLabs/django-postgres-extra.git -
Create a virtual environment:
λ cd django-postgres-extra λ virtualenv env λ source env/bin/activate -
Create a postgres user for use in tests (skip if your default user is a postgres superuser):
λ createuser --superuser psqlextra --pwprompt λ export DATABASE_URL=postgres://psqlextra:<password>@localhost/psqlextraHint: if you're using virtualenvwrapper, you might find it beneficial to put the
exportline in$VIRTUAL_ENV/bin/postactivateso that it's always available when using this virtualenv. -
Install the development/test dependencies:
λ pip install -r requirements-test.txt -
Run the tests:
λ poe test -
Run the benchmarks:
λ poe benchmark -
Auto-format code, sort imports and auto-fix linting errors:
λ poe fix
Project details
Release history Release notifications | RSS feed
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 xdjango_postgres_extra-2.1.0.tar.gz.
File metadata
- Download URL: xdjango_postgres_extra-2.1.0.tar.gz
- Upload date:
- Size: 107.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
83b0e98e6869f6b03f479473eb7626eb764450ed407b3a7989e595fa3c0c43aa
|
|
| MD5 |
0396ca9031f99a5c73d3dc94e9324507
|
|
| BLAKE2b-256 |
70444afd1ab85260912559db891d9051c41d34b26c74f2b74aa3020cc4c6735d
|
File details
Details for the file xdjango_postgres_extra-2.1.0-py3-none-any.whl.
File metadata
- Download URL: xdjango_postgres_extra-2.1.0-py3-none-any.whl
- Upload date:
- Size: 101.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7b8da7317c4e39bc1623e651ab9a7395344b8d71381428f9fc36ae2604e784dc
|
|
| MD5 |
28537974b14618d0ed8fd4d9dd6a87b4
|
|
| BLAKE2b-256 |
705071635c2bdcc40c633f705699301b6bd56322da1437c6524897d69de5d8bf
|