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

Postgres+NestJS+TypeORM报错:违反pg_type_typname_nsp_index唯一约束

排查Postgres + TypeORM启动时"pg_type_typname_nsp_index"唯一约束冲突方案
  • 检查自定义类型重复定义
    这个错误核心是Postgres同一schema下存在同名自定义类型(如enum、复合类型)。先排查Printer实体是否定义了enum,或项目遗留了同名未清理的类型:

    • 执行Postgres命令查询相关类型:SELECT typname, nspname FROM pg_type WHERE typname LIKE '%printer%';(替换为实体相关关键词)
    • 若发现重复类型,手动清理:DROP TYPE IF EXISTS public.your_enum_name CASCADE;(替换对应schema和类型名)
  • 清理TypeORM元数据缓存
    NestJS+TypeORM可能残留旧实体元数据缓存,即使仅加载Printer实体也可能触发冲突:

    • 删除项目dist编译目录、node_modules后重新安装依赖
    • 在DataSource配置中添加cache: false禁用元数据缓存,再重启服务
  • 校验schema配置一致性

    • 确认Printer实体的schema配置(如@Entity({ schema: 'public' }))与数据库中现有自定义类型的schema一致
    • 检查Postgres连接的search_path设置,确保应用使用的schema正确,避免跨schema类型名冲突
  • 排查synchronize模式的脏数据问题

    • 临时将synchronize设为false,手动创建表和所需类型,验证是否仍报错
    • 若手动操作无问题,先删除Printer相关表及自定义类型,再开启synchronize重启服务,让TypeORM重新同步
  • 检查实体字段的类型定义

    • 确认实体中自定义类型(如enum)未在多文件重复定义,避免TypeORM自动生成重复的数据库类型
    • 给enum指定明确的数据库类型名,比如:@Column('enum', { enum: PrinterStatus, name: 'printer_status_enum' }),防止自动生成的名称冲突

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 23:57:18