シャードは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を実施してください。