创建评估辅表(光标运行- UDF)

UDF (用户定义的函数)skrpps_02.skr_create_secundary_db_tables(…)生成四个中间表。
这些表为选定的时间段和指定的机器提供原始数据。基于这些数据将会生成报告。

该功能是在 pgSql 中完成的,但也内部调用C++ 中完成的UDF

UDF 和调用参数

UDF:skrpps_02.skr_create_secundary_db_tables(…)

参数

型号

描述

_sDest_Schema

text

要创建的表的schema。如果创建临时表,_sDestSchema 必须始终为 == ‘‘

_sTable_Prefix

text,

创建的表的前缀

_eTable_Type

skrpps_02.e_sec_tabletype

  • 'eUnlogged' 用于常规未记录表
  • 'eUnloggedTemp' 用于临时表

_sSrc_Schema

text

源- schema (‚skr‘ or ‚skr_archive‘)

_mcids

integer[]

要添加到辅助数据库的机器的SKR 机器 ID。

_starttime

starttime timestamp without time zone

数据起始时间

_endtime

starttime timestamp without time zone

数据结束时间

_Iterator
[in]

integer DEFAULT 999999

您可以利用迭代器将游标运行拆分为多个单独skr_create_secondary_db_tables(…)调用。例如,获取进度条。
_mcids中机器数量将倒计数至零。新的迭代器值是此UDF的返回值,该值在_Break_Timeout 结束后会收到。

_Break_Timeout

interval DEFAULT

'99999:00:00'

多久之后游标运行应该中断。

一台机器的数据将始终完全处理。借此,0:0:0的_BreakTimeout将导致每个机器在_mcids终止。
建议: _BreakTimeout >= ‘0:0:10‘
因为终止和重启游标运行需要花费时间。Secondary Database

代码示例sample_curser.sql

创建辅助数据库表循环。

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$

示例是采用pgSql方式编写的,可以通过SQL作为pgAdmin3.exe脚本执行。

在执行期间为每个处理的机器显示进度消息(代码:raise notice 'IteratorPos: % ',_Iterator).

成功执行了该脚本示例后,这些表格将会在report_01架构里新生成。

重要点: