将模型迁移到数据库 Prisma 时出错

Ben*_*ham 4 postgresql heroku prisma

我正在开始一个项目,我必须学习一项新技术,我选择使用 Prisma 和 Next.js 构建一个全栈应用程序。我是第一次使用两者。我已经使用 React.js 构建了前端应用程序,并且对使用 Next 充满信心。但是,我很难开始使用 Prisma。我正在按照 Prisma 的“从头开始”说明进行操作,并且卡在了“要将您的数据模型映射到数据库模式,您需要使用 Prisma migrate CLI 命令:”的步骤,然后我运行命令: npx prisma migrate dev --name init --preview-feature 我得到了错误:


P3014
Prisma Migrate could not create the shadow database. Please make sure the database user has permission to create databases.  More info: https://pris.ly/d/migrate-shadow. Original error: 
Database error: Error querying the database: db error: ERROR: permission denied to create database
Run Code Online (Sandbox Code Playgroud)

我的数据库是 postgresQL,它托管在 heroku 上。我的 DATABASE_URL 是从 heroku 上的配置复制/粘贴的。

这是我的 .json 依赖项:

  "name": "photo_album",
  "version": "0.1.0",
  "private": true,
  "scripts": {
    "prisma": "prisma",
    "dev": "next dev",
    "build": "next build",
    "start": "next start"
  },
  "dependencies": {
    "@prisma/client": "^2.13.1",
    "next": "10.0.3",
    "react": "17.0.1",
    "react-dom": "17.0.1"
  },
  "devDependencies": {
    "@prisma/cli": "^2.13.1"
  }
}
Run Code Online (Sandbox Code Playgroud)

我试过自省。但是,我的数据库目前没有表,这引发了错误。我尝试了npxprisma migrate save -experimental b/c 我在 youtube 上看到的一个构建。我尝试了npm install @prisma/cli --save-dev b/c ,它适用于在 stackoverflow 上发布的相同问题。另一个解决方案是使用 Docker。我还没有尝试过。

小智 17

我可以通过在 Heroku 中创建另一个数据库作为我的影子数据库来解决这个问题。然后在 schema.prisma 中添加以下代码:

datasource db {
  provider          = "postgresql"
  url               = env("DATABASE_URL")
  shadowDatabaseUrl = env("SHADOW_DATABASE_URL")
}
Run Code Online (Sandbox Code Playgroud)


Rya*_*yan 7

是的,目前这是因为 Prisma 需要创建应用迁移的临时数据库的权限,而 Heroku 托管数据库不提供该权限。您可以做的一件事是在本地安装 Postgres 并将其用于开发,另一个选择是从与您面临相同问题的线程中遵循此解决方法。

  • 显然这在 2023 年仍然是一个问题。不使用 Heroku,而是使用 cockroachlabs db。 (2认同)

小智 6

根据nikolasburk,您也可以运行prisma db push而不是prisma migrate dev命令,只需运行:

npx prisma db push --preview-feature
Run Code Online (Sandbox Code Playgroud)