w3tecch / typeorm-seeding

🌱 A delightful way to seed test data into your database.
https://www.npmjs.com/package/typeorm-seeding
MIT License
887 stars 132 forks source link

errorMissingColumn when database columns have different naming in Entitiy file, seeding do not parse column names #93

Open zanstaszek9 opened 4 years ago

zanstaszek9 commented 4 years ago

Hello, I'm using PostgreSQL and NestJS. When trying to make seed for my table, I'm getting an error that mentions that the column names in the Query used in the seed are not found in the table. I have namingStrategy: new SnakeNamingStrategy() in my orm.config.ts file. Using QueryBuilder and repository interface in different classes, like catching GET/POST/DELETE works fine, the seeder is the only problematic place.

My entity file:

import { Entity, PrimaryGeneratedColumn, Column } from "typeorm";
import { AttributeTypes } from "../models/external.models";

@Entity()
export class BulkUploadAttributeDefinition {
    @PrimaryGeneratedColumn()
    id: Number;

    @Column()
    columnName: String;

    @Column()
    section: String;

    @Column()
    columnLabel: String;

    @Column()
    columnType: AttributeTypes;

    @Column()
    isRequired: Boolean;

    @Column()
    isPermutable: Boolean;

    @Column({nullable: true})
    numberOfPermutations: Number;

}

Columns in the database:

"id"
"column_name"
"section"
"column_label"
"column_type"
"is_required"
"is_permutable"
"number_of_permutations"

Seeder code:

//file name: create-attribute-definition.seed.ts
import { Factory, Seeder } from 'typeorm-seeding'
import { Connection } from 'typeorm'
import { BulkUploadAttributeDefinition } from '../entities/bulk-upload-attribute-definition'

export default class CreateUsers implements Seeder {

  public async run(factory: Factory, connection: Connection): Promise<any> {
    const repository = connection.getRepository(BulkUploadAttributeDefinition);
    await repository.save({ id: 10, column_name: 'Product 1', section: 'product-1', column_label: 'Product', column_type: 'Id', is_required: true, is_permutable: false, number_of_permutations: null });
  }
}

Terminal response:

