Вопрос по postgresql, schema – Как изменить схему нескольких таблиц PostgreSQL за одну операцию?

20

У меня есть база данных PostgreSQL 9.1 с примерно 100 таблицами, которые были загружены в "public" схемы. Я хотел бы переместить эти таблицы (но не все функции в «public») в «data». схемы.

Я знаю, что могу использовать следующее для перемещения по 1 таблице за раз.

ALTER TABLE [tablename] SET SCHEMA [new_schema]

Можно ли переместить все таблицы в новую схему за одну операцию? Если это так, что будет наиболее эффективным способом решения этой задачи?

Ваш Ответ

1   ответ
42

ДЕЛАТЬ сделает свое дело:

$$
DECLARE
    row record;
BEGIN
    FOR row IN SELECT tablename FROM pg_tables WHERE schemaname = 'public' -- and other conditions, if needed
    LOOP
        EXECUTE 'ALTER TABLE public.' || quote_ident(row.tablename) || ' SET SCHEMA [new_schema];';
    END LOOP;
END;
$$;
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded RyanDalton
Error: User Rate Limit Exceeded RyanDalton
Error: User Rate Limit ExceededDO$$ DECLARE row record; sql text = E'\n'; BEGIN FOR row IN select proname::text as proname, pg_get_function_identity_arguments(p.oid) AS params from pg_proc p JOIN pg_type t on p.prorettype = t.oid JOIN pg_namespace n on n.oid = p.pronamespace LEFT JOIN pg_description d on p.oid = d.objoid WHERE nspname = 'public' LOOP sql = CONCAT(sql, E'\n', 'ALTER FUNCTION public.', row.proname, '(', row.params, ') SET schema [new_schema];'); END LOOP; EXECUTE sql; END;$$;

Похожие вопросы