“QueryFailedError:整数输入语法无效:”在查询类型浮点时

Har*_*rry 1 postgresql typeorm nestjs

使用 TypeORM QueryBuilder() 查询数据库时,我得到:

QueryFailedError: invalid input syntax for integer: "X"
Run Code Online (Sandbox Code Playgroud)

X 是存储在数据库中的值。

最初我的实体是类型的;

{type: 'decimal', precision: 5, scale: 2 }
value: number
Run Code Online (Sandbox Code Playgroud)

由于我已将其更改为:

{type: 'real'}
value: string
Run Code Online (Sandbox Code Playgroud)

并尝试:

'float'
value: string
Run Code Online (Sandbox Code Playgroud)

所有三种类型都会抛出相同的错误。但是,如果数据库中的值没有任何小数位 - 它工作正常。

我正在运行 Postgres v11.4、TypeORM v0.2.18 和 Nest.js v6.5.3

实体定义:

export class Entity extends BaseEntity {

    @Column('float')
    value: string;
}
Run Code Online (Sandbox Code Playgroud)

查询:

const current = await this.entityRepo
            .createQueryBuilder('uL')
            .leftJoin('uL.user', 'user')
            .leftJoinAndSelect('uL.currentLevel', 'cL')
            .where('user.id = :id', { id: userId })
            .getOne();
Run Code Online (Sandbox Code Playgroud)

我期望返回的实体的值是正确的十进制间距。

小智 5

更新到TypeORM v0.2.18后,我遇到了同样的错误:PostgreSQL 实际上并不知道“数字”;更多关于Microsoft GitHub 上typeorm存储库的信息

改变了这一点:

@Column()
value: number;
Run Code Online (Sandbox Code Playgroud)

...到那个:

@Column({type: 'real'})
value: string;
Run Code Online (Sandbox Code Playgroud)

我忘了迁移;你是否?

重要运行迁移,以实际应用这些更改:

npm run typeorm:migrate ChangedNumbersTypeToReal
npm run build; npm run typeorm:run
Run Code Online (Sandbox Code Playgroud)

现在一切都应该好了。

您可以在他们的GitHub 上阅读有关使用 TypeORM 进行迁移的更多信息