typeorm-seeding icon indicating copy to clipboard operation
typeorm-seeding copied to clipboard

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

Open zanstaszek9 opened this issue 5 years ago • 5 comments

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! [email protected] seed:run: `ts-node ./node_modules/typeorm-seeding/dist/cli.js seed`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] 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 [email protected]
3 info using [email protected]
4 verbose run-script [ 'preseed:run', 'seed:run', 'postseed:run' ]
5 info lifecycle [email protected]~preseed:run: [email protected]
6 info lifecycle [email protected]~seed:run: [email protected]
7 verbose lifecycle [email protected]~seed:run: unsafe-perm in lifecycle true
8 verbose lifecycle [email protected]~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 [email protected]~seed:run: CWD: C:\Users\stanislaw.zan_enxoo\Documents\gitea\OneCPQ\One-CPQ
10 silly lifecycle [email protected]~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 [email protected]~seed:run: Returned: code: 1  signal: null
12 info lifecycle [email protected]~seed:run: Failed to exec seed:run script
13 verbose stack Error: [email protected] 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 [email protected]
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 [email protected] seed:run: `ts-node ./node_modules/typeorm-seeding/dist/cli.js seed`
22 error Exit status 1
23 error Failed at the [email protected] 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 ]

zanstaszek9 avatar Sep 09 '20 14:09 zanstaszek9

Hi! Sorry for late response.

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

jorgebodega avatar Oct 12 '21 17:10 jorgebodega

I have the same problem, pls any workarounds?

artur-dani avatar Oct 28 '21 22:10 artur-dani

how did yo get the verbose log?

idemax avatar Nov 26 '21 15:11 idemax

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.

jorgebodega avatar Nov 26 '21 16:11 jorgebodega

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.

harshrathod50 avatar Dec 07 '21 07:12 harshrathod50