ページの先頭行へ戻る
Enterprise Postgres 14 SP1 スケールアウト運用ガイド
FUJITSU Software

5.1.1 シャードとシャード表の作成

シャードはCREATE SHARD文で作成します。CREATE TABLESPACE文でシャードと紐付けたテーブル空間を作成し、そのテーブル空間上に子テーブルを作成することでデータを複数ノードに分散します。以下にシャード表の作成例を示します。

-- 1) シャードの作成
CREATE SHARD shard1 ON node1;
CREATE SHARD shard2 ON node2;

-- 2) テーブル空間の作成
CREATE TABLESPACE tbs_shard1 LOCATION '/path/to/tablespace/in/node1' IN shard1;
CREATE TABLESPACE tbs_shard2 LOCATION '/path/to/tablespace/in/node2' IN shard2;

-- 3) 親テーブルの作成
SET pgx_ddl_target_node = 'ALLNODES';
CREATE TABLE bank_a (c1 INT, c2 VARCHAR) PARTITION BY RANGE(c1);
CREATE TABLE bank_b (c1 INT, c2 VARCHAR) PARTITION BY RANGE(c1);
RESET pgx_ddl_target_node;

-- 4) 子テーブルの作成
CREATE TABLE bank_a_1 PARTITION OF bank_a FOR VALUES FROM(1) TO(100) TABLESPACE tbs_shard1;
CREATE TABLE bank_b_1 PARTITION OF bank_b FOR VALUES FROM(1) TO(100) TABLESPACE tbs_shard1;
CREATE TABLE bank_a_2 PARTITION OF bank_a FOR VALUES FROM(100) TO(200) TABLESPACE tbs_shard2;
CREATE TABLE bank_b_2 PARTITION OF bank_b FOR VALUES FROM(100) TO(200) TABLESPACE tbs_shard2;
-- shard1にはc1が1から99の範囲にあるパーティション bank_a_1とbank_b_1が作成される
-- shard2にはc1が100から199の範囲にあるパーティション bank_a_2とbank_b_2が作成される

デフォルトのテーブル空間を使用する場合、CREATE SHARD文を実行するとデフォルトのテーブル空間を指すデータノード名と同じエイリアスが作成されるので、そのエイリアスを子テーブルを作成するときのテーブル空間として指定してください。

子テーブルを作成するときは、親テーブルをデータノードに配置する必要があるため、pgx_ddl_target_nodesに'ALLNODES'を指定してから親テーブルを作成してください。

また、上記で作成したシャードに新しく作成したパーティションではない通常のテーブルを追加したい場合、テーブル空間を指定することで、シャードに含めることができます。

注意

作成したシャード表やテーブル空間をデータノードで削除しないでください。中央管理ノードで関連データが残り、完全に削除できなくなるためです。

誤ってデータノードで削除した場合は以下を実施してください。

  • シャード表

    CREATE TABLEで同じ名前のテーブルを再作成し、中央管理ノードでDROP TABLEを実施してください。

  • テーブル空間

    CREATE TABLESPACEで同じ名前のテーブル空間を再作成し、中央管理ノードでDROP TABLESPACEを実施してください。