RDS Postgres изменяет значение SQL log_statement

Мы используем Postgres 9.5 на RDS, и у нас есть вариант использования, чтобы отключить ведение журнала SQL при выполнении массовых вставок. SQL-оператор массовой вставки имеет большой размер, и от его регистрации не так много пользы, поскольку мы знаем, что это займет больше времени, чем наш набор log_min_duration.

Как упоминалось в этом сообщении, я попытался выполнить set_config через клиент psql. К сожалению, мне отказывают в разрешении. Пользователь, вошедший в систему через 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


person sumit    schedule 01.09.2017    source источник
comment
И rds_superuser дает вам права локального суперпользователя (проверьте, например, show is_superuser;)? Поскольку Изменить могут только суперпользователи этот параметр?   -  person dhke    schedule 01.09.2017
comment
спасибо @dhke, это была проблема - rds_superuser не предоставляет is_superuser. не знал об этой части.   -  person sumit    schedule 01.09.2017


Ответы (1)


RDS использует модель разрешений, отличную от ванильного Postgres, поэтому роль rds_superuser на самом деле не имеет всех разрешений, которые были бы у «настоящего» суперпользователя. По сути, RDS — это «управляемое» решение для размещения баз данных, и полный доступ даст вам возможности, которые сломают или скомпрометируют это управление. Вместо этого этой роли предоставляется список конкретных разрешений. .

Для большей части конфигурации вы должны использовать то, что Amazon называет «Группы параметров», которые управляются через консоль AWS или API.

Существует специальная страница для регистрации в Postgres RDS который дает несколько примеров использования групп параметров для установки опции log_statement.

Это означает, что вы не можете динамически изменять параметр в подключении к базе данных, например. в функции pl/pgsql, но вы можете изменить ее как часть пакетного задания, используя API AWS или официальный CLI-клиент.

person IMSoP    schedule 01.09.2017
comment
Спасибо. собирается принять этот ответ, поскольку он дает ответ на часть разрешений, а также может ли приложение изменить конфигурацию log_statement в RDS или нет - person sumit; 01.09.2017