Welcome

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.

Features

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. Single statement, atomic, 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 Postgres schemas.

  • Truncating tables

    Support for TRUNCATE TABLE statements (including cascading).

For Django 3.1 and older:

For Django 2.2 and older:

Overview