Skip to main content

Postgres declarative functions for Django

Project description

django-pg-ddl-extras

A tiny library that implements declarative postgres function definitions for Django.

Requirements

  • Python >= 3.7
  • Django >= 3.2

Usage

In the below example, we create a function that is run as part of a constraint trigger.

from django_pg_ddl_extras import (
    PostgresTriggerFunctionDefinition,
    ConstraintTrigger,
    TriggerEvent,
)
from django.db import models
from django.db.models.constraints import Deferrable

# Write a custom constraint in SQL
# In order to get picked up by the migration engine, we include the function definition
# as part of the class `Meta.constraints` list.
# Unfortunately, Django does not seem to have a cleaner way to define this yet.
custom_function = PostgresTriggerFunctionDefinition(
    name="my_function",
    body="""
DECLARE
BEGIN
    IF (TG_OP = 'DELETE') THEN
        RETURN OLD;
    END IF;
    IF NOT FOUND THEN
        RAISE EXCEPTION
            'This is an example constraint error'
            USING ERRCODE = 23514;
    END IF;
    RETURN NEW;
END;
    """,
)

class MyModel(models.Model):
    class Meta:
        constraints = [
            custom_function,
            ConstraintTrigger(
                name="my_trigger",
                events=[TriggerEvent.UPDATE, TriggerEvent.INSERT, TriggerEvent.DELETE],
                deferrable=Deferrable.DEFERRED,
                function=custom_function.as_func(),
            ),
        ]

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

django-pg-ddl-extras-0.1.0.tar.gz (4.4 kB view hashes)

Uploaded Source

Built Distribution

django_pg_ddl_extras-0.1.0-py3-none-any.whl (5.2 kB view hashes)

Uploaded Python 3

Supported by

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