PostgreSQL中TRUNCATE不能实现重置ID怎么办

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

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值