sql - η μετανάστευση του mikro-orm δεν αντικατοπτρίζεται στο postgresql


αυτό είναι ο οντότητα Χρήστη:

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;
}

αυτό είναι το σενάριο μετανάστευσης:

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

Ήδη είχα στήλες για όνομα χρήστη και κωδικό πρόσβασης, αλλά όταν προσπάθησα να προσθέσω τη στήλη "email", η μετανάστευση εκτελέστηκε με επιτυχία αλλά δεν εμφανίστηκε στη βάση δεδομένων. Αυτό είναι το αποτέλεσμα της μετανάστευσης:

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");');
  }

}

Ανανεώνω τον πίνακα αλλά δεν βλέπω την στήλη email. Όταν στέλνω αίτημα στον πελάτη, παίρνω αυτό το σφάλμα:

 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

Όταν τρέχω npx mikro-orm migration:up αυτή τη φορά λαμβάνω αυτό το μήνυμα:

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

κάπως η μετανάστευση δεν τροποποιεί τη βάση δεδομένων

Απάντηση #1

Βρήκα έναν τρόπο να το παρακάμψω. Πιθανώς ακολουθούμε το ίδιο σεμινάριο του Ben Awad. Αυτό που έκανα ήταν να διαγράψω ολόκληρο τον πίνακα User από τη βάση δεδομένων Postgres. Στη συνέχεια σχολίασα την ακόλουθη εντολή από το index.ts.

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

Αργότερα διέγραψα όλες τις προηγούμενες μετακινήσεις.

τότε πληκτρολόγησα στο τερματικό :

npx mikro-orm migration:create

τότε :

npx mikro-orm migration:validate

ώστε να βεβαιωθούμε ότι η σωστή μετανάστευση πρόκειται να υλοποιηθεί

και στη συνέχεια:

npx mikro-orm migration:up

Κατά την γνώμη μου, φαίνεται ότι υπάρχει ένα πρόβλημα με τον μεταφορέα και τα ζητήματα μετανάστευσης. Ακόμα δεν έχω χρησιμοποιήσει το εργαλείο αυτόματης μετανάστευσης orm.getMigrator().up(), αλλά μπορεί να το δοκιμάσω ξανά στο μέλλον.

Απάντηση #2

Μόλις δημιουργήσατε τη μετανάστευση, τώρα πρέπει να την εκτελέσετε μέσω 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