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

使用pgloader从MariaDB迁移至PostgreSQL后主键id插入不递增问题

问题分析与解决

你的问题核心是PostgreSQL自增主键依赖的序列(sequence)未被正确创建或初始化,导致插入时生成了已存在的ID,触发唯一约束冲突。你提到异常表没有id_seq文件,正好印证了这一点——正常表的自增主键都绑定了对应的序列,而这些表缺失了这个关键组件。

直接修复步骤

针对单个异常表(比如brand表),按以下操作处理:

  1. 查看当前表的最大ID值
    先确认表中已有的最大主键值,避免序列起始值重复:

    SELECT MAX(id) FROM brand;
    
  2. 创建并初始化序列
    基于上面得到的最大ID+1创建序列(假设最大ID是100,就设为101):

    CREATE SEQUENCE brand_id_seq START WITH 101; -- 替换成实际MAX(id)+1的值
    
  3. 关联序列到主键字段
    把序列设为主键字段的默认值,这样插入时会自动调用序列生成新ID:

    ALTER TABLE brand ALTER COLUMN id SET DEFAULT nextval('brand_id_seq'::regclass);
    
  4. 绑定序列与表(可选但规范)
    设置序列归表所有,这样删除表时序列也会被自动清理:

    ALTER SEQUENCE brand_id_seq OWNED BY brand.id;
    

完成后再执行你的插入语句,应该就不会报错了。

排查迁移时的问题

你的pgloader命令可能在处理MySQL的AUTO_INCREMENT字段时遗漏了某些场景,建议检查:

  • 确认MariaDB中这些异常表的主键是否真的标记为AUTO_INCREMENT,如果没有,pgloader不会自动生成序列
  • 检查pgloader的版本,旧版本可能对某些字段类型(比如BIGINT AUTO_INCREMENT)的支持有问题,建议升级到最新版
  • 迁移命令中可以尝试添加cast type int auto_increment to serial这类明确的转换规则,强制pgloader为自增字段生成序列

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 19:12:35