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.

By 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.


Explore the documentation to learn about all features:

  • Conflict handling

    Adds support for PostgreSQL’s ON CONFLICT syntax for inserts. Supports for DO UPDATE and DO NOTHING. In other words; single statement, atomic, concurrency safe upserts.

  • HStore

    Built on top Django’s built-in support for hstore fields. Adds support for indices on keys and unique/required constraints. All of these features integrate well with Django’s migrations sytem.

  • Partial unique index

    Partial (unique) index that only applies when a certain condition is true.

  • Case insensitive index

    Case insensitive index, allows searching a column and ignoring the casing.

  • Table partitioning

    Adds support for PostgreSQL 11.x declarative table partitioning.

  • Truncating tables

    Support for TRUNCATE TABLE statements (including cascading).

  • Locking models & tables

    Support for explicit table-level locks.

  • Creating/dropping schemas

    Support for managing Postgres schemas.