Opened 3 years ago
Last modified 3 years ago
#34456 closed Uncategorized
Add a way to set allow_cascade=True in _fixture_teardown() — at Version 1
| 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 (last modified by )
We use 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.