Opened 21 months ago
Last modified 21 months ago
#34456 closed Uncategorized
Add a way to set allow_cascade=True in _fixture_teardown() — at Initial Version
Reported by: | Howard Cox | Owned by: | nobody |
---|---|---|---|
Component: | Testing framework | Version: | 4.2 |
Severity: | Normal | Keywords: | |
Cc: | Tom Carrick | Triage Stage: | Unreviewed |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
We use [django-timescaledb](https://github.com/schlunsen/django-timescaledb) as our database backend and ran into a problem with some of our tests for django migrations on tables using timescale compression.
I [wrote up our problem on django-timescaledb
back in October](https://github.com/schlunsen/django-timescaledb/issues/40), but it essentially boils down to:
django.test.testcases.TransactionTestCase._fixture_teardown()
callsdjango.db.backends.postgresql.operations.sql_flush()
and truncates every table at the end of tests.- In timescaledb, compressed hypertables create "chunks" as tables with a subset of the hypertable's data.
- Because we have foreign keys in some of our hypertables, the chunk tables also get that foreign-key rule.
- Those chunk tables are transparent to Django, and so are not in the list to be truncated.
- And so, the truncation fails, because the chunk tables still reference some of the data being truncated.
The easiest solution seems to be to allow _fixture_teardown()
to opt-in to setting allow_cascade=True
when truncating.
We're happy to submit a PR if this proposal gets accepted.