Make PostgreSQL foreign key drops idempotent#27
Merged
Conversation
Emit DROP CONSTRAINT IF EXISTS for delete_reference statements so a prior cascading table drop cannot make the generated migration fail.
Bump the package version and document the idempotent PostgreSQL foreign-key drop fix.
joe-thom
approved these changes
Jul 17, 2026
joe-thom
left a comment
There was a problem hiding this comment.
seems fine, we'll need to republish the package and bump in web
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.
TLDR
Makes generated PostgreSQL foreign-key removals idempotent so database publishing does not fail when a cascading table drop already removed the constraint.
Why
Drizzle can generate
DROP TABLE ... CASCADEfollowed by an explicit foreign-key removal. PostgreSQL removes the foreign key during the cascade, so the subsequentDROP CONSTRAINTfails even though the database has reached the intended state.What changed
PostgreSQL
delete_referencestatements now render asDROP CONSTRAINT IF EXISTS. This fixes the behavior in the SQL generator rather than rewriting rendered SQL in pid2.Added schema-diff regression coverage for removing a foreign key.
Validations performed
If this breaks
Generated PostgreSQL migrations may behave differently when removing foreign-key constraints.
Rollout and rollback
Rolls out in the next
@drizzle-team/drizzle-kitrelease. Safe to revert; reverting restores strict failure when a generated foreign-key removal targets an already-absent constraint.~ written by Zerg 👾 (lurking-cyclone-5507)