mirror of https://github.com/citusdata/citus.git
Create partitions before copying data
parent
8cb505d6e1
commit
63efc140de
|
@ -849,6 +849,14 @@ CopyShardTables(List *shardIntervalList, char *sourceNodeName, int32 sourceNodeP
|
||||||
|
|
||||||
List *ddlCommandList = CopyShardCommandList(shardInterval, sourceNodeName,
|
List *ddlCommandList = CopyShardCommandList(shardInterval, sourceNodeName,
|
||||||
sourceNodePort, includeDataCopy);
|
sourceNodePort, includeDataCopy);
|
||||||
|
|
||||||
|
if (PartitionTable(shardInterval->relationId))
|
||||||
|
{
|
||||||
|
char *attachPartitionCommand =
|
||||||
|
GenerateAttachShardPartitionCommand(shardInterval);
|
||||||
|
|
||||||
|
ddlCommandList = lappend(ddlCommandList, attachPartitionCommand);
|
||||||
|
}
|
||||||
char *tableOwner = TableOwner(shardInterval->relationId);
|
char *tableOwner = TableOwner(shardInterval->relationId);
|
||||||
|
|
||||||
SendCommandListToWorkerInSingleTransaction(targetNodeName, targetNodePort,
|
SendCommandListToWorkerInSingleTransaction(targetNodeName, targetNodePort,
|
||||||
|
@ -878,14 +886,6 @@ CopyShardTables(List *shardIntervalList, char *sourceNodeName, int32 sourceNodeP
|
||||||
List *commandList = list_concat(shardForeignConstraintCommandList,
|
List *commandList = list_concat(shardForeignConstraintCommandList,
|
||||||
referenceTableForeignConstraintList);
|
referenceTableForeignConstraintList);
|
||||||
|
|
||||||
if (PartitionTable(shardInterval->relationId))
|
|
||||||
{
|
|
||||||
char *attachPartitionCommand =
|
|
||||||
GenerateAttachShardPartitionCommand(shardInterval);
|
|
||||||
|
|
||||||
commandList = lappend(commandList, attachPartitionCommand);
|
|
||||||
}
|
|
||||||
|
|
||||||
SendCommandListToWorkerInSingleTransaction(targetNodeName, targetNodePort,
|
SendCommandListToWorkerInSingleTransaction(targetNodeName, targetNodePort,
|
||||||
tableOwner, commandList);
|
tableOwner, commandList);
|
||||||
MemoryContextReset(localContext);
|
MemoryContextReset(localContext);
|
||||||
|
|
|
@ -0,0 +1,46 @@
|
||||||
|
CREATE SCHEMA shard_move_fkeys_indexes;
|
||||||
|
SET search_path TO shard_move_fkeys_indexes;
|
||||||
|
SET citus.next_shard_id TO 8970000;
|
||||||
|
SET citus.next_placement_id TO 8770000;
|
||||||
|
SET citus.shard_count TO 4;
|
||||||
|
SET citus.shard_replication_factor TO 1;
|
||||||
|
CREATE TABLE sensors(
|
||||||
|
measureid integer,
|
||||||
|
eventdatetime date,
|
||||||
|
measure_data jsonb,
|
||||||
|
PRIMARY KEY (measureid, eventdatetime, measure_data))
|
||||||
|
PARTITION BY RANGE(eventdatetime);
|
||||||
|
CREATE TABLE sensors_old PARTITION OF sensors FOR VALUES FROM ('2000-01-01') TO ('2020-01-01');
|
||||||
|
CREATE TABLE sensors_2020_01_01 PARTITION OF sensors FOR VALUES FROM ('2020-01-01') TO ('2020-02-01');
|
||||||
|
CREATE TABLE sensors_news PARTITION OF sensors FOR VALUES FROM ('2020-05-01') TO ('2025-01-01');
|
||||||
|
CREATE INDEX index_on_parent ON sensors(measureid);
|
||||||
|
CREATE INDEX index_on_child ON sensors_2020_01_01(measureid);
|
||||||
|
SELECT create_distributed_table('sensors', 'measureid');
|
||||||
|
create_distributed_table
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
CREATE TABLE colocated_partitioned_table(
|
||||||
|
measureid integer,
|
||||||
|
eventdatetime date,
|
||||||
|
PRIMARY KEY (measureid, eventdatetime))
|
||||||
|
PARTITION BY RANGE(eventdatetime);
|
||||||
|
CREATE TABLE colocated_partitioned_table_2020_01_01 PARTITION OF colocated_partitioned_table FOR VALUES FROM ('2020-01-01') TO ('2020-02-01');
|
||||||
|
SELECT create_distributed_table('colocated_partitioned_table', 'measureid');
|
||||||
|
create_distributed_table
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
-- from child to parent
|
||||||
|
ALTER TABLE sensors_2020_01_01 ADD CONSTRAINT fkey_from_child_to_parent FOREIGN KEY (measureid,eventdatetime) REFERENCES colocated_partitioned_table(measureid,eventdatetime);
|
||||||
|
-- load some data
|
||||||
|
INSERT INTO colocated_partitioned_table SELECT i, '2020-01-05' FROM generate_series(0,1000)i;
|
||||||
|
INSERT INTO sensors SELECT i, '2020-01-05', '{}' FROM generate_series(0,1000)i;
|
||||||
|
SELECT citus_move_shard_placement(8970000, 'localhost', :worker_1_port, 'localhost', :worker_2_port, shard_transfer_mode:='block_writes');
|
||||||
|
citus_move_shard_placement
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
|
||||||
|
(1 row)
|
||||||
|
|
|
@ -62,8 +62,8 @@ test: ensure_no_intermediate_data_leak
|
||||||
# ----------
|
# ----------
|
||||||
# Tests for partitioning support
|
# Tests for partitioning support
|
||||||
# ----------
|
# ----------
|
||||||
test: multi_partitioning_utils multi_partitioning partitioning_issue_3970 replicated_partitioned_table
|
test: multi_partitioning_utils multi_partitioning replicated_partitioned_table
|
||||||
|
test: partitioning_issue_4949 partitioning_issue_3970
|
||||||
# ----------
|
# ----------
|
||||||
# Tests for foreign data wrapper support
|
# Tests for foreign data wrapper support
|
||||||
# ----------
|
# ----------
|
||||||
|
|
|
@ -0,0 +1,44 @@
|
||||||
|
CREATE SCHEMA shard_move_fkeys_indexes;
|
||||||
|
SET search_path TO shard_move_fkeys_indexes;
|
||||||
|
SET citus.next_shard_id TO 8970000;
|
||||||
|
SET citus.next_placement_id TO 8770000;
|
||||||
|
SET citus.shard_count TO 4;
|
||||||
|
SET citus.shard_replication_factor TO 1;
|
||||||
|
|
||||||
|
CREATE TABLE sensors(
|
||||||
|
measureid integer,
|
||||||
|
eventdatetime date,
|
||||||
|
measure_data jsonb,
|
||||||
|
PRIMARY KEY (measureid, eventdatetime, measure_data))
|
||||||
|
PARTITION BY RANGE(eventdatetime);
|
||||||
|
|
||||||
|
CREATE TABLE sensors_old PARTITION OF sensors FOR VALUES FROM ('2000-01-01') TO ('2020-01-01');
|
||||||
|
CREATE TABLE sensors_2020_01_01 PARTITION OF sensors FOR VALUES FROM ('2020-01-01') TO ('2020-02-01');
|
||||||
|
CREATE TABLE sensors_news PARTITION OF sensors FOR VALUES FROM ('2020-05-01') TO ('2025-01-01');
|
||||||
|
|
||||||
|
CREATE INDEX index_on_parent ON sensors(measureid);
|
||||||
|
CREATE INDEX index_on_child ON sensors_2020_01_01(measureid);
|
||||||
|
|
||||||
|
SELECT create_distributed_table('sensors', 'measureid');
|
||||||
|
|
||||||
|
|
||||||
|
CREATE TABLE colocated_partitioned_table(
|
||||||
|
measureid integer,
|
||||||
|
eventdatetime date,
|
||||||
|
PRIMARY KEY (measureid, eventdatetime))
|
||||||
|
PARTITION BY RANGE(eventdatetime);
|
||||||
|
|
||||||
|
CREATE TABLE colocated_partitioned_table_2020_01_01 PARTITION OF colocated_partitioned_table FOR VALUES FROM ('2020-01-01') TO ('2020-02-01');
|
||||||
|
SELECT create_distributed_table('colocated_partitioned_table', 'measureid');
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
-- from child to parent
|
||||||
|
ALTER TABLE sensors_2020_01_01 ADD CONSTRAINT fkey_from_child_to_parent FOREIGN KEY (measureid,eventdatetime) REFERENCES colocated_partitioned_table(measureid,eventdatetime);
|
||||||
|
|
||||||
|
-- load some data
|
||||||
|
INSERT INTO colocated_partitioned_table SELECT i, '2020-01-05' FROM generate_series(0,1000)i;
|
||||||
|
INSERT INTO sensors SELECT i, '2020-01-05', '{}' FROM generate_series(0,1000)i;
|
||||||
|
|
||||||
|
|
||||||
|
SELECT citus_move_shard_placement(8970000, 'localhost', :worker_1_port, 'localhost', :worker_2_port, shard_transfer_mode:='block_writes');
|
Loading…
Reference in New Issue