在MySQL
中,TRUNCATE
可以重置ID,使ID重新从1开始自增,但PostgreSQL
中, TRUNCATE
并不能重置ID,需要通过重置序列来达到目的。
- PostgreSQL如何设置自增主键ID
假设我们有:
-- 创建序列
CREATE SEQUENCE ods.ods_demo_id_seq START WITH 1;
-- 设置 id 默认值
nextval('ods.ods_demo_id_seq'::regclass)
注意:postgre 复制表之后ID是从原表开始自增的,所以复制表的时候,需要手动修改复制表的默认值为ods_demo_copy1_id_seq,不然还是源表的默认名称,这里假定复制后的表名叫ods_demo_copy1。
那么我们重置的SQL语句如下:
-- 序列重置到1
ALTER SEQUENCE ods.ods_demo_id_seq RESTART WITH 1;
-- 验证序列是否重新从1开始自增
SELECT nextval('ods.ods_demo_id_seq');
注意:每次执行完nextval
函数,需要再重新执行一遍 [ ALTER...RESTART ]
语句,因为函数每执行一次就会迭代到序列的下一个值。
查询ID序列当前值
SELECT currval('ods.ods_demo_id_seq');
> ERROR: currval() not supported
https://stackoverflow.com/questions/22843928/greenplum-database-currval-not-supported
通过stackoverflow
得知,我的greenplum
版本不支持currval
函数,需要更新greenplum
到支持currval
函数的版本或者使用下面last_value
查看当前ID值。
SELECT last_value FROM ods.ods_demo_id_seq
注意:查看当前值之后无需重置ID,因此更适合用来检验
序列是否重置到1
的情况。
https://blog.csdn.net/weixin_43394840/article/details/118517790