所以我使用 Kotlin Exposed 在我的postgresql
数据库上创建用于身份验证的表。
该表应该在我的数据库中的专用模式中,称为:authentication
,简单来说。一切都好,我可以使用以下方法定义和创建表:
object UserTable: Table("authentication.user") {
val id = integer("id").primaryKey().autoIncrement()
val name = varchar("name", 200)
val type = integer("type").references(UserTypeTable().id)
}
在不同的模式上创建表是可以的,但是当它定义 时FK
,它会失败,因为它使用表的名称作为 FK 名称的后缀。
所以它类似于fk_authentication.user_fk_type_id
,这是不行的,因为 fk 的名称上不能有 a.
并且我得到一个语法错误。
[main] WARN Exposed - Transaction attempt #0 failed: org.postgresql.util.PSQLException: ERROR: syntax error at or near "."
Statement(s): CREATE TABLE IF NOT EXISTS authentication.user (id INT PRIMARY KEY, "name" VARCHAR(200) NOT NULL, type INT NOT NULL CONSTRAINT fk_authentication.user_fk_type_id FOREIGN KEY (type) REFERENCES authentication.user_type(id) ON DELETE RESTRICT ON UPDATE RESTRICT)
org.jetbrains.exposed.exceptions.ExposedSQLException: org.postgresql.util.PSQLException: ERROR: syntax error at or near "."
注意:我将语句更改为与我编写的查询相关:这里作为示例。不要触及语句,而要触及手头的问题,纠正语法。
所以我想到了两种可能性:
- 以另一种方式定义表模式,不知何故?
- 明确定义 FK 名称。
我可以做这些吗?还是我应该以另一种方式解决这个问题?我正在尝试通过查看Table.kt
代码来做到这两点,但没有找到任何我可以使用的东西......有人可以帮助我吗?
谢谢