正在更改GenerationType.GenerationType的标识.SEQUENCE(和返回)PostgreSQL



我们有一个使用GenerationType的实体数据库。身份。它有一些技术问题,我用GenerationType替换了它。序列,因为我误解了序列的作用。现在,我们有了数据库表,所有表都以+1的增量进行了很好的编号,直到SEQUENCE的使用开始->在那里,所有表的编号都是共享的,并且由于它在整个系统中共享,所以每个表中的编号很快就螺旋上升到了巨大的数字,每个表中都有巨大的间隙。

当我现在恢复使用IDENTITY时,它开始在上次使用IDENTITY时停止的地方编号。IDENTITY能提供和SEQUENCE相冲突的数字吗?(遗憾的是,我不能真正测试它,因为最后一个IDENTITY条目是9000,第一个SEQUENCE是25 mils——这是因为在一个月的时间里,DB中有很多添加/删除(

有没有办法从最后一个SEQUENCE值开始对IDENTITY进行编号?

谢谢你的帮助。

IDENTITY和SEQUENCE之间的区别——至少在PostgreSQL中是这样——是IDENTITY为每个表创建一个序列,而SEQUENCE为所有表使用一个全局序列,正如您所注意到的。

假设您有一个名为MyEntity(或my_entity作为表名(的实体,并使用IDENTITY策略,则应该有一个类似于以下内容的序列:my_entity_id_sequence。SEQUENCE的命名(这取决于JPA实现(可能类似于hibernate_SEQUENCE

如果您可以访问数据库(例如使用psql(,则只需检查IDENTITY序列并设置其值:。

ALTER SEQUENCE my_entity_id_sequence RESTART with_your_value;

其中with_your_value可以是例如

SELECT max(id)+1 FROM my_entity;

最新更新