fix(user): unique index on LOWER(mail) [GATED — merge after duplicate cleanup]#3856
Draft
Blume1977 wants to merge 1 commit into
Draft
fix(user): unique index on LOWER(mail) [GATED — merge after duplicate cleanup]#3856Blume1977 wants to merge 1 commit into
Blume1977 wants to merge 1 commit into
Conversation
Follow-up to #3855. Replaces the non-unique LOWER(mail) index with a UNIQUE partial index so duplicate accounts for the same address can no longer be created. GATED: must not be deployed until existing duplicate mails are resolved, otherwise CREATE UNIQUE INDEX fails. The predicate mirrors the getUsersByMail dedup set and excludes Merged/Blocked rows, which legitimately retain their mail.
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Follow-up to #3855. This replaces the non-unique
LOWER(mail)index with a UNIQUE partial index, permanently preventing duplicate accounts for the same e-mail.CREATE UNIQUE INDEXfails on deploy if any case-insensitive duplicate mail still exists. This PR may only be merged once the pre-check returns zero rows:Index predicate (deliberate)
The predicate mirrors the dedup set used by
getUsersByMail(onlyValidUser)and excludesMerged/Blockedrows:mergeUserDatadoes not null it),A bare
WHERE mail IS NOT NULLwould fail on every historical merge pair and would break future merges. Scoping to the active set keeps the uniqueness guarantee consistent with the lookup that enforces it.Depends on