2017-09-01 54 views
2

我们在RDS上使用Postgres 9.5,并有一个用例来在运行批量插入时关闭SQL日志记录。批量插入SQL语句很大,记录日志的好处不大,因为我们知道它需要比我们设置的log_min_duration更多的时间。RDS Postgres更改SQL log_statement值

正如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 

为什么我们得到许可被拒绝任何想法,其次做乡亲们知道,如果它能够在运行时更改此设置的Postgres上RDS

+0

而'rds_superuser'为您提供本地超级用户权限(请查看例如'show is_superuser;')?因为[“*仅超级用户可以更改此设置*”](https://www.postgresql.org/docs/9.5/static/runtime-config-logging.html#GUC-LOG-STATEMENT)? – dhke

+0

感谢@dhke,那是问题 - rds_superuser不会授予is_superuser。不知道这部分。 – sumit

回答

3

RDS使用不同的权限模型,以香草Postgres的,所以rds_superuser角色实际上并不具有“真正”超级用户拥有的所有权限。实际上,RDS是一种“托管”数据库托管解决方案,完全访问会给您带来破坏或危害该管理的能力。相反,该角色被授予a list of specific permissions

对于大多数配置,您必须使用Amazon调用的“Parameter Groups”,它们通过AWS控制台或API进行管理。

logging in Postgres RDS上有一个特定的页面,它给出了使用参数组设置log_statement选项的一些示例。

这意味着您不能在数据库连接中动态更改设置,例如在pl/pgsql函数中,但可以使用the AWS APIofficial CLI client将其更改为批处理作业的一部分。

+0

谢谢。去接受这个答案,因为它提供了权限部分的答案,以及应用程序是否可以更改RDS上的log_statement配置 – sumit