You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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:23

User postgres was denied access on the database first.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 09:52:42