【发布时间】:2013-04-30 10:01:06
【问题描述】:
我正忙着在一个 Grails 项目中进行从 MySQL 到 Postgres 的相当复杂的数据迁移。
我正在使用 GORM 在 PostGres 中生成模式,然后执行 MySQL -> mysqldump,一些数据操作,然后导入 Postgres。
显然,从 MySQL 转向 PSQL 的每个人都认为理所当然的是 id 列上的 auto_inc。因此,我为每个域对象添加了以下映射(根据各种站点和指南说明),它应该管理 id 列的所有排序:
静态映射 = {
id 生成器:“序列”
}
但是做一个 \d+ 帐户我看到以下行:
公共产品 ----------------------+---------------------------- --+------------+----------+- 编号 |大整数 |不为空 |平原 |...这与我所期望的有些不同(我希望它是连载或大连载)。所以,无论如何,我迁移数据,然后启动应用程序,然后通过 /product/create 操作添加产品来测试它。没有骰子,我可以看到一个休眠异常弹出,抱怨唯一键(插入语句尝试使用 2 的 id。我刷新了几次页面(导致更多失败,但仍然增加了 nextval)。最终它达到 142(表中当前有 141 个产品),然后它成功了。所以显然我必须更新表使用的每个 id 序列的 nextval。遗憾的是,我真的不能告诉 wtf Grails 用作序列,因为它没有被表引用,数据库中也没有任何新表。
我已经阅读了 (How to reset postgres' primary key sequence when it falls out of sync?) 上的提示,但这里不太适合,因为主键上没有序列号。
我可能会使用 min_lo 值(如果sequence 方法甚至考虑到非 hilo 策略的下限),但理想情况下我想要一些我可以运行一些 SQL 来修复迁移后的东西。
干杯。
编辑:PostGreSQL 9.1、Grails 2.0.3(是的,这将在迁移后更新)。
【问题讨论】:
标签: hibernate postgresql grails