如何在TypeORM迁移中指定列名大小写

时间:2018-10-22 14:23:40

标签: sql postgresql typescript migration typeorm

我正在使用typeORM,并且我想使用迁移而不是同步,因为我正在一个团队中工作,而要使数据库达到应用程序实际运行的状态实际上是很多繁琐的工作。

问题是,我在迁移中指定的每个列名都转换为小写字母,这是我通过使所有实体道具snake_case(这很糟糕)解决的。但是默认情况下,(我认为)postgres将外键转换为camelCase,因此在迁移过程中我无法通过外键将任何东西相互关联。 (因为它需要为camelCase,但查询会转换为小写)

我是否已明确问题所在?

是否有解决此问题的方法,或者有解决方法?

2 个答案:

答案 0 :(得分:0)

在postgresql中,除非您将双引号和表名包括在双引号中,否则它们会自动转换为小写:

columnName becomes columnname
"columnName" remains as columnName

请参见https://www.postgresql.org/docs/current/static/sql-syntax-lexical.html-“引用标识符也使其区分大小写,而未加引号的名称总是折叠成小写。”

因此,您应该将迁移编写为例如

ALTER TABLE "tableName" ADD COLUMN "columnName" character varying ...

并进行类似的查询。

答案 1 :(得分:0)

允许TypeOrm支持从camelCase转换为snake_case的替代方法可以通过调整ormconfig.js以支持Typeorm Naming Strategies包来实现。这将使您在代码内具有编码约定,而在数据库内具有数据库命名约定。

可以通过以下方式设置

npm i --save typeorm-naming-strategies

然后在ormconfig.js中添加以下行:

const SnakeNamingStrategy = require('typeorm-naming-strategies')
  .SnakeNamingStrategy;

module.exports = {
    name: 'development',
    type: 'postgres',
    host: 'localhost',
    port: 5432,
   ...
   namingStrategy: new SnakeNamingStrategy(),
}

在Postgres中命名列时,TypeOrm现在将遵循snake_case约定