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

NestJS对接Postgres报错不支持Object数据类型问题咨询

报错根因

TypeScript 的类型标注仅在编译阶段生效,编译为纯 JavaScript 后所有类型信息会被完全擦除。NestJS 中对接 Postgres 用的 TypeORM 库,其@Column装饰器默认在运行时通过反射机制推导字段对应的数据库类型,本身不识别 TypeScript 的联合类型语法。
你定义的number | string联合类型,在运行时反射拿到的类型标记就是Object,而 Postgres 没有对应 Object 的原生字段类型,因此直接抛出Data type Object is not supported by Postgres database报错。
你当前的代码只给字段加了 TS 层面的联合类型声明,没有给@Column装饰器显式指定数据库侧的列类型配置,TypeORM 无法自动推导联合类型对应的 SQL 类型,是触发问题的直接原因。

修复方法

根据实际业务场景二选一即可:

  • 如果字段实际只会存储单一格式的值(纯数字/纯字符串),直接将 TS 类型改为确定的单一类型,同时在@Column中显式指定对应数据库类型,避免自动推导异常:
    存储字符串时示例:
    @Column({ type: 'varchar', nullable: true })
    Test: string;
    
    存储数字时示例(根据数值精度选择int/bigint/numeric等类型即可):
    @Column({ type: 'int', nullable: true })
    Test: number;
    
  • 如果字段确实需要兼容存储数字、字符串两种格式的值,Postgres 侧只能选择通用文本类型存储,TS 侧保留联合类型的同时必须显式声明列类型为text/varchar,数字存入时会自动转为文本格式,数据取出后在业务层自行做类型校验、转换即可:
    @Column({ type: 'text', nullable: true })
    Test: number | string;
    

注意:只要字段的TS类型不是单一的基础原始类型(比如联合类型、自定义对象类型、数组类型等),都必须在@Column配置中显式传入type参数,明确指定字段对应的数据库列类型,不要依赖TypeORM的自动反射推导,否则大概率会触发类型不支持的报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 13:36:22