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 details)

Uploaded Source

Built Distribution

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

Uploaded Python 3

File details

Details for the file django-pg-ddl-extras-0.1.0.tar.gz.

File metadata

  • Download URL: django-pg-ddl-extras-0.1.0.tar.gz
  • Upload date:
  • Size: 4.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.2.0a2 CPython/3.10.5 Linux/5.18.3-arch1-1

File hashes

Hashes for django-pg-ddl-extras-0.1.0.tar.gz
Algorithm Hash digest
SHA256 7717499cf184fe17bcf894853a813844c7ac3aa9656ad1704f2b7439ed7c89ed
MD5 ea9086fd83b4ec2cc624e4ce1941b138
BLAKE2b-256 5410bf757adc99e36f18c5c1d41f1ca53309a2162f48e08b3942b78592c93875

See more details on using hashes here.

File details

Details for the file django_pg_ddl_extras-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for django_pg_ddl_extras-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 9fd82658768168530980f8985b697737ba142ca3a6dee78bd415e8bdfb14d040
MD5 e6265d477534dc91477f8dce61d2fd09
BLAKE2b-256 8bdfc2d26364c0d22a77663e23cf54ae43a64ad91f193dfdf7333c7a7060c230

See more details on using hashes here.

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