TypeORM迁移未生成实体表仅创建migrations表问题求助
我使用TypeScript、TypeORM和PostgreSQL构建后端应用,执行迁移生成与运行命令后,数据库仅生成了一个包含3列的空migrations表,自己编写的实体对应的表完全未被创建。
使用的命令
- 生成迁移:
"migration:generate": "typeorm-ts-node-commonjs -d ./src/database/data-source.ts migration:generate ./src/migration/default" - 执行迁移:
"migration:run": "typeorm-ts-node-commonjs -d ./src/database/data-source.ts migration:run"
DataSource配置代码
export const AppDataSource = new DataSource({ type: "postgres", host: process.env.DB_HOST, port: Number(process.env.DB_PORT), username: process.env.DB_USER, password: process.env.DB_PASSWORD, database: process.env.DB_NAME, synchronize: false, logging: false, entities: [`${__dirname}/**/entity/*.{ts,js}`], migrations: [`${__dirname}/**/migration/*.{ts,js}`], });
自动生成的迁移文件未包含实体表创建逻辑(已截图确认)
验证实体路径匹配性
检查entities配置的路径${__dirname}/**/entity/*.{ts,js}是否能正确定位到实体文件。可以在启动代码中添加console.log(AppDataSource.entityMetadatas),查看TypeORM是否成功加载到实体类。若路径错误,TypeORM无法识别实体,自然不会生成对应表结构。检查实体装饰器完整性
确保每个实体类都添加了@Entity()装饰器,字段也正确使用@Column()、@PrimaryGeneratedColumn()等装饰器。示例:import { Entity, Column, PrimaryGeneratedColumn } from "typeorm"; @Entity() export class User { @PrimaryGeneratedColumn() id: number; @Column() name: string; }缺少
@Entity()装饰器的类不会被TypeORM判定为数据库实体。检查迁移文件内容
重点查看自动生成迁移文件的up方法,确认是否包含创建实体表的SQL语句。若up方法为空,说明TypeORM未检测到需要创建的表结构,核心原因仍是实体未被正确加载。确认环境变量正确性
验证process.env中的数据库连接参数(主机、端口、库名等)是否正确,避免TypeORM连接到了错误的数据库,导致表创建在非预期库中。测试手动迁移
手动创建一个包含表创建SQL的迁移文件,执行migration:run命令,若能成功创建表,说明问题出在自动迁移生成环节,仍需排查实体加载逻辑。检查版本兼容性
确认TypeORM版本与PostgreSQL版本是否兼容,部分版本组合可能存在迁移生成异常,可尝试升级或降级TypeORM至稳定版本。
内容的提问来源于stack exchange,提问作者Alojarf

