创建评估辅表(光标运行- 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 |
|
_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 | integer DEFAULT 999999 | 您可以利用迭代器将游标运行拆分为多个单独skr_create_secondary_db_tables(…)调用。例如,获取进度条。 |
_Break_Timeout | interval DEFAULT '99999:00:00' | 多久之后游标运行应该中断。 一台机器的数据将始终完全处理。借此,0:0:0的_BreakTimeout将导致每个机器在_mcids终止。 |
代码示例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架构里新生成。
- sample_collected_chg_counts
- sample_collected_filter_rows
- sample_collected_machine_data
- sample_metadata
重要点:
- 实现此循环 _Break_Timeout 需要大约 10 秒。
- 与本例不同
创建辅助数据库作为临时Postgres表。 - (_sDest_Schema=='', _eTable_Schema == 'eUnloggedTemp'),
- 以便在关闭数据库连接时自动释放内存。
- 否则,需要手动删除不再需要的已分配在 _sDest_Schema 架构中的表。