gpt4 book ai didi

hibernate - Grails 生成

转载 作者:行者123 更新时间:2023-12-02 15:33:10 25 4
gpt4 key购买 nike

我正忙于在 Grails 项目中进行从 MySQL 到 Postgres 的相当复杂的数据迁移。

我正在使用 GORM 在 PostGres 中生成模式,然后执行 MySQL -> mysqldump,一些数据操作,然后导入 Postgres。

显然,从 MySQL 转向 PSQL 的每个人都认为理所当然的是 id 列上的 auto_inc。结果,我为每个域对象添加了以下映射(根据各种站点和指南说明),它应该管理 id 列的所有排序:

静态映射 = {
id 生成器:“序列”
}

但是做一个\d+ 帐户我看到以下行:

公共(public)产品
----------------------+---------------------------- --+------------+----------+-
编号 |大整数 |不为空 |平原 |

...这与我的预期有些不同(我希望它是连续剧或大型连续剧)。所以,无论如何,我迁移数据,然后启动应用程序,然后通过/product/create 操作添加产品来测试它。没有骰子,我可以看到一个 hibernate 异常弹出,提示唯一键(插入语句尝试使用 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(是的,这将在迁移后更新)。

最佳答案

请参阅本文档。您必须在启动应用程序之前更新序列。

http://www.postgresql.org/docs/9.1/static/functions-sequence.html

currval(regclass)                   bigint  Return value most recently obtained with nextval for specified sequence
lastval() bigint Return value most recently obtained with nextval for any sequence
nextval(regclass) bigint Advance sequence and return new value
setval(regclass, bigint) bigint Set sequence's current value
setval(regclass, bigint, boolean) bigint Set sequence's current value and is_called flag

关于hibernate - Grails 生成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16402286/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com