使用Apollo GraphQL+TypeORM操作PostgreSQL出现Oct附近语法错误如何解决
报错根因
这个错误是TypeORM生成的INSERT SQL语句中存在未转义的原生JS日期字符串导致的,PostgreSQL解析SQL时把日期字符串里的月份缩写Oct识别为未知关键字,触发语法错误。你贴的resolver代码逻辑没有问题,问题出在Post实体类的字段定义上。
常见的错误实体写法
你的Post实体中大概率存在手动定义日期字段、默认值直接写死JS日期对象的逻辑,示例如下:
// 错误写法 @Column({ default: new Date() }) createdAt: Date;
这种写法会在服务启动时就执行一次new Date()得到一个固定的JS日期对象,TypeORM拼接SQL时会直接把该日期对象的toString结果(比如Fri Oct 13 2023 14:30:00 GMT+0800)直接拼入SQL,没有添加单引号转义,最终触发语法错误。
修复方案
选择以下任意一种方案修改你的Post实体类即可:
- 方案1:使用TypeORM内置的日期自动填充装饰器,无需手动配置默认值
import { CreateDateColumn, UpdateDateColumn } from "typeorm"; // 替换你原有手动写的日期字段定义 @CreateDateColumn() createdAt: Date; @UpdateDateColumn() updatedAt: Date;
- 方案2:手动指定默认值为数据库层面的时间函数,避免JS层面生成固定日期
@Column({ default: () => 'CURRENT_TIMESTAMP' }) createdAt: Date;
验证方法
你可以在TypeORM配置中开启logging: true,控制台会打印出生成的完整SQL语句,就能看到拼错的日期内容,方便定位校验。
内容的提问来源于stack exchange,提问作者niel_morphius
相关产品推荐
相关产品推荐

