You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用DMS迁移后重置PostgreSQL中的序列

批量重置PostgreSQL序列的高效方案

针对AWS DMS迁移后大量带序列表的重置需求,直接利用PostgreSQL系统表生成批量执行脚本是最优解,无需手动逐个处理。

方法1:生成批量重置命令

执行以下SQL查询,会自动生成所有目标schema下关联主键的序列重置语句:

SELECT format(
    'ALTER SEQUENCE %I.%I RESTART WITH %s;',
    seq_schema,
    seq_name,
    COALESCE(max_id, 0) + 1
) AS reset_command
FROM (
    SELECT
        n.nspname AS seq_schema,
        c.relname AS seq_name,
        (SELECT COALESCE(max(t.%I), 0) FROM ONLY %I.%I t) AS max_id
    FROM pg_depend d
    JOIN pg_class c ON d.objid = c.oid
    JOIN pg_namespace n ON c.relnamespace = n.oid
    JOIN pg_attribute a ON d.refobjid = a.attrelid AND d.refobjsubid = a.attnum
    JOIN pg_class t ON a.attrelid = t.oid
    JOIN pg_namespace tn ON t.relnamespace = tn.oid
    WHERE c.relkind = 'S'
      AND d.deptype = 'a'
      -- 指定需要处理的schema,比如你的habit库
      AND tn.nspname = 'habit'
) AS seq_info
WHERE max_id IS NOT NULL;

执行后会得到一列reset_command,将这些命令复制到SQL客户端批量执行即可。

方法2:一步到位自动执行(适用于psql客户端)

如果使用psql连接目标数据库,可直接用\gexec命令让查询结果自动作为SQL执行,省去复制步骤:

SELECT format(
    'ALTER SEQUENCE %I.%I RESTART WITH %s;',
    n.nspname,
    c.relname,
    COALESCE((SELECT max(t.%I) FROM ONLY %I.%I t), 0) + 1
)
FROM pg_depend d
JOIN pg_class c ON d.objid = c.oid
JOIN pg_namespace n ON c.relnamespace = n.oid
JOIN pg_attribute a ON d.refobjid = a.attrelid AND d.refobjsubid = a.attnum
JOIN pg_class t ON a.attrelid = t.oid
JOIN pg_namespace tn ON t.relnamespace = tn.oid
WHERE c.relkind = 'S'
  AND d.deptype = 'a'
  AND tn.nspname = 'habit'
\gexec

关键说明

  • 脚本会自动关联序列与对应表的主键字段,计算主键最大值并将序列重置为max(id)+1,空表会重置为1,符合默认序列起始逻辑。
  • 若需处理多个schema,删除AND tn.nspname = 'habit'条件即可。
  • 确保执行账号拥有ALTER SEQUENCE的权限。

内容的提问来源于stack exchange,提问作者Juvette M

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 15:35:04