Использование pg_dump без информации о владельце при выводе информации о роли - PullRequest
0 голосов
/ 09 марта 2020

Я сбросил базу данных, используя pg_dump -O -x, ожидая, что вся информация о владельце и роли будет проигнорирована, однако он все еще включает в себя заданные c упоминания о ролях менеджера в исходной базе данных, которые не могут быть импортированы, потому что они не импортируют существует в новой базе данных, в которую я импортирую. См. Фрагмент файла дампа. sql:

--
-- Name: reassign_owned(); Type: FUNCTION; Schema: public; Owner: -
--

CREATE FUNCTION reassign_owned() RETURNS event_trigger
    LANGUAGE plpgsql
    AS $$
        begin
                -- do not execute if member of rds_superuser
                IF EXISTS (select 1 from pg_catalog.pg_roles where rolname = 'rds_superuser')
                AND pg_has_role(current_user, 'rds_superuser', 'member') THEN
                        RETURN;
                END IF;

                -- do not execute if not member of manager role
                IF NOT pg_has_role(current_user, 'rdsbroker_xxxxx_manager', 'member') THEN
                        RETURN;
                END IF;

                -- do not execute if superuser
                IF EXISTS (SELECT 1 FROM pg_user WHERE usename = current_user and usesuper = true) THEN
                        RETURN;
                END IF;

                EXECUTE 'reassign owned by "' || current_user || '" to "rdsbroker_xxxxx_manager"';
        end
        $$;

Ответы [ 2 ]

2 голосов
/ 10 марта 2020

-O означает, что сам pg_dump не передает информацию о владельце. Он не заставляет его редактировать исходный код каких-либо функций, которые он может выгружать, пытаясь помешать этим функциям делать то, для чего они были написаны.

0 голосов
/ 09 марта 2020

Я сделал быстрый поиск в исходном коде pg_dump и pg_restore и не вижу использования оператора REASSIGN OWNED.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...