我们在RDS上使用Postgres 9.5并且有一个用例在运行批量插入时关闭SQL日志记录。批量插入SQL语句很大,并没有很多记录它的好处,因为我们知道它将比我们设置的log_min_duration花费更多的时间。
如this post中所述,我尝试通过psql客户端进行set_config。不幸的是,我被拒绝了。通过psql登录的用户是rds_superuser的成员。
SELECT current_setting('log_statement');
┌─────────────────┐
│ current_setting │
├─────────────────┤
│ mod │
└─────────────────┘
(1 row)
SELECT set_config('log_statement', 'mod', false);
ERROR: 42501: permission denied to set parameter "log_statement"
LOCATION: set_config_option, guc.c:5804
关于我们为何获得许可被拒绝的任何想法,其次有人知道是否可以在运行时在RDS上的postgres中更改此设置
答案 0 :(得分:4)
RDS对vanilla Postgres使用不同的权限模型,因此rds_superuser
角色实际上并没有“真正的”超级用户拥有的所有权限。实际上,RDS是一种“托管”数据库托管解决方案,完全访问权限会为您提供破坏或破坏管理的能力。相反,此角色被授予a list of specific permissions。
对于大多数配置,您必须使用Amazon通过AWS控制台或API管理的“Parameter Groups”。
logging in Postgres RDS上有一个特定页面,其中提供了使用参数组设置log_statement
选项的一些示例。
这意味着您无法在数据库连接中动态更改设置,例如在pl/pgsql
函数中,您可以使用the AWS API或official CLI client将其更改为批处理作业的一部分。