�  TypeORM Seeding v1.6.1
√ ORM Config loaded
√ Factories are imported
√ Seeders are imported
√ Database connected
- Executing CreateUsers Seederquery: SELECT "BulkUploadAttributeDefinition"."id" AS "BulkUploadAttributeDefinition_id", "BulkUploadAttributeDefinition"."columnName" AS "BulkUploadAttributeDefinition_columnName", "BulkUploadAttributeDefinition"."section" AS "BulkUploadAttributeDefinition_section", "BulkUploadAttributeDefinition"."columnLabel" AS "BulkUploadAttributeDefinition_columnLabel", "BulkUploadAttributeDefinition"."columnType" AS "BulkUploadAttributeDefinition_columnType", "BulkUploadAttributeDefinition"."isRequired" AS "BulkUploadAttributeDefinition_isRequired", "BulkUploadAttributeDefinition"."isPermutable" AS "BulkUploadAttributeDefinition_isPermutable", "BulkUploadAttributeDefinition"."numberOfPermutations" AS "BulkUploadAttributeDefinition_numberOfPermutations" FROM "bulk_upload_attribute_definition" "BulkUploadAttributeDefinition" WHERE "BulkUploadAttributeDefinition"."id" IN ($1) -- PARAMETERS: [10]
query failed: SELECT "BulkUploadAttributeDefinition"."id" AS "BulkUploadAttributeDefinition_id", "BulkUploadAttributeDefinition"."columnName" AS "BulkUploadAttributeDefinition_columnName", "BulkUploadAttributeDefinition"."section" AS "BulkUploadAttributeDefinition_section", "BulkUploadAttributeDefinition"."columnLabel" AS "BulkUploadAttributeDefinition_columnLabel", "BulkUploadAttributeDefinition"."columnType" AS "BulkUploadAttributeDefinition_columnType", "BulkUploadAttributeDefinition"."isRequired" AS "BulkUploadAttributeDefinition_isRequired", "BulkUploadAttributeDefinition"."isPermutable" AS "BulkUploadAttributeDefinition_isPermutable", "BulkUploadAttributeDefinition"."numberOfPermutations" AS "BulkUploadAttributeDefinition_numberOfPermutations" FROM "bulk_upload_attribute_definition" "BulkUploadAttributeDefinition" WHERE "BulkUploadAttributeDefinition"."id" IN ($1) -- PARAMETERS: [10]
error: error: kolumna BulkUploadAttributeDefinition.columnName nie istnieje
    at Parser.parseErrorMessage (C:\Users\stanislaw.zan_enxoo\Documents\gitea\OneCPQ\One-CPQ\node_modules\pg-protocol\src\parser.ts:357:11)
    at Parser.handlePacket (C:\Users\stanislaw.zan_enxoo\Documents\gitea\OneCPQ\One-CPQ\node_modules\pg-protocol\src\parser.ts:186:21)
    at Parser.parse (C:\Users\stanislaw.zan_enxoo\Documents\gitea\OneCPQ\One-CPQ\node_modules\pg-protocol\src\parser.ts:101:30)
    at Socket.<anonymous> (C:\Users\stanislaw.zan_enxoo\Documents\gitea\OneCPQ\One-CPQ\node_modules\pg-protocol\src\index.ts:7:48)
    at Socket.emit (events.js:315:20)
    at Socket.EventEmitter.emit (domain.js:483:12)
    at addChunk (_stream_readable.js:295:12)
    at readableAddChunk (_stream_readable.js:271:9)
    at Socket.Readable.push (_stream_readable.js:212:10)
    at TCP.onStreamRead (internal/stream_base_commons.js:186:23) {
  length: 291,
  severity: 'BŁĄD',
  code: '42703',
  detail: undefined,
  hint: 'Być może chodziło ci o wskazanie kolumny "BulkUploadAttributeDefinition.column_name".',
  position: '84',
  internalPosition: undefined,
  internalQuery: undefined,
  where: undefined,
  schema: undefined,
  table: undefined,
  column: undefined,
  dataType: undefined,
  constraint: undefined,
  file: 'd:\\pginstaller_12.auto\\postgres.windows-x64\\src\\backend\\parser\\parse_relation.c',
  line: '3359',
  routine: 'errorMissingColumn'
}
× Could not run the seed CreateUsers!
QueryFailedError: kolumna BulkUploadAttributeDefinition.columnName nie istnieje
    at new QueryFailedError (C:\Users\stanislaw.zan_enxoo\Documents\gitea\OneCPQ\One-CPQ\src\error\QueryFailedError.ts:9:9)
    at Query.callback (C:\Users\stanislaw.zan_enxoo\Documents\gitea\OneCPQ\One-CPQ\src\driver\postgres\PostgresQueryRunner.ts:178:30)
    at Query.handleError (C:\Users\stanislaw.zan_enxoo\Documents\gitea\OneCPQ\One-CPQ\node_modules\pg\lib\query.js:139:19)
    at Client._handleErrorMessage (C:\Users\stanislaw.zan_enxoo\Documents\gitea\OneCPQ\One-CPQ\node_modules\pg\lib\client.js:326:17)
    at Connection.emit (events.js:315:20)
    at Connection.EventEmitter.emit (domain.js:483:12)
    at C:\Users\stanislaw.zan_enxoo\Documents\gitea\OneCPQ\One-CPQ\node_modules\pg\lib\connection.js:109:12
    at Parser.parse (C:\Users\stanislaw.zan_enxoo\Documents\gitea\OneCPQ\One-CPQ\node_modules\pg-protocol\src\parser.ts:102:9)
    at Socket.<anonymous> (C:\Users\stanislaw.zan_enxoo\Documents\gitea\OneCPQ\One-CPQ\node_modules\pg-protocol\src\index.ts:7:48)
    at Socket.emit (events.js:315:20) {
  length: 291,
  severity: 'BŁĄD',
  code: '42703',
  detail: undefined,
  hint: 'Być może chodziło ci o wskazanie kolumny "BulkUploadAttributeDefinition.column_name".',
  position: '84',
  internalPosition: undefined,
  internalQuery: undefined,
  where: undefined,
  schema: undefined,
  table: undefined,
  column: undefined,
  dataType: undefined,
  constraint: undefined,
  file: 'd:\\pginstaller_12.auto\\postgres.windows-x64\\src\\backend\\parser\\parse_relation.c',
  line: '3359',
  routine: 'errorMissingColumn',
  query: 'SELECT "BulkUploadAttributeDefinition"."id" AS "BulkUploadAttributeDefinition_id", "BulkUploadAttributeDefinition"."columnName" AS "BulkUploadAttributeDefinition_columnName", "BulkUploadAttributeDefinition"."section" AS "BulkUploadAttributeDefinition_section", "BulkUploadAttributeDefinition"."columnLabel" AS "BulkUploadAttributeDefinition_columnLabel", "BulkUploadAttributeDefinition"."columnType" AS "BulkUploadAttributeDefinition_columnType", "BulkUploadAttributeDefinition"."isRequired" AS "BulkUploadAttributeDefinition_isRequired", "BulkUploadAttributeDefinition"."isPermutable" AS "BulkUploadAttributeDefinition_isPermutable", "BulkUploadAttributeDefinition"."numberOfPermutations" AS "BulkUploadAttributeDefinition_numberOfPermutations" FROM "bulk_upload_attribute_definition" "BulkUploadAttributeDefinition" WHERE "BulkUploadAttributeDefinition"."id" IN ($1)',
  parameters: [ 10 ]
}
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! one-cpq@0.0.1 seed:run: `ts-node ./node_modules/typeorm-seeding/dist/cli.js seed`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the one-cpq@0.0.1 seed:run script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     C:\Users\stanislaw.zan_enxoo\AppData\Roaming\npm-cache\_logs\2020-09-09T14_47_52_299Z-debug.log

