Generar tablas auxiliares de evaluación (curso del cursor - UDF)

La UDF (función definida por el usuario) skrpps_02.skr_create_secundary_db_tables(…) genera cuatro tablas intermedias
Estas tablas preparan datos sin procesar para el período de tiempo seleccionado y las máquinas indicadas. Los reportes que deben ser realizados a continuación se basan sobre esto.

Esta función está implementada en pgSql, pero internamente también llama UDF, que están implementadas en C++.

UDF y parámetros de llamada

UDF:skrpps_02.skr_create_secundary_db_tables(…)

Parámetro

Tipo

Descripción

_sDest_Schema

text

Esquema en el cual se deben guardar las tablas generadas. Cuando se generan tablas temporales, _sDestSchema siempre tiene que ser == ‘‘.

_sTable_Prefix

text,

Prefijo de las tablas generadas

_eTable_Type

skrpps_02.e_sec_tabletype

  • 'eUnlogged' para tablas normales Unlogged
  • 'eUnloggedTemp' para tablas temporales

_sSrc_Schema

text

Esquema de Source (‚skr‘ o ‚skr_archive‘)

_mcids

integer[]

IDs de máquinas del SKR de las máquinas que deben ser incluidas en la base de datos secundaria.

_starttime

starttime timestamp without time zone

Hora de inicio de los datos

_endtime

starttime timestamp without time zone

Hora de finalización de los datos

_Iterator
[in]

integer DEFAULT 999999

Con la ayuda del iterador, el curso del cursor puede ser dividido en varias llamadas individuales de skr_create_secondary_db_tables(…). P. ej. para realizar una barra de progreso.
Del número de máquinas en _mcids se hace la cuenta regresiva hasta 0. El nuevo valor de iterador es el valor devuelto (return) de esta UDF, el cual se recibe después de transcurrido _Break_Timeout.

_Break_Timeout

interval DEFAULT

'99999:00:00'

Momento después del cual el curso del cursor debe ser interrumpido.

Los datos de una máquina, sin embargo, siempre son procesadas completamente. Por consiguiente un _BreakTimeout de ‘0:0:0‘ lleva a una cancelación por máquina en _mcids.
Recomendación: _BreakTimeout >= ‘0:0:10‘
Debido al tiempo que lleva la cancelación al crear la Secondary Database.

Código de ejemplo sample_curser.sql

Genera las tablas de base de datos secundarias en un bucle.

DO

$do$

DECLARE

_Iterator int =999999;

BEGIN
WHILE _Iterator > 0 LOOP

_Iterator :=
(
    SELECT * from skrpps_02.skr_create_secundary_db_tables
    (
        'report_01'::text                             -- _Dest_Schema
        ,'sample'::text                                 -- _sTable_Prefix
        ,'eUnlogged'::skrpps_02.e_sec_tabletype    -- _eTable_Schema
        ,'skr_archive'::text                         -- _sSrc_Schema
        ,ARRAY[1399537134,1399537135,1399537136]    -- _mcids integer[]
        ,'2014-06-27 09:30:00'::timestamp         -- _starttime
        ,'2014-06-27 13:00:00'::timestamp         -- _endtime
        ,_Iterator                                        -- _Iterator integer
        ,'10'::interval                                 -- _Break_Timeout
    )

);

raise notice 'IteratorPos: % ',_Iterator ;
END LOOP;
END
$do$

El ejemplo está escrito en pgSql y puede ser ejecutado con la ayuda de pgAdmin3.exe como script SQL.

Durante la ejecución se emite un mensaje de progreso después de cada máquina procesada (código: raise notice 'IteratorPos: % ',_Iterator).

Después de una ejecución sin errores de este ejemplo de script, en el esquema report_01 se generaron nuevamente las tablas:

Importante: