Christopher B. Browne's Home Page
cbbrowne@gmail.com

1.132. updatereloid( integer, integer )

Function Properties

PLPGSQLinteger
updateReloid(set_id, only_on_node) Updates the respective reloids in sl_table and sl_seqeunce based on their respective FQN
    declare
            p_set_id                alias for $1;
            p_only_on_node          alias for $2;
            v_no_id                 int4;
            v_set_origin            int4;
    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 sl_table set
                    tab_reloid = PGC.oid
                    from pg_catalog.pg_class PGC, pg_catalog.pg_namespace PGN
                    where slon_quote_brute(sl_table.tab_relname) = slon_quote_brute(PGC.relname)
                            and PGC.relnamespace = PGN.oid
    			and slon_quote_brute(PGN.nspname) = slon_quote_brute(sl_table.tab_nspname);
    
            update sl_sequence set
                    seq_reloid = PGC.oid
                    from pg_catalog.pg_class PGC, pg_catalog.pg_namespace PGN
                    where slon_quote_brute(sl_sequence.seq_relname) = slon_quote_brute(PGC.relname)
                    	and PGC.relnamespace = PGN.oid
    			and slon_quote_brute(PGN.nspname) = slon_quote_brute(sl_sequence.seq_nspname);
    
            return  createEvent('_schemadoc', 'RESET_CONFIG',
                            p_set_id, p_only_on_node);
    end;

Google

If this was useful, let others know by an Affero rating

Contact me at cbbrowne@gmail.com