Node.js通过Prisma连接PostgreSQL时postgres用户访问被拒如何解决?
解决Prisma连接PostgreSQL的权限问题
问题代码
以下是用于通过Prisma操作PostgreSQL的Node.js代码:
const { PrismaClient } = require('@prisma/client'); const prisma = new PrismaClient(); async function create() { await prisma.user.create({ data: { id: 0, email: "smth@smth.com", name: "john" } }) } create() .catch(e => { console.log(e.message); }) .finally(async () => { await prisma.$disconnect() })
报错信息
运行代码后出现权限拒绝错误:
Invalid
prisma.user.create()invocation in
/home/Mindw1n/Studying/NodeJsProjects/first/app.js:6:23User
postgreswas denied access on the databasefirst.public
我的schema.prisma配置
generator client { provider = "prisma-client-js" } datasource db { provider = "postgresql" url = "postgresql://postgres:pass@localhost:5432/first" } model User { id Int @id @default(autoincrement()) email String @unique name String? }
解决步骤
1. 修复PostgreSQL用户权限
登录PostgreSQL命令行工具,执行以下命令为postgres用户授予目标数据库的权限:
-- 登录PostgreSQL psql -U postgres -- 授予first数据库的全部权限 GRANT ALL PRIVILEGES ON DATABASE first TO postgres; -- 授予public schema的全部权限 GRANT ALL PRIVILEGES ON SCHEMA public TO postgres; -- 退出命令行 \q
2. 修正数据库连接字符串
检查schema.prisma中的数据库URL,确保密码是postgres用户的真实密码,而非占位符pass:
url = "postgresql://postgres:你的真实密码@localhost:5432/first"
3. 重新生成Prisma Client
执行命令更新Prisma客户端,确保配置更改生效:
npx prisma generate
4. 移除手动设置的自增ID
由于User模型中id字段已配置为自增(@default(autoincrement())),代码中手动设置id:0会导致冲突,修改create函数中的数据对象:
await prisma.user.create({ data: { // 移除id字段,由数据库自动生成 email: "smth@smth.com", name: "john" } })
内容的提问来源于stack exchange,提问作者MindW1n
相关产品推荐
相关产品推荐

