当前位置: 首页 > news >正文

postgresql 重置对应表序列最大值

当使用pg库备份并恢复时,序列的值很可能不会自动更新到最大ID。
原因是,insert语句如果默认写了id,就不会更新序列的值,需要自己拨一下序列的值…

简单来说如下命令就好了,两个your_table 换成你自己的真实表名。

SELECT setval('your_table_id_seq', (SELECT MAX(id) FROM your_table));

注:这里 _id_seq 你要看是否和自己的数据库一样,一般默认都用的这个。

然后上面虽然一个表搞定了,但我想对所有表都操作一次,那么使用如下脚本,可以在navicat等工具里直接新建查询,粘贴进去执行一下就好了(实测pg17一次解决)。

DO $$
DECLARE
    tab_record RECORD;
    seq_name TEXT;
BEGIN
    FOR tab_record IN 
        SELECT table_name
        FROM information_schema.tables
        WHERE table_schema = 'public'
        AND table_type = 'BASE TABLE'
    LOOP
        -- 直接构建序列名
        seq_name := 'public.' || tab_record.table_name || '_id_seq';
        
        BEGIN
            -- 尝试重置序列
            EXECUTE format('SELECT setval(%L, (SELECT COALESCE(MAX(id), 1) FROM public.%I))', 
                      seq_name, tab_record.table_name);
                      
            RAISE NOTICE '表 % 的序列已更新', tab_record.table_name;
        EXCEPTION WHEN OTHERS THEN
            -- 忽略没有对应序列的表
            RAISE NOTICE '表 % 跳过: %', tab_record.table_name, SQLERRM;
        END;
    END LOOP;
END
$$;
http://www.dtcms.com/a/99310.html

相关文章:

  • 药用植物次生代谢的多层调控-文献精读123
  • 如何利用<ruby>、<rt>、<rp>标签实现中文注音或字符注释?
  • 车载以太网网络测试 -25【SOME/IP-报文格式-1】
  • AI助力高效办公:如何利用AI制作PPT提升工作效率
  • RAG模型
  • 医疗CMS高效管理:简化更新维护流程
  • Open HarmonyOS 5.0 分布式软总线子系统 (DSoftBus) 详细设计与运行分析报告
  • 自动化测试知识详解
  • RuoYi基础学习
  • 拦截器和过滤器详解
  • 前端D3.js面试题及参考答案
  • Linux安装Cmake (Centos 7.9)
  • Python小练习系列 Vol.3:生成有效括号组合(回溯 + DFS)
  • 【15】Selenium 爬取实战
  • stringstream的使用
  • d2025329
  • PyGame开发贪吃蛇小游戏
  • Hive SQL中 ?+.+ 的用法,字段剔除
  • 在Qt中判断输入的js脚本是否只包含函数
  • 【Linux】常见信号 + 进程和作业
  • Java常用异步方式总结
  • 硬实时操作系统(Hard Real-Time OS)与软实时操作系统(Soft Real-Time OS)的区别
  • matplot显示中文
  • json-server使用方法
  • Android14 SystemUI中添加第三方AIDL
  • java.util包之java.util.Collection介绍
  • 并发编程之最小化共享
  • 21_js正则_表单验证
  • Java基于SpringBoot的网络云端日记本系统,附源码+文档说明
  • 若依——基于AI+若依框架的实战项目(实战篇(上))