【发布时间】:2014-06-01 20:36:59
【问题描述】:
我有一个 9 字符的字符串,我想将其作为字符 (9) 存储在 Postgresql (9.3) 中。同样重要的是,我希望它能够正确验证数据库是否正确,而这并没有发生。我正在使用使用 Hibernate 工具的数据库迁移插件生成模式。到目前为止,这是我尝试过的:
static mapping = {
poleID column: "pole_id", sqlType: "character", length: 9
}
这正是它在数据库中创建的方式,但是当我执行 dbm-gorm-diff 时,它会尝试修改列:
changeSet(author: "phil (generated)", id: "1401652394765-3") {
modifyDataType(columnName: "pole_id", newDataType: "character", tableName: "unit")
}
你可以看到长度被忽略了。我也尝试用以下方式指定它:
static mapping = {
poleID column: "pole_id", sqlType: "character(9)"
}
它再次尝试将已经正确的列修改为字符(9)。如何指定映射以便它看到数据库已经正确?
【问题讨论】:
-
考虑使用
varchar并添加一个CHECK (length(mycol) = 9)约束。character是一种奇怪的数据类型,一般不值得使用。 -
感谢 Craig,我看到我错过了 PG 没有为在 varchar 上使用字符提供任何性能改进的细则(而且自动填充空白也不是我想要的)。
标签: postgresql grails grails-orm liquibase hibernate-tools