Skip to content

Commit a9ecb8f

Browse files
committed
[Pg-kit]: Fix unique constraint introspection query
The current query uses constraint_column_usage which creates a Cartesian product when joined with the columns table, returning zero rows for multi-column unique constraints. This fix replaces constraint_column_usage with key_column_usage (the standard table for PRIMARY KEY and UNIQUE constraints) and properly joins on constraint_name, constraint_schema, and table_name. Fixes #4490, #4531, #4921
1 parent 47ba9c8 commit a9ecb8f

File tree

1 file changed

+11
-5
lines changed

1 file changed

+11
-5
lines changed

drizzle-kit/src/serializer/pgSerializer.ts

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1228,12 +1228,18 @@ WHERE
12281228
const tableResponse = await getColumnsInfoQuery({ schema: tableSchema, table: tableName, db });
12291229

12301230
const tableConstraints = await db.query(
1231-
`SELECT c.column_name, c.data_type, constraint_type, constraint_name, constraint_schema
1231+
`SELECT kcu.column_name, c.data_type, tc.constraint_type, tc.constraint_name, tc.constraint_schema
12321232
FROM information_schema.table_constraints tc
1233-
JOIN information_schema.constraint_column_usage AS ccu USING (constraint_schema, constraint_name)
1234-
JOIN information_schema.columns AS c ON c.table_schema = tc.constraint_schema
1235-
AND tc.table_name = c.table_name AND ccu.column_name = c.column_name
1236-
WHERE tc.table_name = '${tableName}' and constraint_schema = '${tableSchema}';`,
1233+
JOIN information_schema.key_column_usage kcu
1234+
ON tc.constraint_name = kcu.constraint_name
1235+
AND tc.constraint_schema = kcu.constraint_schema
1236+
AND tc.table_name = kcu.table_name
1237+
JOIN information_schema.columns AS c
1238+
ON c.table_schema = tc.constraint_schema
1239+
AND c.table_name = tc.table_name
1240+
AND c.column_name = kcu.column_name
1241+
WHERE tc.table_name = '${tableName}' and tc.constraint_schema = '${tableSchema}'
1242+
ORDER BY tc.constraint_name, kcu.ordinal_position;`,
12371243
);
12381244

12391245
const tableChecks = await db.query(`SELECT

0 commit comments

Comments
 (0)