@@ -1438,7 +1438,9 @@ DECLARE
1438
1438
repl shardman .replicas ;
1439
1439
create_table text ;
1440
1440
create_rules text ;
1441
+ rules text = ' ' ;
1441
1442
alters text = ' ' ;
1443
+ node_id int ;
1442
1444
BEGIN
1443
1445
IF shardman .redirect_to_shardlord (format(' alter_table(%L,%L)' , rel_name, alter_clause))
1444
1446
THEN
@@ -1452,6 +1454,12 @@ BEGIN
1452
1454
IF t .master_node IS NOT NULL
1453
1455
THEN
1454
1456
SELECT shardman .gen_create_rules_sql (t .relation , format(' %s_fdw' , t .relation )) INTO create_rules;
1457
+ FOR node_id IN SELECT * FROM shardman .nodes WHERE id<> t .master_node
1458
+ LOOP
1459
+ rules := format(' %s{%s:%s}' ,
1460
+ rules, node_id, create_rules);
1461
+ END LOOP;
1462
+ PERFORM shardman .broadcast (rules);
1455
1463
END IF;
1456
1464
UPDATE shardman .tables SET create_sql= create_table, create_rules_sql= create_rules WHERE relation= t .relation ;
1457
1465
@@ -1493,9 +1501,9 @@ BEGIN
1493
1501
WHERE i .indrelid = rel_name::regclass
1494
1502
AND i .indisprimary ;
1495
1503
1496
- RETURN format(' CREATE RULE on_update AS ON UPDATE TO %I DO INSTEAD UPDATE %I SET (%s) = (%s) WHERE %s;
1497
- CREATE RULE on_insert AS ON INSERT TO %I DO INSTEAD INSERT INTO %I (%s) VALUES (%s);
1498
- CREATE RULE on_delete AS ON DELETE TO %I DO INSTEAD DELETE FROM %I WHERE %s;' ,
1504
+ RETURN format(' CREATE OR REPLACE RULE on_update AS ON UPDATE TO %I DO INSTEAD UPDATE %I SET (%s) = (%s) WHERE %s;
1505
+ CREATE OR REPLACE RULE on_insert AS ON INSERT TO %I DO INSTEAD INSERT INTO %I (%s) VALUES (%s);
1506
+ CREATE OR REPLACE RULE on_delete AS ON DELETE TO %I DO INSTEAD DELETE FROM %I WHERE %s;' ,
1499
1507
rel_name, fdw_name, dst, src, pk,
1500
1508
rel_name, fdw_name, dst, src,
1501
1509
rel_name, fdw_name, pk);
0 commit comments