Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 将模型迁移到数据库Prisma时出错_Postgresql_Heroku_Prisma - Fatal编程技术网

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

Postgresql 将模型迁移到数据库Prisma时出错,postgresql,heroku,prisma,Postgresql,Heroku,Prisma,我正在开始一个项目,在那里我必须学习一种新技术,我选择用Prisma和Next.js构建一个完整的堆栈应用程序。我第一次用这两种方法。我已经构建了带有React.js的前端应用程序,并对使用Next充满信心。然而,我很难与普里斯玛开始接触。 我正在按照Prisma的“从头开始”说明进行操作,但我仍停留在步骤“要将数据模型映射到数据库架构,您需要使用Prisma migrate CLI命令:”,然后我运行以下命令: npx prisma migrate dev--name init--预览功能 我

我正在开始一个项目,在那里我必须学习一种新技术,我选择用Prisma和Next.js构建一个完整的堆栈应用程序。我第一次用这两种方法。我已经构建了带有React.js的前端应用程序,并对使用Next充满信心。然而,我很难与普里斯玛开始接触。 我正在按照Prisma的“从头开始”说明进行操作,但我仍停留在步骤“要将数据模型映射到数据库架构,您需要使用Prisma migrate CLI命令:”,然后我运行以下命令:
npx prisma migrate dev--name init--预览功能
我得到一个错误:


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
我的数据库是postgresQL,它托管在heroku上。我的数据库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"
  }
}
我试着反省一下。但是,我的数据库当前没有表,这引发了一个错误。我尝试了我在youtube上看到的一个构建的npx prisma migrate save-实验版。我尝试了npm install@prisma/cli——保存devb/c,它可以解决stackoverflow上发布的相同问题。
另一个解决方案是使用Docker。我还没有尝试过。

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

根据您的要求,您还可以运行
prisma db push
而不是
prisma migrate dev
命令,只需运行:

npx prisma db push --preview-feature

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

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

谢谢你发布这个答案!我敢肯定它起作用了。我说非常肯定,因为我在heroku DB上没有看到表/模型。但是,我确实在那里看到了迁移!这是朝着正确方向迈出的一步