TypeORM如何通过EntitySchema创建Postgres IDENTITY列
EntitySchema 配置 Postgres IDENTITY 列方法
直接在列配置中显式指定generated值为identity,同时搭配generatedIdentity参数即可,和装饰器的参数逻辑完全对应,不需要额外引入其他配置。
正确的配置示例:
const UserSchema = new EntitySchema<User>({ name: 'user', columns: { id: { type: Number, primary: true, generated: 'identity', generatedIdentity: 'ALWAYS' } } })
参数说明:
generated: 'identity'是Postgres等支持标准IDENTITY语法的数据库专属生成策略,常见文档里列的uuid/rowid/increment不是全部可选值,指定为identity后迁移就不会生成SERIAL类型列。generatedIdentity可选值为ALWAYS和BY DEFAULT,分别对应生成GENERATED ALWAYS AS IDENTITY和GENERATED BY DEFAULT AS IDENTITY的列定义,和@PrimaryGeneratedColumn装饰器里的同名参数行为完全一致。
配置正确后,生成的迁移代码会输出标准IDENTITY列定义,效果如下:
public async up(queryRunner: QueryRunner): Promise<void> { await queryRunner.query(` CREATE TABLE "user" ( "id" integer GENERATED ALWAYS AS IDENTITY NOT NULL, CONSTRAINT "PK_cace4a159ff9f2512dd42373760" PRIMARY KEY ("id") ) `); }
如果之前已经生成过使用SERIAL列的旧迁移,需要先回滚对应迁移,或者手动修改旧迁移里的列定义,避免执行迁移时出现结构冲突。
内容的提问来源于stack exchange,提问作者Troncoso
相关产品推荐
相关产品推荐

