[Pg-kit]: Fix unique constraint introspection returning zero rows #5039
+11
−5
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.
Description
Fixes a critical bug in PostgreSQL unique constraint introspection that causes
drizzle-kit pushto falsely detect missing constraints even when they exist in the database.Problem
The current introspection query at
pgSerializer.ts:1230-1236usesinformation_schema.constraint_column_usagewhich creates a Cartesian product when joined with thecolumnstable:This returns zero rows for multi-column unique constraints, causing
drizzle-kit pushto prompt users to add constraints that already exist.Solution
Replace
constraint_column_usagewithkey_column_usage(the standard PostgreSQL information_schema table for PRIMARY KEY and UNIQUE constraints) and properly join on:constraint_nameconstraint_schematable_nameAdded
ORDER BY kcu.ordinal_positionto preserve column order in multi-column constraints.Testing
Before Fix
After Fix
Impact
drizzle-kit pushRelated Issues
Closes #4490
Closes #4531
Closes #4921
Checklist
Disclaimer: This PR was created with assistance from AI tools for bug diagnosis and documentation.