GRANT 权限或在一个查询中将 OWNER 设置为所有 pgsql 项,而不创建函数。
- 意见
- 功能
- 表
- 序列
因为我花了很多时间试图找到这样的解决方案。我只是发现几个单独的查询或函数,但没有 sql 可以一次完成整个工作。
也许这对某人有帮助。
- 填写
WHERE s IN(?)
您需要的方案。 创建要对
LOOP
块中的所有对象执行的查询,类似于:EXECUTE 'ALTER ' || tbl.o || ' ' || tbl.sn || ' OWNER TO admin';
或者EXECUTE 'GRANT ALL ON ' || tbl.o || ' ' || tbl.sn || ' TO admin';
SQL查询:
DO $$DECLARE tbl record;
BEGIN
FOR tbl IN
SELECT o, s || '.' || n sn
FROM (
SELECT 'FUNCTION' o, nspname s, proname || '(' || pg_catalog.pg_get_function_identity_arguments(p.oid) || ')' n
FROM pg_catalog.pg_namespace n
JOIN pg_catalog.pg_proc p ON pronamespace = n.oid
UNION
SELECT 'TABLE' o, nspname s, relname n
FROM pg_class c
JOIN pg_namespace n ON (c.relnamespace = n.oid)
WHERE nspname NOT LIKE E'pg\\_%' AND
nspname <> 'information_schema' AND
relkind IN ('r','S','v')
) tbl
WHERE s IN('public')
LOOP
EXECUTE 'ALTER ' || tbl.o || ' ' || tbl.sn || ' OWNER TO admin';
-- EXECUTE 'GRANT ALL ON ' || tbl.o || ' ' || tbl.sn || ' TO admin';
END LOOP;
END$$;