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

如何在pgAdmin4中禁用删改查询并创建带pg_read_all_data角色的用户?

一、解决禁用DELETE/UPDATE时的"relation 'site' does not exist"错误

你遇到的错误是因为参考方案中用到了名为site的特定表,但你的数据库里没有这个表。以下是通用的禁用所有DELETE和UPDATE操作的方法:

方法1:通过权限控制(推荐)

直接撤销用户的DELETE和UPDATE权限,同时阻止后续新增表自动获得这些权限:

  • 撤销已有表的权限:
    REVOKE DELETE, UPDATE ON ALL TABLES IN SCHEMA public FROM [你的用户名];
  • 设置默认权限(新增表自动继承):
    ALTER DEFAULT PRIVILEGES IN SCHEMA public REVOKE DELETE, UPDATE ON TABLES FROM [你的用户名];

方法2:通过触发器全局阻止

创建一个通用触发器函数,然后绑定到所有表上:

  1. 创建阻止函数:
CREATE OR REPLACE FUNCTION block_delete_update()
RETURNS TRIGGER AS $$
BEGIN
  RAISE EXCEPTION 'DELETE和UPDATE操作已被禁用';
END;
$$ LANGUAGE plpgsql;
  1. 批量给所有表绑定触发器:
DO $$
DECLARE
  rec RECORD;
BEGIN
  FOR rec IN SELECT tablename FROM pg_tables WHERE schemaname = 'public' LOOP
    EXECUTE format('CREATE TRIGGER block_%s_del_upd BEFORE DELETE OR UPDATE ON %s FOR EACH STATEMENT EXECUTE FUNCTION block_delete_update();', rec.tablename, rec.tablename);
  END LOOP;
END $$;
二、在pgAdmin4中创建用户并分配pg_read_all_data角色

图形化操作步骤:

  1. 打开pgAdmin4,连接到目标PostgreSQL服务器。
  2. 展开服务器节点下的「登录/组角色」,右键选择「创建」>「登录/组角色」。
  3. 在「常规」标签页:输入用户名,设置登录密码。
  4. 切换到「权限」标签页:找到「角色成员」区域,点击「添加」按钮。
  5. 在弹出的选择窗口中,找到pg_read_all_data角色并选中,点击「选择」。
  6. 切换到「SQL」标签页可预览生成的语句,确认无误后点击「保存」完成创建。

快捷SQL命令方式:

如果更习惯用SQL,直接执行以下语句:

CREATE USER [新用户名] WITH PASSWORD '[用户密码]';
GRANT pg_read_all_data TO [新用户名];

内容的提问来源于stack exchange,提问作者khteh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 06:05:03