【发布时间】:2021-08-27 17:37:39
【问题描述】:
我有一个这样的 ormconfig.ts:
const config: ConnectionOptions = {
type: "postgres",
host: "localhost",
username: "postgres",
password: "postgres",
database: "dbname",
entities: ["dist/database/entities/**/*.js"],
migrations: ["dist/migration/**/*.js"],
cli: {
entitiesDir: "src/database/entities",
migrationsDir: "src/migration",
},
synchronize: true,
name: "app",
};
还有这样的实体:
@Entity("follows")
export class Follow extends BaseEntity {
@PrimaryColumn()
followerAddress: string;
@PrimaryColumn()
followeeAddress: string;
@OneToOne(() => User, (user) => user.address)
@JoinColumn({ name: "followerAddress" })
followerUser: User;
@OneToOne(() => User, (user) => user.address)
@JoinColumn({ name: "followeeAddress" })
followeeUser: User;
}
如果我重命名 PrimaryColumns 并将其改为:
@Entity("follows")
export class Follow extends BaseEntity {
@PrimaryColumn()
followerAddressNew: string;
@PrimaryColumn()
followeeAddressNew: string;
@OneToOne(() => User, (user) => user)
@JoinColumn({ name: "followerAddress" })
followerUser: User;
@OneToOne(() => User, (user) => user)
@JoinColumn({ name: "followeeAddress" })
followeeUser: User;
}
然后我得到以下错误:
QueryFailedError: constraint "PK_0d65998d7ca318692c5021c8121" of relation "follows" does not exist
Synchronize 设置为 true,所以我不确定是否需要生成和运行迁移,但我尝试过并得到:
QueryFailedError: constraint "PK_439cf7d31c1f020884802168a8c" of relation "follows" does not exist
好像生成的migration文件加了一次约束,然后又丢了两次?
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "public"."follows" ADD "followerAddressfdsa" character varying NOT NULL`);
await queryRunner.query(`ALTER TABLE "public"."follows" DROP CONSTRAINT "PK_3f7767cc6077ad78f956bffc8a7"`);
await queryRunner.query(`ALTER TABLE "public"."follows" ADD CONSTRAINT "PK_59ecb7646bafb5e2ae63d6f8deb" PRIMARY KEY ("followerAddress", "followeeAddress", "followerAddressfdsa")`);
await queryRunner.query(`ALTER TABLE "public"."follows" ADD "followeeAddressfdsa" character varying NOT NULL`);
await queryRunner.query(`ALTER TABLE "public"."follows" DROP CONSTRAINT "PK_59ecb7646bafb5e2ae63d6f8deb"`);
await queryRunner.query(`ALTER TABLE "public"."follows" ADD CONSTRAINT "PK_439cf7d31c1f020884802168a8c" PRIMARY KEY ("followerAddress", "followeeAddress", "followerAddressfdsa", "followeeAddressfdsa")`);
await queryRunner.query(`ALTER TABLE "public"."follows" DROP CONSTRAINT "PK_439cf7d31c1f020884802168a8c"`);
await queryRunner.query(`ALTER TABLE "public"."follows" ADD CONSTRAINT "PK_073836419485cc2ca626f9ce5a8" PRIMARY KEY ("followerAddressfdsa", "followeeAddressfdsa")`);
await queryRunner.query(`ALTER TABLE "public"."follows" DROP CONSTRAINT "FK_e37f798c5697e8b84094d64a68f"`);
await queryRunner.query(`ALTER TABLE "public"."follows" DROP CONSTRAINT "FK_70456987d622cd40a732aec83bd"`);
await queryRunner.query(`ALTER TABLE "public"."follows" ALTER COLUMN "followerAddress" DROP NOT NULL`);
await queryRunner.query(`ALTER TABLE "public"."follows" DROP CONSTRAINT "PK_439cf7d31c1f020884802168a8c"`);
await queryRunner.query(`ALTER TABLE "public"."follows" ADD CONSTRAINT "PK_b9a8a76998607a9752a4d756814" PRIMARY KEY ("followeeAddress", "followerAddressfdsa", "followeeAddressfdsa")`);
await queryRunner.query(`ALTER TABLE "public"."follows" ALTER COLUMN "followeeAddress" DROP NOT NULL`);
await queryRunner.query(`ALTER TABLE "public"."follows" DROP CONSTRAINT "PK_b9a8a76998607a9752a4d756814"`);
await queryRunner.query(`ALTER TABLE "public"."follows" ADD CONSTRAINT "PK_073836419485cc2ca626f9ce5a8" PRIMARY KEY ("followerAddressfdsa", "followeeAddressfdsa")`);
await queryRunner.query(`ALTER TABLE "public"."follows" ADD CONSTRAINT "FK_e37f798c5697e8b84094d64a68f" FOREIGN KEY ("followerAddress") REFERENCES "users"("address") ON DELETE NO ACTION ON UPDATE NO ACTION`);
await queryRunner.query(`ALTER TABLE "public"."follows" ADD CONSTRAINT "FK_70456987d622cd40a732aec83bd" FOREIGN KEY ("followeeAddress") REFERENCES "users"("address") ON DELETE NO ACTION ON UPDATE NO ACTION`);
}
这行好像被调用了两次:
await queryRunner.query(`ALTER TABLE "public"."follows" DROP CONSTRAINT "PK_439cf7d31c1f020884802168a8c"`);
【问题讨论】:
标签: sql postgresql primary-key typeorm composite-primary-key