Drizzle ORM 复合主键配置的正确方式
2025-05-06 08:37:06作者:虞亚竹Luna
在使用 Drizzle ORM 进行数据库建模时,复合主键(Composite Primary Key)是一个常见的需求。然而,近期有开发者反馈在使用 drizzle-kit 工具推送表结构时遇到了复合主键未被正确创建的问题。
问题现象
开发者在使用最新版本的 drizzle-kit (0.30.2) 时,发现按照文档示例配置的复合主键没有被正确推送到数据库。具体表现为:
- 使用了类似以下的结构定义表:
export const verificationTokens = pgTable(
"verificationToken",
{
identifier: text("identifier").notNull(),
token: text("token").notNull(),
expires: timestamp("expires", { mode: "date" }).notNull(),
},
(vt) => [
{
compositePk: primaryKey({
columns: [vt.identifier, vt.token],
}),
},
],
);
- 但实际生成的表结构中缺少预期的复合主键约束
问题根源
经过深入分析,发现问题出在 Drizzle ORM 的 API 变更上。最新版本中,配置复合主键的方式已经发生了变化:
- 旧版本允许在返回的数组中使用对象形式配置约束
- 新版本要求直接返回主键约束实例,而不是将其包装在对象中
正确配置方式
根据最新版本的 Drizzle ORM,正确的复合主键配置应该是:
export const verificationTokens = pgTable(
"verificationToken",
{
identifier: text("identifier").notNull(),
token: text("token").notNull(),
expires: timestamp("expires", { mode: "date" }).notNull(),
},
(vt) => [
primaryKey({
columns: [vt.identifier, vt.token],
}),
],
);
关键区别在于:
- 直接返回
primaryKey()函数调用的结果 - 不再需要将主键约束包装在带有自定义名称的对象中
注意事项
- 文档可能尚未完全同步更新,开发者需要注意 API 变更
- 使用旧格式时,虽然不会报错,但会导致约束未被正确创建
- 这种变更属于破坏性变更(breaking change),升级版本时需要特别注意
最佳实践
对于 Drizzle ORM 的新用户,建议:
- 始终查阅对应版本的官方文档
- 在升级版本时,仔细阅读变更日志
- 对于关键约束,建议在推送后验证数据库结构是否符合预期
通过采用正确的配置方式,开发者可以确保复合主键等约束被正确创建,保证数据完整性和查询性能。
登录后查看全文
热门项目推荐
相关项目推荐
暂无数据
热门内容推荐
最新内容推荐
Degrees of Lewdity中文汉化终极指南:零基础玩家必看的完整教程Unity游戏翻译神器:XUnity Auto Translator 完整使用指南PythonWin7终极指南:在Windows 7上轻松安装Python 3.9+终极macOS键盘定制指南:用Karabiner-Elements提升10倍效率Pandas数据分析实战指南:从零基础到数据处理高手 Qwen3-235B-FP8震撼升级:256K上下文+22B激活参数7步搞定机械键盘PCB设计:从零开始打造你的专属键盘终极WeMod专业版解锁指南:3步免费获取完整高级功能DeepSeek-R1-Distill-Qwen-32B技术揭秘:小模型如何实现大模型性能突破音频修复终极指南:让每一段受损声音重获新生
项目优选
收起
deepin linux kernel
C
27
11
OpenHarmony documentation | OpenHarmony开发者文档
Dockerfile
539
3.76 K
Ascend Extension for PyTorch
Python
349
414
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
889
609
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
338
185
openJiuwen agent-studio提供零码、低码可视化开发和工作流编排,模型、知识库、插件等各资源管理能力
TSX
986
252
openGauss kernel ~ openGauss is an open source relational database management system
C++
169
233
暂无简介
Dart
778
193
华为昇腾面向大规模分布式训练的多模态大模型套件,支撑多模态生成、多模态理解。
Python
114
140
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
1.35 K
758