mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-11 18:16:24 +05:00
47 lines
2.5 KiB
SQL
Executable File
47 lines
2.5 KiB
SQL
Executable File
/*
|
|
This script will migrate CDRs from the old CGRateS tables to the new cdrs table
|
|
but it only migrate CDRs where the duration is > 0.
|
|
If you need CDRs also with duration is = 0 you can make the appropriate change in the line beginning WHERE cdrs_primary.usage
|
|
|
|
Also the script will process 10,000 CDRs before committing to save system resources
|
|
especially in systems where they are millions of CDRs to be migrated
|
|
You can increase or lower the value of step in the line after BEGIN below.
|
|
*/
|
|
|
|
|
|
DO $$
|
|
DECLARE
|
|
max_cdrs bigint;
|
|
start_id bigint;
|
|
end_id bigint;
|
|
step bigint;
|
|
BEGIN
|
|
/* You must change the step var to commit every step rows inserted */
|
|
step := 10000;
|
|
start_id := 0;
|
|
end_id := start_id + step;
|
|
select max(id) INTO max_cdrs from rated_cdrs;
|
|
WHILE start_id <= max_cdrs
|
|
LOOP
|
|
--RAISE NOTICE '%', (to_char(start_id, '99999999') || '-' || to_char(end_id, '99999999'));
|
|
INSERT INTO
|
|
cdrs(cgrid,run_id,origin_host,source,origin_id,tor,request_type,direction,tenant,category,account,subject,destination,setup_time,pdd,answer_time,usage,supplier,disconnect_cause,extra_fields,cost_source,cost,cost_details,extra_info, created_at, updated_at, deleted_at)
|
|
SELECT cdrs_primary.cgrid,rated_cdrs.runid as run_id,cdrs_primary.cdrhost as origin_host,cdrs_primary.cdrsource as source,cdrs_primary.accid as origin_id, cdrs_primary.tor,rated_cdrs.reqtype as request_type,rated_cdrs.direction, rated_cdrs.tenant,rated_cdrs.category, rated_cdrs.account, rated_cdrs.subject, rated_cdrs.destination,rated_cdrs.setup_time,rated_cdrs.pdd,rated_cdrs.answer_time,rated_cdrs.usage,rated_cdrs.supplier,rated_cdrs.disconnect_cause,cdrs_extra.extra_fields,cost_details.cost_source,rated_cdrs.cost,cost_details.timespans as cost_details,rated_cdrs.extra_info,rated_cdrs.created_at,rated_cdrs.updated_at, rated_cdrs.deleted_at
|
|
FROM rated_cdrs
|
|
INNER JOIN cdrs_primary ON rated_cdrs.cgrid = cdrs_primary.cgrid
|
|
INNER JOIN cdrs_extra ON rated_cdrs.cgrid = cdrs_extra.cgrid
|
|
INNER JOIN cost_details ON rated_cdrs.cgrid = cost_details.cgrid
|
|
WHERE cdrs_primary.usage > '0'
|
|
AND not exists (select 1 from cdrs c where c.cgrid = cdrs_primary.cgrid)
|
|
AND rated_cdrs.id >= start_id
|
|
AND rated_cdrs.id < end_id
|
|
;
|
|
start_id = start_id + step;
|
|
end_id = end_id + step;
|
|
END LOOP;
|
|
END
|
|
$$;
|
|
ALTER TABLE cdrs RENAME COLUMN usage to usage_old;
|
|
ALTER TABLE cdrs ADD usage NUMERIC(30);
|
|
UPDATE cdrs SET usage = usage_old * 1000000000 WHERE usage_old IS NOT NULL;
|
|
ALTER TABLE cdrs DROP COLUMN usage_old; |