我添加了postgis_topology扩展,它将拓扑模式添加到我的数据库中。但是,我的root用户没有足够的权限来使用AWS RDS实例中该模式中的函数。拓扑模式使用以下内容创建(如pgAdmin中所示):
CREATE SCHEMA topology
AUTHORIZATION rdsadmin;
当我尝试运行语句SELECT topology.CreateTopology('element_topo', 4326);
时,我收到错误"架构拓扑的权限被拒绝"。当我尝试删除架构并重新开始时,错误是"必须是架构拓扑的所有者"。
我还尝试使用
向root用户授予权限GRANT ALL ON ALL FUNCTIONS IN SCHEMA topology TO my_root_user;
但是这只是给出了#34;架构拓扑的权限被拒绝"。
如何向我的root用户授予此架构的权限?
答案 0 :(得分:1)
我没有找到CREATE EXTENSION postgis_topology;
语句使用rds admin用户创建拓扑模式及其所有函数和表的原因。但是,这会阻止其他用户执行功能。
以下DO语句通过将表和函数的所有者更新为赋予数据库root用户的角色来解决问题。
DO
$BODY$
DECLARE
_sql text;
BEGIN
EXECUTE 'SET search_path = topology,public;';
EXECUTE 'ALTER SCHEMA topology OWNER TO rds_superuser;';
EXECUTE 'ALTER TABLE topology.topology OWNER TO rds_superuser;';
EXECUTE 'ALTER TABLE topology.topology_id_seq OWNER TO rds_superuser;';
EXECUTE 'ALTER SEQUENCE topology.topology_id_seq OWNER TO rds_superuser;';
EXECUTE 'ALTER TABLE topology.layer OWNER TO rds_superuser;';
SELECT INTO _sql
string_agg('ALTER FUNCTION '
|| nsp.nspname || '.'
|| p.proname || '('
|| pg_get_function_identity_arguments(p.oid)
|| ') OWNER TO rds_superuser;', E'\n'
)
FROM pg_catalog.pg_proc p
JOIN pg_catalog.pg_namespace nsp ON p.pronamespace = nsp.oid
WHERE nsp.nspname = 'topology';
EXECUTE _sql;
END
$BODY$;