如何撤销PostgreSQL自定义参数app.foo的更新权限?语法错误求助
解决PostgreSQL中REVOKE SET ON PARAMETER的语法错误问题
要禁止foo_role设置app.foo参数,你遇到的语法错误是因为带点号的配置参数名需要被作为单个标识符处理,必须用双引号括起来。
正确的REVOKE命令
REVOKE SET ON PARAMETER "app.foo" FROM foo_role;
排查额外问题
如果执行上述命令仍有报错,检查以下几点:
- 版本兼容性:
REVOKE SET ON PARAMETER是PostgreSQL 9.6及以上版本的特性,低版本不支持该语法。若无法升级,可通过自定义函数或触发器实现权限限制(比如在设置参数前检查当前角色)。 - 参数有效性:先执行
SHOW app.foo;确认该参数已存在(可通过会话级SET、ALTER SYSTEM或postgresql.conf配置),不存在的参数无法进行权限操作。 - 执行权限:执行REVOKE操作的用户需拥有该参数的
SET权限及GRANT OPTION,或是超级用户/参数所有者。
验证权限生效
切换到foo_role后,尝试执行:
SET app.foo = 'new_value';
若权限收回成功,会返回ERROR: permission denied to set parameter "app.foo"的错误提示。
内容的提问来源于stack exchange,提问作者geckos
相关产品推荐
相关产品推荐

