为什么当表新创建为 StringIdTable 时,Exposed 会抱怨已经存在的 id 列?

问题描述

我开始尝试使用 JetBrains Exposed 0.28.1 和 Postgres 13。 当我尝试创建第一个表时,我得到一个 PsqlException:

ERROR: column "id" of relation "xxx" already exists. Statement(s): ALTER TABLE <schema>.xxx ADD id VARCHAR(10) PRIMARY KEY

这是表创建代码

open class StringIdTable(
    schema: String,name: String,columnName: String = "id",columnLength: Int = 10,) : IdTable<String>("$schema.$name") {
    override val id: Column<EntityID<String>> =
        varchar(columnName,columnLength).entityId()
    override val primaryKey by lazy { super.primaryKey ?: PrimaryKey(id) }
}

const val DB_NAME = "db"
const val SCHEMA_NAME = "schema"
val SCHEMA = Schema(name = SCHEMA_NAME,authorization = "postgres")

object MyTable : StringIdTable(SCHEMA_NAME,"xxx") {
//object MyTable : Table("xxx") {
//    val id = varchar(name = "id",length = 10)
    val label = varchar(name = "title",length = 255)
    val order = text("order")
}

使用 Exposed 的方法调用创建:SchemaUtils.createMissingTablesAndColumns(MyTable)

如果我使用注释行将表定义为“简单”Table 而不是 StringIdTable,我也不例外。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)