Slony-I 2.0.8 Documentation | ||||
---|---|---|---|---|
Prev | Fast Backward | Chapter 6. Schema schemadoc | Fast Forward | Next |
6.133. updatereloid(integer, integer)
Function Properties
Language: PLPGSQL
Return Type: bigint
updateReloid(set_id, only_on_node) Updates the respective reloids in sl_table and sl_seqeunce based on their respective FQNdeclare p_set_id alias for $1; p_only_on_node alias for $2; v_no_id int4; v_set_origin int4; prec record; begin -- ---- -- Grab the central configuration lock -- ---- lock table sl_config_lock; -- ---- -- Check that we either are the set origin or a current -- subscriber of the set. -- ---- v_no_id := getLocalNodeId('_schemadoc'); select set_origin into v_set_origin from sl_set where set_id = p_set_id for update; if not found then raise exception 'Slony-I: set % not found', p_set_id; end if; if v_set_origin <> v_no_id and not exists (select 1 from sl_subscribe where sub_set = p_set_id and sub_receiver = v_no_id) then return 0; end if; -- ---- -- If execution on only one node is requested, check that -- we are that node. -- ---- if p_only_on_node > 0 and p_only_on_node <> v_no_id then return 0; end if; -- Update OIDs for tables to values pulled from non-table objects in pg_class -- This ensures that we won't have collisions when repairing the oids for prec in select tab_id from sl_table loop update sl_table set tab_reloid = (select oid from pg_class pc where relkind <> 'r' and not exists (select 1 from sl_table t2 where t2.tab_reloid = pc.oid) limit 1) where tab_id = prec.tab_id; end loop; for prec in select tab_id, tab_relname, tab_nspname from sl_table loop update sl_table set tab_reloid = (select PGC.oid from pg_catalog.pg_class PGC, pg_catalog.pg_namespace PGN where slon_quote_brute(PGC.relname) = slon_quote_brute(prec.tab_relname) and PGC.relnamespace = PGN.oid and slon_quote_brute(PGN.nspname) = slon_quote_brute(prec.tab_nspname)) where tab_id = prec.tab_id; end loop; for prec in select seq_id from sl_sequence loop update sl_sequence set seq_reloid = (select oid from pg_class pc where relkind <> 'S' and not exists (select 1 from sl_sequence t2 where t2.seq_reloid = pc.oid) limit 1) where seq_id = prec.seq_id; end loop; for prec in select seq_id, seq_relname, seq_nspname from sl_sequence loop update sl_sequence set seq_reloid = (select PGC.oid from pg_catalog.pg_class PGC, pg_catalog.pg_namespace PGN where slon_quote_brute(PGC.relname) = slon_quote_brute(prec.seq_relname) and PGC.relnamespace = PGN.oid and slon_quote_brute(PGN.nspname) = slon_quote_brute(prec.seq_nspname)) where seq_id = prec.seq_id; end loop; return 1; end;