CREATE OR REPLACE FUNCTION copy_role_configs(source_role text, target_role text)
RETURNS VOID AS
$$
DECLARE
setconfig_val text;
eq_pos int;
i int = 1;
BEGIN
LOOP
SELECT setconfig[i] INTO setconfig_val
FROM pg_db_role_setting WHERE
setdatabase = 0 AND setrole =
(SELECT oid FROM pg_authid WHERE rolname = source_role);
EXIT WHEN setconfig_val IS NULL;
RAISE NOTICE 'Copying config % from % to %', setconfig_val, source_role,
target_role;
SELECT strpos(setconfig_val, '=') INTO eq_pos;
EXECUTE 'ALTER ROLE ' || target_role || ' SET ' ||
substr(setconfig_val, 0, eq_pos + 1) || '''' ||
substr(setconfig_val, eq_pos + 1) || '''' ;
i := i + 1;
END LOOP;
RETURN;
END;
$$ LANGUAGE plpgsql strict;
-- Now call SELECT copy_role_configs('role1', 'role2') to copy configuration
-- parameters from role1 to role2.
好吧,如果您有一个名为“super1”的现有超级用户角色,您可以这样做:
而且,至少在理论上,super1 的任何特权都将转移给 super2。但是,我不确定您的问题是否有意义,因为通常允许超级用户覆盖任何权限检查。正如文档所解释的:
我很想知道您现有的超级用户角色拥有哪些特权,这些特权不会自动授予您默认创建的任何新超级用户角色。
编辑:如果您有兴趣复制每个角色的配置参数(即配置参数下记录的那些),那么您可以使用这样的功能(仅限演示,您可能需要额外的错误处理、安全考虑等。用于生产):