db: the doubled CHECK list was six, not four (#3275)
CI / extension-version (push) Successful in 6s
CI / lint (push) Failing after 6s
Build images / sign-extension (push) Successful in 6s
Build images / build-agent (push) Successful in 11s
CI / frontend-build (push) Successful in 22s
CI / backend-lint-and-test (push) Successful in 31s
Build images / build-ml (push) Successful in 52s
Build images / build-web (push) Successful in 41s
CI / integration (push) Successful in 3m43s
CI / extension-version (push) Successful in 6s
CI / lint (push) Failing after 6s
Build images / sign-extension (push) Successful in 6s
Build images / build-agent (push) Successful in 11s
CI / frontend-build (push) Successful in 22s
CI / backend-lint-and-test (push) Successful in 31s
Build images / build-ml (push) Successful in 52s
Build images / build-web (push) Successful in 41s
CI / integration (push) Successful in 3m43s
Run 5029 confirmed the four renames landed and surfaced two I had missed: external_link's host and status CHECKs are doubled the same way. They did not show in run 5026's diff because BOTH sides produced the doubled form back then — external_link.py pre-prefixed its names, so the models matched the chain's mistake. Switching all six models to bare names is what exposed the two the migration did not cover. The list in the file now comes from matching ck_(\w+?)_ck_\1_ against the chain's own pg_dump, rather than from reading migrations by eye. Reading by eye is what missed these, in the same way it earlier missed a UNIQUE constraint sitting two lines above the index being looked at. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017QHszn9H8VBvx5Ke8x1hvw
This commit is contained in:
@@ -29,13 +29,15 @@ guarantee built from different objects, which is why the two schemas did not
|
||||
line up. The model now declares the constraint and the plain index separately,
|
||||
so it describes what is actually there. No DDL is needed for it.
|
||||
|
||||
Also here: four CHECK constraints whose names carry their table prefix TWICE.
|
||||
Also here: six CHECK constraints whose names carry their table prefix TWICE.
|
||||
|
||||
`base.py`'s naming convention is `ck_%(table_name)s_%(constraint_name)s`, and
|
||||
unlike the uq/fk/ix entries it applies even to a constraint that already has a
|
||||
name. Four migrations passed an already-prefixed name, so the convention
|
||||
name. Six migrations passed an already-prefixed name, so the convention
|
||||
prefixed it again:
|
||||
|
||||
ck_external_link_ck_external_link_host
|
||||
ck_external_link_ck_external_link_status
|
||||
ck_import_settings_ck_import_settings_singleton
|
||||
ck_ml_settings_ck_ml_settings_singleton
|
||||
ck_post_ck_post_translation_override
|
||||
@@ -67,7 +69,17 @@ branch_labels: Union[str, Sequence[str], None] = None
|
||||
depends_on: Union[str, Sequence[str], None] = None
|
||||
|
||||
# (table, doubled name, single-prefix name)
|
||||
#
|
||||
# Six, not the four a first read of the migrations turned up. The list that
|
||||
# settles it is the one extracted from the chain's pg_dump by matching
|
||||
# `ck_(\w+?)_ck_\1_` — reading the migrations by eye missed external_link
|
||||
# twice over, in the same way an earlier pass missed a UNIQUE constraint two
|
||||
# lines above the index it was looking at (see the sha256 note above).
|
||||
DOUBLED_CHECKS = (
|
||||
("external_link", "ck_external_link_ck_external_link_host",
|
||||
"ck_external_link_host"),
|
||||
("external_link", "ck_external_link_ck_external_link_status",
|
||||
"ck_external_link_status"),
|
||||
("import_settings", "ck_import_settings_ck_import_settings_singleton",
|
||||
"ck_import_settings_singleton"),
|
||||
("ml_settings", "ck_ml_settings_ck_ml_settings_singleton",
|
||||
|
||||
Reference in New Issue
Block a user