Opened 20 months ago

Last modified 20 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() calls django.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.

Change History (0)

Note: See TracTickets for help on using tickets.
Back to Top