我一直在尝试创建一个脚本来检测一个角色已经存在,如果它存在,它应该撤销所有特权。这样做很好:
DO $$DECLARE count int;
BEGIN
SELECT count(*) INTO count FROM pg_roles WHERE rolname = 'superman';
IF count > 0 THEN
REVOKE ALL PRIVILEGES ON TABLE FROM superman;
END IF;
END$$;
但是现在我希望每个环境都是动态的,因为我将在每个环境中使用不同的角色名称。所以我尝试使用 \set 机制,但是在使用 pl/sql 时这似乎不起作用,所以如果我会做类似以下的事情 Postgresql 抱怨语法错误:
/set environment _int
DO $$DECLARE count int;
BEGIN
SELECT count(*) INTO count FROM pg_roles WHERE rolname = 'superman';
IF count > 0 THEN
REVOKE ALL PRIVILEGES ON TABLE FROM superman:environment;
END IF;
END$$;
虽然如果我不在 pl/sql 中这样做,撤销语句就可以正常工作。所以我的问题是如何通过将参数传递给它来使我的脚本动态化,以便它们被替换?