1

所以我使用 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代码来做到这两点,但没有找到任何我可以使用的东西......有人可以帮助我吗?

谢谢

4

0 回答 0