Log file:

0 info it worked if it ends with ok
1 verbose cli [
1 verbose cli   'C:\\Program Files\\nodejs\\node.exe',
1 verbose cli   'C:\\Program Files\\nodejs\\node_modules\\npm\\bin\\npm-cli.js',
1 verbose cli   'run',
1 verbose cli   'seed:run'
1 verbose cli ]
2 info using npm@6.14.6
3 info using node@v12.18.3
4 verbose run-script [ 'preseed:run', 'seed:run', 'postseed:run' ]
5 info lifecycle one-cpq@0.0.1~preseed:run: one-cpq@0.0.1
6 info lifecycle one-cpq@0.0.1~seed:run: one-cpq@0.0.1
7 verbose lifecycle one-cpq@0.0.1~seed:run: unsafe-perm in lifecycle true
8 verbose lifecycle one-cpq@0.0.1~seed:run: PATH: C:\Program Files\nodejs\node_modules\npm\node_modules\npm-lifecycle\node-gyp-bin;C:\Users\stanislaw.zan_enxoo\Documents\gitea\OneCPQ\One-CPQ\node_modules\.bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files (x86)\Pulse Secure\VC142.CRT\X64\;C:\Program Files (x86)\Pulse Secure\VC142.CRT\X86\;C:\Program Files (x86)\Common Files\Pulse Secure\VC142.CRT\X64\;C:\Program Files (x86)\Common Files\Pulse Secure\VC142.CRT\X86\;C:\Program Files\nodejs\;C:\Users\stanislaw.zan_enxoo\AppData\Local\Microsoft\WindowsApps;C:\Users\stanislaw.zan_enxoo\AppData\Local\Programs\Microsoft VS Code\bin;C:\Users\stanislaw.zan_enxoo\AppData\Local\Programs\Git\cmd;C:\Users\stanislaw.zan_enxoo\AppData\Roaming\npm
9 verbose lifecycle one-cpq@0.0.1~seed:run: CWD: C:\Users\stanislaw.zan_enxoo\Documents\gitea\OneCPQ\One-CPQ
10 silly lifecycle one-cpq@0.0.1~seed:run: Args: [
10 silly lifecycle   '/d /s /c',
10 silly lifecycle   'ts-node ./node_modules/typeorm-seeding/dist/cli.js seed'
10 silly lifecycle ]
11 silly lifecycle one-cpq@0.0.1~seed:run: Returned: code: 1  signal: null
12 info lifecycle one-cpq@0.0.1~seed:run: Failed to exec seed:run script
13 verbose stack Error: one-cpq@0.0.1 seed:run: `ts-node ./node_modules/typeorm-seeding/dist/cli.js seed`
13 verbose stack Exit status 1
13 verbose stack     at EventEmitter.<anonymous> (C:\Program Files\nodejs\node_modules\npm\node_modules\npm-lifecycle\index.js:332:16)
13 verbose stack     at EventEmitter.emit (events.js:315:20)
13 verbose stack     at ChildProcess.<anonymous> (C:\Program Files\nodejs\node_modules\npm\node_modules\npm-lifecycle\lib\spawn.js:55:14)
13 verbose stack     at ChildProcess.emit (events.js:315:20)
13 verbose stack     at maybeClose (internal/child_process.js:1021:16)
13 verbose stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:286:5)
14 verbose pkgid one-cpq@0.0.1
15 verbose cwd C:\Users\stanislaw.zan_enxoo\Documents\gitea\OneCPQ\One-CPQ
16 verbose Windows_NT 10.0.19041
17 verbose argv "C:\\Program Files\\nodejs\\node.exe" "C:\\Program Files\\nodejs\\node_modules\\npm\\bin\\npm-cli.js" "run" "seed:run"
18 verbose node v12.18.3
19 verbose npm  v6.14.6
20 error code ELIFECYCLE
21 error errno 1
22 error one-cpq@0.0.1 seed:run: `ts-node ./node_modules/typeorm-seeding/dist/cli.js seed`
22 error Exit status 1
23 error Failed at the one-cpq@0.0.1 seed:run script.
23 error This is probably not a problem with npm. There is likely additional logging output above.
24 verbose exit [ 1, true ]
jorgebodega commented 2 years ago

Hi! Sorry for late response.

Seems like a problem with typeorm and how naming works. Did you try same query in some other places?

artur-dani commented 2 years ago

I have the same problem, pls any workarounds?

idemax commented 2 years ago

how did yo get the verbose log?

jorgebodega commented 2 years ago

Sorry, I couldn't check this, but basically we are using TypeORM entity manager to save entity generated by factory.

await em.save<Entity>(entity, saveOptions)

If anyone of you could prepare an example in another repo, where creating an entity works, but in factory fails, I could check easily. Anyother problem, pls write it here.

harshrathod50 commented 2 years ago

The issue is not with TypeORM but Postgres. Use one naming convention for all the columns, either snake-case or camel-case. When using camel-case, remember to use double quotes around the column names at the time of creating the table.