Я пытаюсь создать скрипт, который обнаруживает, что роль уже активируется, и если она это делает, она должна аннулировать все привилегии. Это работает отлично делает это так:Обнаружить роль в Postgresql динамически
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$$;
Но теперь я хочу, чтобы это быть динамичными в среду, так как я буду использовать различные имена ролей за окружающую среду. Так что я пытался использовать \ набор механизм, но это, кажется, не работает при использовании 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, аннулирование statment работает просто отлично. Поэтому мой вопрос: как я могу сделать свой сценарий динамическим, передав ему параметры, чтобы они были заменены?
Ах хорошо .. Thnx !! Я попробую это. Я уже боялся сделать это так. Я нахожу это странным, хотя, поскольку в Oracle можно передавать переменные извне в скрипт plsql без необходимости писать функцию. Я просто хочу эту логику, чтобы я мог развернуть мою базу данных. Почему я должен создать функцию для этого? Разве нет другого способа сделать это, как в Oracle? – Tranquilized
@ user1515731: Я бы ничего не знал. Функция plpgsql, похоже, не сложна, или делает это? –
Нет, это не так, но мне не нравится, что мне нужно создать функцию, чтобы определить, существует ли какая-либо роль, и в основном отбросить ее послесловие, поскольку я не буду использовать ее в своем приложении. Но я попробую это thnx за вашу помощь :-) – Tranquilized