You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用clojure.java.jdbc创建PostgreSQL复合主键?

用clojure.java.jdbc创建带复合主键的PostgreSQL表

别再硬写PRIMARY KEY (f, g)啦,clojure.java.jdbc的create-table-ddl其实有专门的方式处理复合主键,完全不用你在列定义里塞字符串约束。

直接看正确写法:

(j/create-table-ddl :a_b
  [[:f :integer "REFERENCES a"]
   [:g :integer "REFERENCES b"]]
  {:primary-key [:f :g]})

为什么这么写?

  • 列定义里用:integer指定类型,后面跟上外键约束字符串,比你原来把类型和约束混写成一个字符串更符合Clojure的写法习惯,可读性也更强。
  • 第三个参数传一个选项Map,:primary-key对应的向量就是你要设为复合主键的列名集合,函数会自动帮你生成PRIMARY KEY (f, g)的语句,和你想要的目标SQL完全一致。

要是你之前试过给每个列加:primary true的方式,那可得注意了——这么做只会把最后一个标记的列设为单一主键,根本实现不了复合主键,比如下面这种写法就不对:

;; 错误示例:只会把g设为主键,不是复合主键
(j/create-table-ddl :a_b
  [[:f :integer "REFERENCES a" :primary true]
   [:g :integer "REFERENCES b" :primary true]])

所以最靠谱的方式就是用:primary-key选项参数,既简洁又能准确生成你需要的复合主键约束。

内容的提问来源于stack exchange,提问作者TrivialCase

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 10:03:47