Christopher B. Browne's Home Page
cbbrowne@acm.org

8.130. updaterelname(integer, integer)

Function Properties

PLPGSQLinteger
updateRelname(set_id, only_on_node)
    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_relname = PGC.relname, tab_nspname = PGN.nspname
                    from pg_catalog.pg_class PGC, pg_catalog.pg_namespace PGN 
                    where sl_table.tab_reloid = PGC.oid
                            and PGC.relnamespace = PGN.oid;
            update sl_sequence set
                    seq_relname = PGC.relname, seq_nspname = PGN.nspname
                    from pg_catalog.pg_class PGC, pg_catalog.pg_namespace PGN
                    where sl_sequence.seq_reloid = PGC.oid
                    and PGC.relnamespace = PGN.oid;
            return p_set_id;
    end;

Google

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

Contact me at cbbrowne@acm.org