Hologres では、スキーマを跨いでテーブルを作成できます。このトピックでは、Hologres データベースでスキーマを作成する方法と、スキーマを跨いでテーブルを作成する方法について説明します。
背景情報
Hologres は PostgreSQL と互換性があり、PostgreSQL と同じスキーマ関連操作をサポートしています。
Hologres でスキーマ機能が有効になると、テーブルのストレージ構造は database.table
から database.schema.table
に変更されます。
Hologres の現在のバージョンでは、スキーマの作成、スキーマの名前変更、およびスキーマへのテーブルの作成が可能です。
Hologres では、各テーブルは 1 つのスキーマに属し、データベースには複数のスキーマを含めることができます。スキーマは、テーブルの論理グループとして機能し、管理を容易にします。また、スキーマを使用すると、複数のユーザーが互いに干渉することなく同じデータベースを使用できます。
同じテーブル名またはデータ型を異なるスキーマで使用しても競合は発生しません。
Hologres は、新しいデータベースごとに [public] という名前のスキーマを自動的に作成します。スキーマを作成しない場合、データベースに作成されたすべてのテーブルは [public] スキーマに格納されます。現在のスキーマを確認するには、次のいずれかのステートメントを実行します:
SELECT CURRENT_SCHEMA(); -- 現在のスキーマを確認します。
\d tablename; -- 目的のテーブルが属するスキーマを確認します。このステートメントは、ターミナルにのみ適用されます。
次の図は、Hologres インスタンスオブジェクトの階層関係を示しています。
手順
スキーマを作成します。
データベースにスキーマを作成し、そのスキーマにテーブルを作成するには、次の SQL ステートメントの例を実行します。
CREATE SCHEMA schemaname; -- スキーマを作成します。 SET search_path TO schemaname; -- 新しいスキーマに切り替えます。 CREATE TABLE blink_demo (id text); -- 新しいスキーマにテーブルを作成します。 SELECT CURRENT_SCHEMA(); -- 現在のスキーマを確認します。
スキーマを跨いでテーブルを作成します。
スキーマを跨いでテーブルを作成するには、テーブル作成ステートメントでテーブル名を
Schema name.Table name
の形式で指定します。ステートメントの例:現在のスキーマに基づいて [public] スキーマにテーブルを作成します。
CREATE TABLE public.mytest ( name text, id INT);
[public] スキーマに切り替え、my_schema スキーマにテーブルを作成します。
SET search_path TO public; CREATE TABLE my_schema.mytest ( name text, id INT, age INT );
その他のサポートされている操作
次の SQL ステートメントを実行して、スキーマ内のすべてのテーブルの合計ストレージサイズをクエリできます。
SELECT table_schema, pg_size_pretty(SUM(pg_relation_size(quote_ident(table_schema) || '.' || quote_ident(table_name))::decimal)) AS schema_size
FROM information_schema.tables
WHERE table_schema = '<schema_name>'-- <schema_name> を指定したスキーマの名前に置き換えます。
GROUP BY table_schema;