web-dev-qa-db-ja.com

1回の操作で複数のPostgreSQLテーブルのスキーマを変更するにはどうすればよいですか?

'public'スキーマにロードされた100個ほどのテーブルを持つPostgreSQL9.1データベースがあります。これらのテーブル(「public」のすべての関数ではありません)を「data」スキーマに移動したいと思います。

以下を使用して、一度に1つのテーブルを移動できることを知っています。

ALTER TABLE [tablename] SET SCHEMA [new_schema]

1回の操作ですべてのテーブルを新しいスキーマに移動することは可能ですか?もしそうなら、このタスクを達成するための最も効率的な方法は何でしょうか?

25
RyanKDalton

[〜#〜] do [〜#〜] トリックを実行します:

DO
$$
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;
$$;
50
Frank Heikens