Opened 2 hours ago

Closed 88 minutes ago

Last modified 75 minutes ago

#36774 closed Cleanup/optimization (wontfix)

catch DatabaseError instead of OperationalError in makemigrations check_consistent_history() — at Version 2

Reported by: Piotr Kubiak Owned by:
Component: Migrations Version: 6.0
Severity: Normal Keywords:
Cc: Piotr Kubiak Triage Stage: Unreviewed
Has patch: yes Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: yes UI/UX: no

Description (last modified by Piotr Kubiak)

This is a follow up to #31504.

I am proposing a change to the way that the check_consistent_history() behaves when an error occurs while accessing the database during the makemigrations command. Currently, only the OperationalError is caught and silenced.

In my setup, the database is accessible (I am able to connect), but database administrator implemented custom triggers that limit access for specific users. This makes my connection attempts fail with DatabaseError rather than OperationalError. But since the former is not silenced, makemigrations effectively requires a fully working database setup, which according to #31504 should not be necessary.

The original issue states that Django should "fail gracefully if the connection to the database isn't available." Therefore, I suggest catching the more general DatabaseError instead of OperationalError, as it covers more cases of database unavailability.

Proposed fix, I am happy to prepare a PR.

Change History (2)

comment:1 by Jacob Walls, 88 minutes ago

Easy pickings: unset
Resolution: wontfix
Status: newclosed

Thanks for the ticket. I'm concerned the wide catch would hide legitimate programming errors from other sources (e.g. introspection syntax). This appears to be a niche use case; you could work around it at the project level by overriding the makemigrations command.

Last edited 86 minutes ago by Jacob Walls (previous) (diff)

comment:2 by Piotr Kubiak, 87 minutes ago

Description: modified (diff)
Easy pickings: set
Has patch: set
Note: See TracTickets for help on using tickets.
Back to Top