Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate 颗粒生成_Hibernate_Postgresql_Grails - Fatal编程技术网

Hibernate 颗粒生成

Hibernate 颗粒生成,hibernate,postgresql,grails,Hibernate,Postgresql,Grails,我正忙于在Grails项目上进行从MySQL到Postgres的相当复杂的数据迁移 我正在使用GORM在PostGres中生成模式,然后执行MySQL->mysqldump,一些数据操作,然后导入到PostGres中 显然,从MySQL到PSQL的每个人都认为id列上的auto_inc是理所当然的。因此,我向每个域对象添加了以下映射(根据不同的站点和指南说明),它应该管理id列的所有顺序: static mapping = { id generator: 'sequence' }

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

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

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

static mapping = { id generator: 'sequence' } 静态映射={ id生成器:“序列” } 但是,在使用\d+帐户时,我看到以下行:

public.product ----------------------+-----------------------------+-----------+----------+- id | bigint | not null | plain | 公共产品 ----------------------+-----------------------------+-----------+----------+- id | bigint |非空|普通| 。。。这与我期望的有些不同(我期望它是一个系列或大系列)。因此,无论如何,我迁移数据,然后启动应用程序,然后通过/product/create操作添加一个产品来测试这一点。没有骰子,我可以看到一个hibernate异常弹出,抱怨唯一键(insert语句尝试使用
id
为2。我刷新了几次页面(失败次数更多,但增加了nextval)。最终达到142个(表中目前有141个产品),然后它成功了。所以很明显,我必须在表使用的每个id序列上更新nextval。遗憾的是,我不能确定wtf Grails正在使用作为序列,因为它没有被表引用,数据库中也没有任何新表

我已经阅读了()中的提示,但这并不适合这里,因为主键上没有序列号

我可能会使用min_lo值(如果
sequence
方法甚至考虑了非hilo策略的下限),但理想情况下,我希望能够运行一些SQL来修复迁移后的问题

干杯


编辑:PostGreSQL 9.1,Grails 2.0.3(是的,这将在迁移后更新)。

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


是的,问题不是更新序列(我给出的链接解决了这个问题),而是查找序列实际存储的位置/方式,如果不是在数据库的表中的话。序列是数据库对象。它们存储在内存中。
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