Clojure jdbc 创建复合主键

Posted

技术标签:

【中文标题】Clojure jdbc 创建复合主键【英文标题】:Clojure jdbc create compound primary key 【发布时间】:2018-05-15 19:54:21 【问题描述】:

没有找到我需要的东西。我有一个需要复合主键 (postgresql) 的表,但没有看到这是如何使用 clojure.java.jdbc 完成的。

我正在努力

CREATE TABLE a_b (
    f integer REFERENCES a,
    g integer REFERENCES b,
    PRIMARY KEY (f, g)
);

我尝试了很多方法,但要点是不知何故让:primary:key 替换下面的"PRIMARY KEY (a, b)"

(j/create-table-ddl :a_b [[:f "integer REFERENCES a"]
                          [:g "integer REFERENCES b"]
                          [:id "PRIMARY KEY (a, b)"]]) ;<=== this line

【问题讨论】:

【参考方案1】:

有时绕过 DSL 并像这样传递原始 SQL 字符串会更容易:

 (jdbc/db-do-commands raw-db-spec ["drop table if exists langs"
                                   "drop table if exists releases"])

如果使用不常见或特定于特定数据库的功能,则尤其如此。

【讨论】:

嗯,好点子,虽然不是很令人满意:-P 我会用这个,但你会认为复合键很常见,尤其是在具有多对多关系的数据库中.【参考方案2】:

似乎我找到了解决方案here。正确的做法是将我的[:id "PRIMARY KEY (f, g)"] 替换为

["CONSTRAINT id PRIMARY KEY (f, g)"]

如果其他人有类似的模式,我会留下这个问题。

【讨论】:

以上是关于Clojure jdbc 创建复合主键的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SQL 中定义复合主键?

Spring用外键保存复合主键

如何在表上创建复合主键 [重复]

复合主键和外键 Code First

Laravel中定义复合主键

Yii2中如何使用Migration创建复合主键?