Zoeken op website

sql - mikro-orm-migratie wordt niet weergegeven in postgresql


dit is de User-entiteit:

import { Entity, PrimaryKey, Property } from "@mikro-orm/core";
import { ObjectType, Field } from "type-graphql";

@ObjectType()
@Entity()
export class User {
  @Field()
  @PrimaryKey()
  id!: number;

  @Field(() => String)
  @Property({ type: "date" })
  createdAt = new Date();

  @Field(() => String)
  @Property({ type: "date", onUpdate: () => new Date() })
  updatedAt = new Date();

  @Field()
  @Property({ type: "text", unique: true })
  username!: string;

  @Field()
  @Property({ type: "text", unique: true })
  email!: string;

  @Property({ type: "text" })
  password!: string;
}

dit is het migratiescript:

   "create:migration": "mikro-orm migration:create"

Ik had al een kolom voor gebruikersnaam en wachtwoord, maar toen ik probeerde een "e-mail" kolom toe te voegen, liep de migratie succesvol, maar werd dit niet in de database weergegeven. Dit is het migratieresultaat:

export class Migration20210608151159 extends Migration {

  async up(): Promise<void> {
    this.addSql('alter table "user" add column "email" text not null;');
    this.addSql('alter table "user" add constraint "user_email_unique" unique ("email");');
  }

}

Ik ververs de tabel maar zie de e-mailkolom niet. Wanneer ik een klantverzoek verstuur, krijg ik deze fout:

 error: insert into "user" as "e0" ("created_at", "email", "password", "updated_at", "username") values ($1, $2, $3, $4, $5) returning * - column "email" of relation "user" does not exist

Wanneer ik deze keer npx mikro-orm migration:up uitvoer, krijg ik dit bericht:

"DriverException: alter table "user" add column "email" text not null; - column "email" of relation "user" already exists" 

Op de een of andere manier wordt de database niet aangepast door de migratie

Antwoord #1

Ik heb een manier gevonden om eromheen te komen. We volgen waarschijnlijk dezelfde tutorial van Ben Awad. Wat ik deed was de hele User-tabel uit de Postgres-database verwijderen. Daarna heb ik de volgende opdracht in index.ts uitgecommentarieerd.

//await orm.getMigrator().up()

Later heb ik alle eerdere migraties verwijderd.

daarna typte ik in de terminal :

npx mikro-orm migration:create

dan :

npx mikro-orm migration:validate

om ervoor te zorgen dat de juiste migratie op het punt staat te worden uitgevoerd

en dan:

npx mikro-orm migration:up

Naar mijn mening lijkt het alsof er een probleem is met de migrator en de migratieproblemen. Ik heb de automatische migrator tool orm.getMigrator().up() nog niet gebruikt, maar ik kan het in de toekomst nog eens proberen.

Antwoord #2

Je hebt zojuist de migratie aangemaakt, nu moet je deze uitvoeren via mikro-orm migration:up.

npx mikro-orm migration:create   # Create new migration with current schema diff
npx mikro-orm migration:up       # Migrate up to the latest version
npx mikro-orm migration:down     # Migrate one step down
npx mikro-orm migration:list     # List all executed migrations
npx mikro-orm migration:pending  # List all pending migrations

https://mikro-orm.io/docs/migrations/#using-via-cli