【发布时间】:2019-10-20 08:36:51
【问题描述】:
我遇到的问题是,当我运行迁移命令时,我总是收到 ETIMEOUT 错误,但如果我注释掉 await populateTable(),代码将运行而不会出现任何错误。
我已经尝试将 requestTimeout 从 15 秒增加到 300 秒,但这没有帮助。
这是我的代码:
创建以下内容:
// ormconfig.json
[
{
"name": "app",
"type": "mssql",
"host": "127.0.0.1",
"port": 1433,
"username": "root",
"password": "root",
"database": "app",
"logging": true,
"options": {
"useUTC": true
},
"entities": ["src/**/*.entity.ts"],
"migrations": ["migration/**/*.ts"],
"cli": {
"migrationsDir": "migration"
}
}
]
// root-dir/src/grouping/grouping.entity.ts
import { Column, Entity, OneToMany, PrimaryGeneratedColumn } from 'typeorm';
@Entity({ name: 'grouping' })
export class Grouping {
@PrimaryGeneratedColumn({ name: 'id', unsigned: true })
id: number;
@Column({ name: 'name', unique: true })
name: string;
}
// root-dir/migration/tables/grouping.ts
import { getRepository, QueryRunner, Table, TableIndex } from 'typeorm';
import { Grouping } from '../../src/grouping/grouping.entity';
export async function up(queryRunner: QueryRunner): Promise<any> {
await createTable(queryRunner);
await createIndexes(queryRunner);
await populateTable();
}
export async function down(queryRunner: QueryRunner): Promise<any> {
await queryRunner.dropIndex('grouping', 'IDX_GROUP');
await queryRunner.dropTable('grouping');
}
async function createTable(queryRunner: QueryRunner) {
return queryRunner.createTable(
new Table({
name: 'grouping',
columns: [
{
name: 'id',
type: 'integer',
isPrimary: true,
isGenerated: true,
generationStrategy: 'increment',
unsigned: true,
},
{
name: 'name',
type: 'varchar',
isUnique: true,
},
],
}),
true,
);
}
async function createIndexes(queryRunner: QueryRunner) {
return await queryRunner.createIndex(
'grouping',
new TableIndex({
name: 'IDX_GROUP',
columnNames: ['name'],
}),
);
}
async function populateTable() {
await getRepository(Grouping, 'app').save([{ name: 'classification' }, { name: 'categorization' }]);
}
// root-dir/migration/initial-migration.ts
import { MigrationInterface, QueryRunner } from 'typeorm';
import * as groupingTable from './tables/grouping';
export class InitialMigration1550229771145 implements MigrationInterface {
async up(queryRunner: QueryRunner): Promise<any> {
await groupingTable.up(queryRunner);
}
async down(queryRunner: QueryRunner): Promise<any> {
await groupingTable.down(queryRunner);
}
}
运行迁移命令。
ts-node ./node_modules/typeorm/cli.js migration:run -c
这应该创建 Grouping 表并插入 2 条记录,但我得到的是这个错误:
查询:CREATE TABLE "grouping" ("id" integer NOT NULL IDENTITY(1,1), "name" varchar(255) NOT NULL, CONSTRAINT "UQ_07314fe287a837177015c041131" UNIQUE ("name"), CONSTRAINT "PK_135d73da7246e0250716afdc0ab" PRIMARY键(“ID”)) 查询:SELECT SCHEMA_NAME() AS "schema_name" 查询:SELECT DB_NAME() AS "db_name" 查询:SELECT * FROM "app"."INFORMATION_SCHEMA"."TABLES" WHERE ("TABLE_SCHEMA" = 'dbo' AND "TABLE_NAME" = 'grouping') 查询:SELECT * FROM "app"."INFORMATION_SCHEMA"."COLUMNS" WHERE ("TABLE_SCHEMA" = 'dbo' AND "TABLE_NAME" = 'grouping') 查询:SELECT "columnUsages".*, "tableConstraints"."CONSTRAINT_TYPE", "chk"."definition" FROM "app"."INFORMATION_SCHEMA"."CONSTRAINT_COLUMN_USAGE" "columnUsages" INNER JOIN "app"."INFORMATION_SCHEMA"." TABLE_CONSTRAINTS" "tableConstraints" ON "tableConstraints"."CONSTRAINT_NAME" = "columnUsages"."CONSTRAINT_NAME" LEFT JOIN "app"."sys"."check_constraints" "chk" ON "chk"."name" = "columnUsages"。 "CONSTRAINT_NAME" WHERE (("columnUsages"."TABLE_SCHEMA" = 'dbo' AND "columnUsages"."TABLE_NAME" = 'grouping' AND "tableConstraints"."TABLE_SCHEMA" = 'dbo' AND "tableConstraints"."TABLE_NAME" = 'grouping')) AND "tableConstraints"."CONSTRAINT_TYPE" IN ('PRIMARY KEY', 'UNIQUE', 'CHECK') 查询:SELECT "fk"."name" AS "FK_NAME", 'app' AS "TABLE_CATALOG", "s1"."name" AS "TABLE_SCHEMA", "t1"."name" AS "TABLE_NAME", "col1" ."name" AS "COLUMN_NAME", "s2"."name" AS "REF_SCHEMA", "t2"."name" AS "REF_TABLE", "col2"."name" AS "REF_COLUMN", "fk". delete_referential_action_desc" AS "ON_DELETE", "fk"."update_referential_action_desc" AS "ON_UPDATE" FROM "app"."sys"."foreign_keys" "fk" INNER JOIN "app"."sys"."foreign_key_columns" "fkc" ON "fkc"."constraint_object_id" = "fk"."object_id" INNER JOIN "app"."sys"."tables" "t1" ON "t1"."object_id" = "fk"."parent_object_id" INNER JOIN" app"."sys"."schemas" "s1" ON "s1"."schema_id" = "t1"."schema_id" INNER JOIN "app"."sys"."tables" "t2" ON "t2"。 "object_id" = "fk"."referenced_object_id" INNER JOIN "app"."sys"."schemas" "s2" ON "s2"."schema_id" = "t2"."schema_id" INNER JOIN "app"。 sys"."columns" "col1" ON "col1"."column_id" = "fkc"."parent_column_id" AND "col1"."object_id" = "fk"."parent_object_id" INNER JOIN "app"."sys" ."columns" "col2" ON "co l2"."column_id" = "fkc"."referenced_column_id" AND "col2"."object_id" = "fk"."referenced_object_id" 查询: SELECT "TABLE_CATALOG", "TABLE_SCHEMA", "COLUMN_NAME", "TABLE_NAME" FROM "app"."INFORMATION_SCHEMA"."COLUMNS" WHERE COLUMNPROPERTY(object_id("TABLE_CATALOG" + '.' + "TABLE_SCHEMA" + '.' + "TABLE_NAME"), "COLUMN_NAME", 'IsIdentity') = 1 AND "TABLE_SCHEMA" IN ('dbo') 查询:SELECT "NAME", "COLLATION_NAME" FROM "sys"."databases" 查询:SELECT 'app' AS "TABLE_CATALOG", "s"."name" AS "TABLE_SCHEMA", "t"."name" AS "TABLE_NAME", "ind"."name" AS "INDEX_NAME", "col" ."name" AS "COLUMN_NAME", "ind"."is_unique" AS "IS_UNIQUE", "ind"."filter_definition" as "CONDITION" FROM "app"."sys"."indexes" "ind" INNER JOIN" app"."sys"."index_columns" "ic" ON "ic"."object_id" = "ind"."object_id" AND "ic"."index_id" = "ind"."index_id" INNER JOIN "app" ."sys"."columns" "col" ON "col"."object_id" = "ic"."object_id" AND "col"."column_id" = "ic"."column_id" INNER JOIN "app"。 sys"."tables" "t" ON "t"."object_id" = "ind"."object_id" INNER JOIN "app"."sys"."schemas" "s" ON "s"."schema_id" = "t"."schema_id" WHERE "ind"."is_primary_key" = 0 AND "ind"."is_unique_constraint" = 0 AND "t"."is_ms_shipped" = 0 查询: CREATE INDEX "IDX_GROUP" ON "grouping" ("name") 查询:开始交易 查询:INSERT INTO "grouping"("name") OUTPUT INSERTED."id" VALUES (@0), (@1) -- PARAMETERS: [{"value":"classification","type":"nvarchar", "params":[]},{"value":"categorization","type":"nvarchar","params":[]}] 查询失败:INSERT INTO "grouping"("name") OUTPUT INSERTED."id" VALUES (@0), (@1) -- PARAMETERS: [{"value":"classification","type":"nvarchar" ,"params":[]},{"value":"categorization","type":"nvarchar","params":[]}] 错误:{ RequestError:超时:请求未能在 15000 毫秒内完成 在 Request.tds.Request.err [as userCallback] (C:\Users\me\Workspace\app\api\node_modules\mssql\lib\tedious.js:629:19) 在 Request.callback (C:\Users\me\Workspace\app\api\node_modules\tedious\lib\request.js:37:27) 在 Connection.message (C:\Users\me\Workspace\app\api\node_modules\tedious\lib\connection.js:2136:24) 在 Connection.dispatchEvent (C:\Users\me\Workspace\app\api\node_modules\tedious\lib\connection.js:1084:36) 在 MessageIO.messageIo.on (C:\Users\me\Workspace\app\api\node_modules\tedious\lib\connection.js:984:14) 在 MessageIO.emit (events.js:189:13) 在 MessageIO.EventEmitter.emit (domain.js:441:20) 在 Message.message.on (C:\Users\me\Workspace\app\api\node_modules\tedious\lib\message-io.js:32:14) 在 Message.emit (events.js:194:15) 在 Message.EventEmitter.emit (domain.js:441:20) 代码:'ETIMEOUT', 编号:'ETIMEOUT', 状态:未定义, 原始错误: { RequestError:超时:请求未能在 15000 毫秒内完成 在 RequestError (C:\Users\me\Workspace\app\api\node_modules\tedious\lib\errors.js:32:12) 在 Connection.message (C:\Users\me\Workspace\app\api\node_modules\tedious\lib\connection.js:2136:33) 在 Connection.dispatchEvent (C:\Users\me\Workspace\app\api\node_modules\tedious\lib\connection.js:1084:36) 在 MessageIO.messageIo.on (C:\Users\me\Workspace\app\api\node_modules\tedious\lib\connection.js:984:14) 在 MessageIO.emit (events.js:189:13) 在 MessageIO.EventEmitter.emit (domain.js:441:20) 在 Message.message.on (C:\Users\me\Workspace\app\api\node_modules\tedious\lib\message-io.js:32:14) 在 Message.emit (events.js:194:15) 在 Message.EventEmitter.emit (domain.js:441:20) 在 endReadableNT (C:\Users\me\Workspace\app\api\node_modules\tedious\node_modules\readable-stream\lib_stream_readable.js:1077:12) 消息:'超时:请求未能在 15000 毫秒内完成', 代码:'ETIMEOUT'}, 名称:“请求错误”, 前面的错误:[] } 查询:回滚 查询:回滚 迁移运行期间出错: { QueryFailedError:错误:超时:请求未能在 15000 毫秒内完成 在新的 QueryFailedError (C:\Users\me\Workspace\app\api\src\error\QueryFailedError.ts:9:9) 在 C:\Users\me\Workspace\app\api\src\driver\sqlserver\SqlServerQueryRunner.ts:221:37 在 _query (C:\Users\me\Workspace\app\api\node_modules\mssql\lib\base.js:1346:25) 在 Request.tds.Request.err [as userCallback] (C:\Users\me\Workspace\app\api\node_modules\mssql\lib\tedious.js:671:15) 在 Request.callback (C:\Users\me\Workspace\app\api\node_modules\tedious\lib\request.js:37:27) 在 Connection.message (C:\Users\me\Workspace\app\api\node_modules\tedious\lib\connection.js:2136:24) 在 Connection.dispatchEvent (C:\Users\me\Workspace\app\api\node_modules\tedious\lib\connection.js:1084:36) 在 MessageIO.messageIo.on (C:\Users\me\Workspace\app\api\node_modules\tedious\lib\connection.js:984:14) 在 MessageIO.emit (events.js:189:13) 在 MessageIO.EventEmitter.emit (domain.js:441:20) 消息:'错误:超时:请求未能在 15000 毫秒内完成', 代码:'ETIMEOUT', 编号:'ETIMEOUT', 状态:未定义, 原始错误: { RequestError:超时:请求未能在 15000 毫秒内完成 在 RequestError (C:\Users\me\Workspace\app\api\node_modules\tedious\lib\errors.js:32:12) 在 Connection.message (C:\Users\me\Workspace\app\api\node_modules\tedious\lib\connection.js:2136:33) 在 Connection.dispatchEvent (C:\Users\me\Workspace\app\api\node_modules\tedious\lib\connection.js:1084:36) 在 MessageIO.messageIo.on (C:\Users\me\Workspace\app\api\node_modules\tedious\lib\connection.js:984:14) 在 MessageIO.emit (events.js:189:13) 在 MessageIO.EventEmitter.emit (domain.js:441:20) 在 Message.message.on (C:\Users\me\Workspace\app\api\node_modules\tedious\lib\message-io.js:32:14) 在 Message.emit (events.js:194:15) 在 Message.EventEmitter.emit (domain.js:441:20) 在 endReadableNT (C:\Users\me\Workspace\app\api\node_modules\tedious\node_modules\readable-stream\lib_stream_readable.js:1077:12) 消息:'超时:请求未能在 15000 毫秒内完成', 代码:'ETIMEOUT'}, 名称:'QueryFailedError', 前面的错误:[], 询问: 'INSERT INTO "grouping"("name") OUTPUT INSERTED."id" VALUES (@0), (@1)', 参数: [ MssqlParameter { 值:'分类',类型:'nvarchar',参数:[] }, MssqlParameter { 值:'分类',类型:'nvarchar',参数:[] } ] } npm 错误!代码生命周期 npm 错误!错误号 1 npm 错误! app-api@0.1.0 迁移:运行:
ts-node ./node_modules/typeorm/cli.js migration:run -c "app_engine"npm 错误!退出状态 1 npm 错误! npm 错误!在 app-api@0.1.0 迁移失败:运行脚本。 npm 错误!这可能不是 npm 的问题。上面可能还有额外的日志输出。npm 错误!可以在以下位置找到此运行的完整日志:
npm 错误! C:\Users\me\AppData\Roaming\npm-cache_logs\2019-06-04T18_56_36_972Z-debug.log
非常感谢任何帮助!
更新:
我在浏览以前的问题时发现了这个https://github.com/typeorm/typeorm/issues/3100#issuecomment-446309812,现在它正在工作。
【问题讨论】:
标签: sql-server typescript database-migration nestjs typeorm