在navcat 等工具控制台执行下面命令DO$$DECLARE tbl_name TEXT;seq_name TEXT;max_id BIGINT;BEGIN -- 遍历 public 模式下的所有用户表 FOR tbl_name IN SELECT tablename FROM pg_tables WHERE schemanamepublicAND tablename NOT LIKEpg_%LOOP seq_name :tbl_name||_seq;BEGIN --1. 获取表中id的最大值若表为空则为0EXECUTE format(SELECT COALESCE(MAX(id), 0) FROM %I, tbl_name)INTO max_id;--2. 直接修复序列值 -- setval(seq, val,true)表示序列当前值为 val下次 nextval()返回 val 1EXECUTE format(SELECT setval(%L, %s, true), seq_name, max_id);RAISE NOTICE已修复序列: % (下一值: %), seq_name, max_id 1;EXCEPTION WHEN OTHERS THEN -- 忽略没有id列或序列不存在的表继续处理下一个 RAISE WARNING跳过表 %: %, tbl_name, SQLERRM;END;END LOOP;END$$;