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

TypeORM迁移PostgreSQL时触发栈溢出错误求助

TypeORM迁移触发栈溢出及循环依赖问题求助

执行TypeORM迁移时出现栈溢出错误,原项目中遇到该问题后,新建空白项目仍可复现。

配置文件(ormconfig.ts)

import { DataSource } from 'typeorm';

const env = {
  "DB_HOST":"localhost",
  "DB_PORT":5432,
  "DB_USERNAME":"postgres",
  "DB_PASSWORD":"postgres",
  "DB_DATABASE":"task-management",
}

export const connectionSource = new DataSource({
  migrationsTableName: 'migrations',
  type: 'postgres',
  host: env.DB_HOST,
  port: env.DB_PORT,
  username: env.DB_USERNAME,
  password: env.DB_PASSWORD,
  database: env.DB_DATABASE,
  logging: false,
  synchronize: false,
  name: 'default',
  migrations: ['migrations/**/*{.ts,.js}'],
});

执行的迁移命令

typeorm-ts-node-esm migration:run -d migrations/ormconfig.ts

初始错误信息

Error during migration run:
    RangeError: Maximum call stack size exceeded
        at /Users/christianayscue/Desktop/nestjsClass/nestjs-task-management/node_modules/src/util/DirectoryExportedClassesLoader.ts:29:43
        at Array.forEach (<anonymous>)
        at loadFileClasses (/Users/christianayscue/Desktop/nestjsClass/nestjs-task-management/node_modules/src/util/DirectoryExportedClassesLoader.ts:29:35)
        at /Users/christianayscue/Desktop/nestjsClass/nestjs-task-management/node_modules/src/util/DirectoryExportedClassesLoader.ts:27:42
        at Array.forEach (<anonymous>)
        at loadFileClasses (/Users/christianayscue/Desktop/nestjsClass/nestjs-task-management/node_modules/src/util/DirectoryExportedClassesLoader.ts:27:22)
        at /Users/christianayscue/Desktop/nestjsClass/nestjs-task-management/node_modules/src/util/DirectoryExportedClassesLoader.ts:30:17
        at Array.forEach (<anonymous>)
        at loadFileClasses (/Users/christianayscue/Desktop/nestjsClass/nestjs-task-management/node_modules/src/util/DirectoryExportedClassesLoader.ts:29:35)
        at /Users/christianayscue/Desktop/nestjsClass/nestjs-task-management/node_modules/src/util/DirectoryExportedClassesLoader.ts:30:17

排查过程

推测是DirectoryExportedClassesLoader.ts存在循环依赖导致无限循环,于是在该文件第26行添加console.log(JSON.stringify(exported)),得到新错误:

TypeError: Converting circular structure to JSON
    --> starting at object with constructor 'DataSource'
    |     property 'driver' -> object with constructor 'PostgresDriver'
    --- property 'connection' closes the circle
    at JSON.stringify (<anonymous>)
    at loadFileClasses (/Users/christianayscue/Desktop/nestjsClass/typeormTest/src/util/DirectoryExportedClassesLoader.ts:29:25)

可见当存在循环依赖时,DirectoryExportedClassesLoader.ts会因递归调用触发栈溢出错误,恳请协助解决!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 22:10:28