使用 prisma 迁移到 sql 失败

问题描述 投票:0回答:1

当我在本地数据库和本地主机中使用时,迁移工作成功。 但是当我部署服务器数据库时。迁移失败

// This is your Prisma schema file,
// learn more about it in the docs: https://pris.ly/d/prisma-schema

// Looking for ways to speed up your queries, or scale easily with your serverless or edge functions?
// Try Prisma Accelerate: https://pris.ly/cli/accelerate-init

generator client {
  provider = "prisma-client-js"
}

datasource db {
  provider = "mysql"
  url      = env("DATABASE_URL")
 // shadowDatabaseUrl = env("SHADOW_DATABASE_URL")
 
}

enum Role {
  ADMIN
  COACH
  CLEINT
}

model User {
  id                  Int                  @id @default(autoincrement())
  email               String
  profile             Profile?
  role                Role                 @default(CLEINT)
  createdAt           DateTime             @default(now())
  updatedAt           DateTime             @updatedAt
  underCoach          Int?
  coach               User?                @relation("CoachToUser", fields: [underCoach], references: [id])
  clients             User[]               @relation("CoachToUser")
  connectRequestsFrom ConnectRequest[]     @relation("ConnectRequestFrom")
  connectRequestsTo   ConnectRequest[]     @relation("ConnectRequestTo")
  meal                Meal[]
  MealAssignment      MealAssignment[]
  // setByUser           MealTime[]       @relation("setBy")
  // setToUser           MealTime[]       @relation("setTo")
  WorkoutsAssignment  WorkoutsAssignment[]
  Workouts            Workouts[]
}

model Profile {
  id          Int      @id @default(autoincrement())
  name        String
  dob         String
  gender      Gender   @default(MALE)
  height      Int?
  weight      Int?
  sugar       Int?
  createdAt   DateTime @default(now())
  updatedAt   DateTime @updatedAt
  userId      Int      @unique
  user        User     @relation(fields: [userId], references: [id])
  coachTypeId Int?
  coach       Coach?   @relation(fields: [coachTypeId], references: [id])
}

enum Gender {
  MALE
  FEMALE
  TRANSGENDER
}

model Coach {
  id        Int       @id @default(autoincrement())
  coachName String    @unique
  createdAt DateTime  @default(now())
  updatedAt DateTime  @updatedAt
  profile   Profile[]
}

model ConnectRequest {
  id        Int           @id @default(autoincrement())
  fromId    Int
  toId      Int
  status    RequestStatus @default(PENDING)
  from      User          @relation("ConnectRequestFrom", fields: [fromId], references: [id])
  to        User          @relation("ConnectRequestTo", fields: [toId], references: [id])
  createdAt DateTime      @default(now())
  updatedAt DateTime      @updatedAt
}

enum RequestStatus {
  PENDING
  ACCEPTED
  REJECTED
}

model Meal {
  id             Int              @id @unique @default(autoincrement())
  name           String
  protiens       Int
  fats           Int
  carbs          Int
  mealType       MealType
  // mealPlan  MealPlan[] @relation("meals")
  createdAt      DateTime         @default(now())
  updatedAt      DateTime         @updatedAt
  userId         Int
  user           User?            @relation(fields: [userId], references: [id])
  MealAssignment MealAssignment[]
}

model MealAssignment {
  id        Int      @id
  userId    Int // Adding userId directly instead of using @relation
  mealId    Int // Adding mealId directly instead of using @relation
  user      User     @relation(fields: [userId], references: [id])
  meal      Meal     @relation(fields: [mealId], references: [id])
  day       Int // Day number for which the meal is assigned
  createdAt DateTime @default(now())
  updatedAt DateTime @updatedAt
}

enum MealType {
  BREAKFAST
  LUNCH
  DINNER
  SNACK
}

model MealTime {
  id        Int      @id @unique @default(autoincrement())
  setBy     Int
  setTo     Int
  whichMeal MealType
  time      String
  createdAt DateTime @default(now())
  updatedAt DateTime @updatedAt
}

model WorkoutsAssignment {
  id              Int      @id @unique @default(autoincrement())
  assigneddUserId Int
  workoutId       Int
  user            User     @relation(fields: [assigneddUserId], references: [id])
  workout         Workouts @relation(fields: [workoutId], references: [id])
  day             Int
  completed       Boolean  @default(false)
  createdAt       DateTime @default(now())
  updatedAt       DateTime @updatedAt
}

model Workouts {
  id                 Int                  @id @unique @default(autoincrement())
  name               String
  vcLink             String?
  createdUserId      Int
  user               User                 @relation(fields: [createdUserId], references: [id])
  createdAt          DateTime             @default(now())
  updatedAt          DateTime             @updatedAt
  WorkoutsAssignment WorkoutsAssignment[]
}

我运行

npx prisma migrate dev

的cmd

错误显示了这一点

Environment variables loaded from .env
Prisma schema loaded from prisma/schema.prisma
Datasource "db": MySQL database "dev-fitish-v2" at "***n.com:25060"

Error: P3014

Prisma Migrate could not create the shadow database. Please make sure the database user has permission to create databases. Read more about the shadow database (and workarounds) at https://pris.ly/d/migrate-shadow

Original error: Error code: P1010

User `fitish` was denied access on the database `dev-fitish-v2`

如果我运行

npx prisma db push 

的cmd

错误显示如下..

Environment variables loaded from .env
Prisma schema loaded from prisma/schema.prisma
Datasource "db": MySQL database "dev-fitish-v2" at "***n.com:25060"
Error: REFERENCES command denied to user 'fitish'@'*.*.*.*' for table 'dev-fitish-v2.User'
   0: sql_schema_connector::apply_migration::migration_step
           with step=AddForeignKey { foreign_key_id: ForeignKeyId(0) }
             at schema-engine/connectors/sql-schema-connector/src/apply_migration.rs:21
   1: sql_schema_connector::apply_migration::apply_migration
             at schema-engine/connectors/sql-schema-connector/src/apply_migration.rs:10
   2: schema_core::state::SchemaPush
             at schema-engine/core/src/state.rs:433

如何解决这个问题......

我想成功迁移我的服务器数据库中的架构模型

node.js typescript backend prisma
1个回答
0
投票

据我了解,Prisma 需要两个数据库才能运行:原始数据库和影子数据库。我认为 Primas 使用影子数据拳头进行更改,如果一切正常,它会复制原始数据中的更改。 由于我不想赋予 Prisma 无限制的权限,因此我手动创建了两个单独的数据库并按如下方式配置它(schema.prisma):

generator client {
  provider = "prisma-client-js"
}

datasource db {
  provider          = "mysql"
  url               = env("DATABASE_URL")
  shadowDatabaseUrl = env("SHADOW_DATABASE_URL")
}
© www.soinside.com 2019 - 2024. All rights reserved.