H2数据库2.x版本无法查询information_schema.sequences,求重置序列方法
H2 2.0+ 获取序列并批量重置的方法
H2 2.0及以上版本对系统表的访问规则做了调整,原SELECT sequence_name from information_schema.sequences查询需要指定序列所在的模式才能正确获取结果(默认模式为PUBLIC):
1. 查询所有序列
SELECT SEQUENCE_NAME FROM INFORMATION_SCHEMA.SEQUENCES WHERE SEQUENCE_SCHEMA = 'PUBLIC';
如果你的序列存放在自定义模式下,将PUBLIC替换为对应的模式名称即可。
2. 批量重置序列
方式一:生成批量重置SQL
执行以下查询生成所有序列的重置语句(默认重置为从1开始,可根据需求修改RESTART WITH的数值):
SELECT CONCAT('ALTER SEQUENCE ', SEQUENCE_NAME, ' RESTART WITH 1;') AS reset_sql FROM INFORMATION_SCHEMA.SEQUENCES WHERE SEQUENCE_SCHEMA = 'PUBLIC';
将查询结果中的SQL语句批量执行,即可完成所有序列的重置。
方式二:关联表数据重置(避免主键冲突)
如果序列是对应表的自增主键生成器,重置前建议先匹配表的最大主键值,避免插入数据时出现主键重复:
-- 示例:重置USERS表对应的序列 ALTER SEQUENCE USERS_SEQ RESTART WITH (SELECT MAX(id) + 1 FROM USERS);
若要批量处理,可结合表与序列的命名规则(H2默认自增序列命名为表名_SEQ)生成对应SQL。
内容的提问来源于stack exchange,提问作者Wael Yakoubi
相关产品推荐
相关产品推荐

