夸克之书

  • 首页
  • 科普
  • 笔记
  • .NET/C#
  • 物联网
  • 算法
  • Linux
  • 树莓派
夸克之内,别有洞天
  1. 首页
  2. 笔记
  3. 正文

PostgreSQL重置所有表Sequence

2019-12-26 4791点热度 0人点赞 0条评论

什么是sequence?

sequence 是 pg 自带的高效的自增id工具(也叫序列)。sequence 使用了轻量级锁的方式来做到高效自增id的,所以会比 UPDATE 行锁快。sequence 的返回数据类型默认是64位的整数,pg 10 可以自定 smallint, integer 或者是 bigint。

为什么要重置sequence?

我目前使用的数据库时PostgreSQL 12,在将数据用Navcat导入之后。EF执行插入时报错,提示ID已经存在。最开始因为不了PostgreSQL的自增机制,还以为是EF有问题。查询资料后发现是因为sequence没有更新引起的错误,手动通过命令重置后就可以正常插入数据了。

在设计数据库,因为主键字段都是id,且设置了自增,便编写了一个脚本,将所有包含id自增字段的表的sequence重置为目前最大id。以后导入数据后重新执行一遍即可。

DO $$ DECLARE
TABLE_NAME TEXT;
maxid INT;
BEGIN
        FOR TABLE_NAME IN (
        SELECT
            tb.TABLE_NAME 
        FROM
            information_schema.tables AS tb
            INNER JOIN information_schema.COLUMNS AS cols ON tb.TABLE_NAME = cols.TABLE_NAME 
        WHERE
            tb.table_catalog = 'dncsdb' 
            AND tb.table_schema = 'public' 
            AND cols.COLUMN_NAME = 'id' 
        )
        LOOP
        EXECUTE'SELECT MAX(id) +1 FROM ' || TABLE_NAME || ';' INTO maxid;
    IF
        maxid IS NOT NULL THEN
            raise notice '%',
            'set sequence ' || TABLE_NAME || '_id_seq  restart with ' || maxid;
        EXECUTE 'alter sequence ' || TABLE_NAME || '_id_seq  restart with ' || maxid || ';';

    END IF;

END LOOP;

END $$;

或者可以通过以下命令手动进行重置。

查询所有的sequence:

select relname from pg_class where relkind='S' ;

查询表的最大id值:

select max(id) + 1 as seqid from content_info

重置sequence:

alter sequence your_sequence restart with your_value;

本作品采用 知识共享署名-非商业性使用 4.0 国际许可协议 进行许可
标签: 暂无
最后更新:2020-12-13

afirefish

这个人很懒,什么都没留下

打赏 点赞
< 上一篇
下一篇 >

文章评论

您需要 登录 之后才可以评论
放松一下
https://www.quarkbook.com/wp-content/uploads/2021/05/凤凰传奇-海底(Live).flac
分类
  • .NET/C#
  • Linux
  • 树莓派
  • 物联网
  • 科普
  • 笔记
  • 算法
  • 默认
最新 热点 随机
最新 热点 随机
Windows Server 2022安装Intel I225-V驱动 System.Text.Json与Newtonsoft.Json Json序列化与反序列化性能对比 R86S散热改造 Windows移除多余输入法'Unknown Locale (qaa-Latn)' 【算法】具有层级关系的城市,例如"中国 广州","中国 浙江 杭州" 一个 List 最后应该是转成树状图输出 树莓派安装Golang环境
Windows Server 2022安装Intel I225-V驱动
23种常见的设计模式(7):原型模式 战地 Origin发生了些意料之外的事情解决方法 使用淘宝npm以及安装cnpm JS判断是手机浏览器还是电脑浏览器 Windows桌面图标空白修复 .NET Core使用科大讯飞SDK来进行语音识别和合成
最近评论
afirefish 发布于 2 个月前(11月28日) 非常感谢,非常棒!
》随缘《 发布于 3 个月前(11月20日) 最新【一键处理】方法: https://github.com/MrXhh/VSTools/rele...
管理员 发布于 8 个月前(06月22日) emmmm....服务器好一点???
wking 发布于 9 个月前(05月23日) 请问贵博客是怎么优化的,网页响应速度非常快。我博客同样的WordPress和kratos主题,但点一...
去月球 发布于 1 年前(01月17日) 如果使用CSI的摄像头应该怎么修改命令呢
书签
  • 打赏
  • 毒鸡汤
  • 米店
  • 金鱼直播间

COPYRIGHT © 2022 quarkbook.com. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

蜀ICP备15036129号-9

登录
注册|忘记密码?