Creazione di tabelle ausiliari analitiche (corsa del cursore - UDF)
La UDF (funzione personalizzata) skrpps_02.skr_create_secundary_db_tables(…) genera quattro tabelle intermedie.
Queste tabelle interpretano dati non elaborati per il periodo di tempo selezionato e le macchine specificate. Su di esse si basano i report da eseguire qui di seguito.
Questa funzione è implementata in pgSql, richiama comunque internamente anche le UDF, implementate a loro volta in C++.
UDF e parametri di richiamo
UDF:skrpps_02.skr_create_secundary_db_tables(…)
Parametri | Tipo | Descrizione |
---|---|---|
_sDest_Schema | text | Schema nel quale devono essere archiviate le tabelle create. Quando si creano tabelle provvisorie, _sDestSchema deve essere sempre == ‘‘ |
_sTable_Prefix | text, | Prefisso delle tabelle create |
_eTable_Type | skrpps_02.e_sec_tabletype |
|
_sSrc_Schema | text | Schema di origine ('skr' o 'skr_archive') |
_mcids | integer[] | ID macchina SKR delle macchine che si intende registrare nel database secondario. |
_starttime | starttime timestamp without time zone | Ora/data di inizio dei dati |
_endtime | starttime timestamp without time zone | Ora/data di fine dei dati |
_Iterator | integer DEFAULT 999999 | Con l'ausilio dell'iteratore è possibile frammentare la corsa del cursore su più richiami singoli di skr_create_secondary_db_tables(…), ad es. per realizzare una barra di avanzamento. |
_Break_Timeout | interval DEFAULT '99999:00:00' | Momento in cui deve essere interrotta la corsa del cursore. I dati di una macchina vengono tuttavia lavorati sempre fino in fondo. In questo senso, un _BreakTimeout di ‘0:0:0‘ comporta sempre un'interruzione per ciascuna macchina in _mcids. |
Codice a titolo di esempio sample_curser.sql
Crea le tabelle database secondarie in un loop.
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$
L'esempio è scritto in pgSql e può essere eseguito con l'ausilio di pgAdmin3.exe come script SQL.
Durante l'esecuzione viene emesso per ciascuna delle macchine in lavorazione un messaggio di avanzamento (codice: raise notice 'IteratorPos: % ',_Iterator).
Dopo un'esecuzione corretta di questo esempio di script, nello schema report_01 vengono nuovamente create le tabelle:
- sample_collected_chg_counts
- sample_collected_filter_rows
- sample_collected_machine_data
- sample_metadata
Importante:
- Si consiglia di aggiungere a questo loop un _Break_Timeout di ca. 10 secondi.
- Differentemente da questo esempio
Le tabelle database secondarie devono essere create come tabelle Postgres provvisorie. - (_sDest_Schema=='', _eTable_Schema == 'eUnloggedTemp'),
- Per consentire la riabilitazione automatica della memoria dopo la chiusura del collegamento con il database.
- In caso contrario, non appena non sono più necessarie, occorre cancellare manualmente le tabelle create nello schema assegnato _sDest_Schema.