1.137.  upgradeschema( text )

Propriétés de la fonction
Langage: PLPGSQL
Type du code retour: text

Appelé lors des "fonctions de mise à jour" par slonik pour réaliser les modifications de schéma.

declare
        p_old   alias for $1;
begin
        -- upgrade sl_table
        if p_old IN ('1.0.2', '1.0.5', '1.0.6') then
                -- Add new column(s) sl_table.tab_relname, sl_table.tab_nspname
                execute 'alter table sl_table add column tab_relname name';
                execute 'alter table sl_table add column tab_nspname name';

                -- populate the colums with data
                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;

                -- constrain the colums
                execute 'alter table sl_table alter column tab_relname set NOT NULL';
                execute 'alter table sl_table alter column tab_nspname set NOT NULL';

        end if;

        -- upgrade sl_sequence
        if p_old IN ('1.0.2', '1.0.5', '1.0.6') then
                -- Add new column(s) sl_sequence.seq_relname, sl_sequence.seq_nspname
                execute 'alter table sl_sequence add column seq_relname name';
                execute 'alter table sl_sequence add column seq_nspname name';

                -- populate the columns with data
                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;

                -- constrain the data
                execute 'alter table sl_sequence alter column seq_relname set NOT NULL';
                execute 'alter table sl_sequence alter column seq_nspname set NOT NULL';
        end if;

        -- ----
        -- Changes from 1.0.x to 1.1.0
        -- ----
        if p_old IN ('1.0.2', '1.0.5', '1.0.6') then
                -- Add new column sl_node.no_spool for virtual spool nodes
                execute 'alter table sl_node add column no_spool boolean';
                update sl_node set no_spool = false;
        end if;

        -- ----
        -- Changes for 1.1.3
        -- ----
        if p_old IN ('1.0.2', '1.0.5', '1.0.6', '1.1.0', '1.1.1', '1.1.2') then
                -- Add new table sl_nodelock
                execute 'create table sl_nodelock (
                                                nl_nodeid               int4,
                                                nl_conncnt              serial,
                                                nl_backendpid   int4,

                                                CONSTRAINT "sl_nodelock-pkey"
                                                PRIMARY KEY (nl_nodeid, nl_conncnt)
                                        )';
                -- Drop obsolete functions
                execute 'drop function terminateNodeConnections(name)';
                execute 'drop function cleanupListener()';
                execute 'drop function truncateTable(text)';
        end if;

        -- ----
        -- Changes for 1.2
        -- ----
        if p_old IN ('1.0.2', '1.0.5', '1.0.6', '1.1.0', '1.1.1', '1.1.2', '1.1.3','1.1.5', '1.1.6', '1.1.7', '1.1.8', '1.1.9') then
                -- Add new table sl_registry
                execute 'create table sl_registry (
                                                reg_key                 text primary key,
                                                reg_int4                int4,
                                                reg_text                text,
                                                reg_timestamp   timestamp
                                        ) without oids';
                execute 'alter table sl_config_lock set without oids;';
                execute 'alter table sl_confirm set without oids;';
                execute 'alter table sl_event set without oids;';
                execute 'alter table sl_listen set without oids;';
                execute 'alter table sl_node set without oids;';
                execute 'alter table sl_nodelock set without oids;';
                execute 'alter table sl_path set without oids;';
                execute 'alter table sl_sequence set without oids;';
                execute 'alter table sl_set set without oids;';
                execute 'alter table sl_setsync set without oids;';
                execute 'alter table sl_subscribe set without oids;';
                execute 'alter table sl_table set without oids;';
                execute 'alter table sl_trigger set without oids;';
        end if;

        -- ----
        -- Changes for 1.2.11
        -- ----
        if p_old IN ('1.0.2', '1.0.5', '1.0.6', '1.1.0', '1.1.1', '1.1.2', '1.1.3','1.1.5', '1.1.6', '1.1.7', '1.1.8', '1.1.9', '1.2.0', '1.2.1', '1.2.2', '1.2.3', '1.2.4', '1.2.5', '1.2.6', '1.2.7', '1.2.8', '1.2.9', '1.2.10') then
                -- Add new table sl_archive_counter
                execute 'create table sl_archive_counter (
                                                ac_num                  bigint,
                                                ac_timestamp    timestamp
                                        ) without oids';
                execute 'insert into sl_archive_counter
                                        (ac_num, ac_timestamp) values (0, ''epoch''::timestamp)';
        end if;

        -- In any version, make sure that the xxidin() functions are defined STRICT
        perform make_function_strict ('xxidin', '(cstring)');
        return p_old;
end;