Skip to main content

Bringing all of PostgreSQL's awesomeness to Django.

Project description

django-postgres-extra

https://scrutinizer-ci.com/g/SectorLabs/django-postgres-extra/badges/quality-score.png https://scrutinizer-ci.com/g/SectorLabs/django-postgres-extra/badges/coverage.png https://img.shields.io/:license-mit-blue.svg https://badge.fury.io/py/django-postgres-extra.svg

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.

Browse the documentation at: http://django-postgres-extra.readthedocs.io

Major features

  • Single query, concurrency safe upserts, or safely ignoring a duplicate insert.

  • Unique and not null constraints for HStoreField.

  • Signals for updates.

Installation

  1. Install the package from PyPi:

    $ pip install django-postgres-extra
  2. Add postgres_extra and django.contrib.postgres to your INSTALLED_APPS:

    INSTALLED_APPS = [
        ....
    
        'django.contrib.postgres',
        'psqlextra'
    ]
  3. Set the database engine to psqlextra.backend:

    DATABASES = {
        'default': {
            ...
            'ENGINE': 'psqlextra.backend'
        }
    }
  4. Make sure all models that inherit from psqlextra.models.PostgresModel or use the psqlextra.manager.PostgresManager. Without this, most features do not work.

FAQ - Frequently asked questions

  1. Why do I need to change the database back-end/engine?

    We utilize PostgreSQL’s hstore data type, which allows you to store key-value pairs in a column. In order to create UNIQUE constraints on specific key, we need to create a special type of index. We could do this without a custom database back-end, but it would require everyone to manually write their migrations. By using a custom database back-end, we added support for this. When changing the uniqueness constraint on a HStoreField, our custom database back-end takes care of creating, updating and deleting these constraints/indexes in the database.

  2. I am already using a custom database back-end, can I still use yours?

    Yes. You can set the POSTGRES_EXTRA_DB_BACKEND_BASE setting to your current back-end. This will instruct our custom database back-end to inherit from the database back-end you specified. Warning: this will only work if the base you specified indirectly inherits from the standard PostgreSQL database back-end.

  3. Does this package work with Python 2?

    No. Only Python 3.5 or newer is supported. We’re using type hints. These do not work well under older versions of Python.

  4. Does this package work with Django 1.X?

    No. Only Django 1.10 or newer is supported.

Project details


Release history Release notifications | RSS feed

This version

1.9

Download files

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

Source Distribution

django-postgres-extra-1.9.tar.gz (19.7 kB view details)

Uploaded Source

File details

Details for the file django-postgres-extra-1.9.tar.gz.

File metadata

File hashes

Hashes for django-postgres-extra-1.9.tar.gz
Algorithm Hash digest
SHA256 998c2fed59441b5a30d3b64b9c5d662373c91d23b34e68aa2f914511eca3ddda
MD5 c8b1e6be1086741acb5861d4ca5feea6
BLAKE2b-256 2d5017f1c422f6e16d77f9d48f1698680b94d4a6e809b9b9c62e4968601f0de3

See more details on using hashes here.

Supported by

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