SQL Server с использованием TypeORM: время ожидания ошибки: не удалось выполнить запрос при вставке записей в пакетном режиме - PullRequest
1 голос
/ 04 июня 2019

Проблема, с которой я сталкиваюсь, заключается в том, что когда я запускаю команду миграции, я всегда получаю ошибку 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" NOT NULL IDENTITY (1,1), "name" varchar (255) NOT NULL, CONSTRAINT "UQ_07314fe287a837177015c041131" UNIQUE ("name"), CONSTRAINT "PK_135d73da724IM" K0506) 0507 (050) 50)) запрос: SELECT SCHEMA_NAME () AS запрос "имя_схемы": SELECT DB_NAME () AS запрос "db_name": SELECT * FROM "app". "INFORMATION_SCHEMA". "TABLES" ГДЕ ("TABLE_SCHEMA" = 'dbo' И "TABLE_NAME"= 'grouping') запрос: SELECT * FROM" app "." INFORMATION_SCHEMA "." COLUMNS "WHERE (" TABLE_SCHEMA "= 'dbo' AND" TABLE_NAME "= 'grouping)) запрос: ВЫБЕРИТЕ" columnUsages ". *," TableConstraints "." CONSTRAINT_TYPE "," chk "." Определение "FROM" app "."INFORMATION_SCHEMA "." CONSTRAINT_COLUMN_USAGE "" columnUsages "INNER JOIN" app "." INFORMATION_SCHEMA "." TABLE_CONSTRAINTS "" "tableConstraints" ON "tableConstraints". "CONSTRAINT_NAME" = "columnUsages". ". "check_constraints" "chk" ON "chk". "name" = "columnUsages". "CONSTRAINT_NAME" WHERE (("columnUsages". "TABLE_SCHEMA" = 'dbo' AND "columnUsages". "TABLE_NAME" = 'группировка' AND"tableConstraints". "TABLE_SCHEMA" = 'dbo' И "tableConstraints". "TABLE_NAME" = "grouping")) И "tableConstraints". "CONSTRAINT_TYPE" IN ('PRIMARY KEY', 'UNIQUE', 'CHECK') запрос:ВЫБЕРИТЕ "fk". "Name" AS "FK_NAME", 'app "AS" TABLE_CATALOG "," s1 "." Name "AS" TABLE_SCHEMA "," t1 "." Name "AS" TABLE_NAME "," col1 "."имя "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 ""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 "col2". "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 И запрос" TABLE_SCHEMA "IN ('dbo'): ВЫБЕРИТЕ« NAME »,« COLLATION_NAME »ОТ "sys". "Базы данных" запрос: ВЫБЕРИТЕ "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" как "СОСТОЯНИЕ" ОТ "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 И "ind". "is_unique_constraint" = 0 И "t". "is_ms_shipped" = 0запрос: CREATE INDEX "IDX_GROUP" ON "группировка" ("имя") запрос: НАЧАЛО СДЕЛКИ query: INSERT INTO "grouping" ("name") OUTPUT INSERTED. "id" VALUES (@ 0), (@ 1) - ПАРАМЕТРЫ: [{"value": "классификация", "type": "nvarchar", "PARAMS": []}, { "значение": "категоризации", "типа": "NVARCHAR", "PARAMS": []}] запрос не выполнен: INSERT INTO "grouping" ("name") OUTPUT INSERTED. "id" VALUES (@ 0), (@ 1) - ПАРАМЕТРЫ: [{"value": "классификация", "type": "nvarchar" , "PARAMS": []}, { "значение": "категоризации", "тип": "NVARCHAR", "PARAMS": []}] error: {RequestError: Тайм-аут: не удалось выполнить запрос в 15000ms at Request.tds.Request.err [как userCallback] (C: \ Users \ me \ Workspace \ app \ api \ node_modules \ mssql \ lib \ tedious.js: 629: 19) at 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) at 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», состояние: не определено, originalError: {RequestError: Timeout: не удалось выполнить запрос в 15000ms в 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) at 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) at endReadableNT (C: \ Users \ me \ Workspace \ app \ api \ node_modules \ tedious \ node_modules \ readable-stream \ lib_stream_readable.js: 1077: 12) сообщение: «Тайм-аут: не удалось выполнить запрос в 15000 мс», код: 'ETIMEOUT'}, имя: 'RequestError', previousingErrors: []} запрос: ROLLBACK запрос: ROLLBACK Ошибка во время выполнения миграции: {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) at Request.tds.Request.err [как userCallback] (C: \ Users \ me \ Workspace \ app \ api \ node_modules \ mssql \ lib \ tedious.js: 671: 15) at 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) at 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», состояние: не определено, originalError: {RequestError: Timeout: не удалось выполнить запрос в 15000msв 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) at 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) at 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 ") ВЫХОД ВСТАВЛЕН." Id "VALUES (@ 0), (@ 1)', параметры: [MssqlParameter {значение: 'классификация', тип: 'nvarchar', параметры: []}, MssqlParameter {значение: 'категоризация', тип: 'nvarchar', параметры: []}]} нпм ERR! код ELIFECYCLE нпм ERR! Errno 1 нпм ERR! app-api@0.1.0 миграция: запустите: ts-node ./node_modules/typeorm/cli.js migration:run -c "app_engine" нпм ERR! Статус выхода 1 нпм ERR! нпм ERR! Ошибка при переносе app-api@0.1.0: запустите скрипт. нпм ERR! Это, вероятно, не проблема с npm. Скорее всего, выше вывод журнала.

нпм ERR! Полный журнал этого прогона можно найти в:
нпм ERR! C: \ Users \ я \ AppData \ Roaming \ NPM-cache_logs \ 2019-06-04T18_56_36_972Z-debug.log

Любая помощь очень ценится!

Обновление:

Я нашел это https://github.com/typeorm/typeorm/issues/3100#issuecomment-446309812 при просмотре предыдущих выпусков, и теперь он работает.

...