首页 > 解决方案 > 使用匿名函数更改 work_mem 失败

问题描述

show is_superuser

结果为 ON。这意味着现在我的用户/角色是管理员并且是超级用户。根据随附的教程执行以下代码:

Do $_$
Declare r record;
BEGIN
    FOR r in select u.rolname
        from pg_authid U
    join pg_auth_members m on m.member = u.OID
    join pg_authid g on g.oid = m.roleid
    where g.rolname = 'admin'
loop
    execute $$ alter role $$ || r.rolename || $$ set work_mem = '128MB' $$;
end loop;
end $_$;

然后执行以下代码:

select u.rolname, s.setconfig as setting
from pg_db_role_setting s
    join pg_authid u on u.oid = s.setrole
    join pg_auth_members m on m.member = u.oid
    join pg_authid g on g.oid = m.roleid
where g.rolname = 'admin';

我的结果显示零行,然后我尝试使用show work_mem,结果仍然是 4MB。这样,我相信它显示了 128MB,根据这两张幻灯片。幻灯片链接:http: //joeconway.com/presentations/fun_with_functions-PGConf.US-2015.pdf 教程

标签: postgresqldatabase-administration

解决方案


该角色admin是一个自定义角色,因此您必须先创建它并向其添加用户。

create role admin;
grant admin to myUserName;

此角色与您是超级用户这一事实无关。


推荐阅读