@@ -26,6 +26,7 @@ DECLARE
26
26
pname text ;
27
27
BEGIN
28
28
IF NEW .initial_node != (SELECT shardman .get_node_id ()) THEN
29
+ RAISE DEBUG ' [SHARDMAN] new table trig, pid %' , (select pg_backend_pid());
29
30
EXECUTE format(' DROP TABLE IF EXISTS %I CASCADE;' , NEW .relation );
30
31
partition_names :=
31
32
(SELECT ARRAY(SELECT part_name FROM shardman .gen_part_names (
@@ -198,6 +199,7 @@ BEGIN
198
199
format(' %I' , part .relation ))),
199
200
part .part_name ,
200
201
part .part_name );
202
+ RAISE DEBUG ' [SHARDMAN] my id: %, new part: %' , shardman .get_node_id (), part .part_name ;
201
203
-- replace local partition with foreign table
202
204
EXECUTE format(' SELECT replace_hash_partition(%L, %L)' ,
203
205
part .part_name , fdw_part_name);
@@ -207,18 +209,21 @@ END $$ LANGUAGE plpgsql;
207
209
208
210
-- On adding new partition, create proper foreign server & foreign table and
209
211
-- replace tmp (empty) partition with it.
210
- CREATE FUNCTION new_partition () RETURNS TRIGGER AS $$
212
+ -- TODO: race condition between this trigger and new_table_worker_side
213
+ -- definitely deserves attention.
214
+ CREATE FUNCTION new_primary () RETURNS TRIGGER AS $$
211
215
BEGIN
212
216
IF NEW .owner != (SELECT shardman .get_node_id ()) THEN
217
+ RAISE DEBUG ' SHARDMAN new prim trigger, pid %' , (select pg_backend_pid());
213
218
PERFORM shardman .replace_usual_part_with_foreign (NEW);
214
219
END IF;
215
220
RETURN NULL ;
216
221
END
217
222
$$ LANGUAGE plpgsql;
218
- CREATE TRIGGER new_partition AFTER INSERT ON shardman .partitions
219
- FOR EACH ROW EXECUTE PROCEDURE new_partition ();
223
+ CREATE TRIGGER new_primary AFTER INSERT ON shardman .partitions
224
+ FOR EACH ROW WHEN ( NEW . num = 0 ) EXECUTE PROCEDURE new_primary ();
220
225
-- fire trigger only on worker nodes
221
- ALTER TABLE shardman .partitions ENABLE REPLICA TRIGGER new_partition ;
226
+ ALTER TABLE shardman .partitions ENABLE REPLICA TRIGGER new_primary ;
222
227
223
228
-- Replace foreign table-partition with local. The latter must exist!
224
229
-- Foreign table will be dropped.
0 commit comments