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

Ste*_*ems 4 sql migration postgresql typescript typeorm

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

问题是我在迁移中指定的每个列名都被转换为小写,我已经通过使所有实体道具snake_case(顺便说一句,这太可怕了)解决了这个问题。但是默认情况下,外键会通过(我认为)postgres 转换为驼峰式大小写,因此我无法在迁移中通过外键将任何内容相互关联。(因为它需要是驼峰式,但查询被转换为小写)

我有没有说清楚我的问题是什么?

有没有办法解决这个问题,或者有没有解决方法?

yoz*_*yoz 6

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

columnName becomes columnname
"columnName" remains as columnName
Run Code Online (Sandbox Code Playgroud)

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

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

ALTER TABLE "tableName" ADD COLUMN "columnName" character varying ...
Run Code Online (Sandbox Code Playgroud)

和查询类似。


Dan*_*lay 6

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

它可以通过以下方式设置:

npm i --save typeorm-naming-strategies
Run Code Online (Sandbox Code Playgroud)

然后在你的 ormconfig.js 中,添加以下几行:

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

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

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

  • 这应该是一个可以接受的答案,太棒了! (2认同)