#34059: Validation of check constraints on postgres json fields produce invalid
SQL
--------------------------------------------+------------------------
Reporter: Dan LaManna | Owner: (none)
Type: Bug | Status: new
Component: contrib.postgres | Version: 4.1
Severity: Normal | Keywords:
Triage Stage: Unreviewed | Has patch: 0
Needs documentation: 0 | Needs tests: 0
Patch needs improvement: 0 | Easy pickings: 0
UI/UX: 0 |
--------------------------------------------+------------------------
Given a model with constraints within the JSONField:
{{{
class Version(models.Model):
metadata = models.JSONField(blank=True, default=dict)
class Meta:
constraints = [
models.CheckConstraint(
name='version_metadata_has_schema_version',
check=~Q(metadata__schemaVersion=None),
)
]
}}}
The following code produces an error:
{{{
version = Version(metadata={'foo': 'bar'})
version.validate_constraints()
}}}
{{{
WARNING Got a database error calling check() on <Q: (AND: (NOT (AND:
('metadata__schemaVersion', None))))>: operator is not unique: unknown ->
unknown
LINE 1: SELECT 1 AS "_check" WHERE NOT (('{"foo":
"bar"}' -> 'schema...
^
HINT: Could not choose a best candidate operator. You
might need to add explicit type casts
}}}
Internally it's running the following query:
{{{
SELECT 1 AS "_check"
WHERE NOT (('{"foo": "bar"}' -> 'schemaVersion') = 'null')
}}}
This appears similar to https://code.djangoproject.com/ticket/33905.
--
Ticket URL: <https://code.djangoproject.com/ticket/34059>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-updates/0107018382683d5b-e08a10e3-ed85-4862-bd5b-f14c96b34236-000000%40eu-central-1.amazonses.com.