Advertisement
Guest User

Untitled

a guest
Jul 8th, 2016
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.38 KB | None | 0 0
  1. -- F5 в pgAdmin
  2. SET search_path TO _00000003, public;
  3.  
  4. DO $$
  5. DECLARE
  6. vStep TEXT := '300';
  7. vDeadline timestamp := '"2016-07-27 05:40:00.000000+03"'::timestamp with time zone;
  8. vMainReg integer := NULL;
  9. vCurLead integer := 0;
  10. vNextLead integer := 0;
  11. vTheme integer := NULL;
  12. vDuration double precision[] := NULL;
  13. vStartTime timestamp;
  14. vAvg double precision;
  15. vCnt integer;
  16. vDV double precision;
  17. vCounter integer := 0;
  18. BEGIN
  19. --PERFORM dblink_connect('crm', 'dbname=inside.tensor.ru port=5432 host=ins-db-master.unix.tensor.ru user= password=');
  20. PERFORM dblink_connect('crm', 'dbname=inside.tensor.ru port=5435 host=web-dev-psql.unix.tensor.ru user=postgres password=postgres');
  21. --PERFORM dblink_connect('crm', 'dbname=' || current_database()::text || ' port=' || inet_server_port());
  22. RAISE NOTICE '%: ЗАПУЩЕНО. Заполнение полей таблицы "Лид" "ПоследнийИтоговыйКонтакт".', date_trunc('second', clock_timestamp()) :: TEXT;
  23.  
  24. FOR vTheme IN (
  25. WITH recursive themes as (
  26. SELECT
  27. x."@Регламент" "Регламент",
  28. x."Раздел",
  29. x."Раздел@"
  30. FROM "Регламент" x
  31. WHERE "Идентификатор" = '8992e41a-a499-11e1-8c02-63ba74c41964'
  32. UNION ALL
  33. SELECT r."@Регламент" "Регламент", r."Раздел", r."Раздел@"
  34. FROM themes t
  35. INNER JOIN "Регламент" r ON t."Регламент" = r."Раздел"
  36. )
  37. SELECT "Регламент"
  38. FROM themes
  39. WHERE "Раздел@" IS NOT TRUE
  40. )
  41. LOOP
  42. --vDuration := NULL;
  43. vCurLead := 0;
  44. LOOP
  45. vStartTime := clock_timestamp();
  46. SELECT max_id
  47. INTO vNextLead
  48. FROM dblink('crm', '
  49. SET search_path TO "_00000003", public;
  50. WITH
  51. sel_lead AS (
  52. SELECT
  53. l."@Документ" "Документ",
  54. (
  55. SELECT
  56. e."@Событие"
  57. FROM "Событие" e
  58. WHERE
  59. e."Тип" = 3 AND
  60. e."Переход" IS NOT NULL AND
  61. e."Документ" = l."@Документ"
  62. ORDER BY "Конец" DESC NULLS LAST
  63. LIMIT 1
  64. ) "Событие"
  65. FROM "Лид" l
  66. WHERE
  67. l."Фаза" IS NOT NULL AND
  68. l."Регламент" = ' || vTheme::TEXT || ' AND
  69. l."@Документ" > ' || vCurLead::TEXT || '
  70. ORDER BY l."Регламент", l."@Документ"
  71. LIMIT ' || vStep::TEXT || '
  72. ),
  73. upd AS (
  74. UPDATE "Лид"
  75. SET
  76. "ПоследнийИтоговыйКонтакт" = sl."Событие"
  77. FROM sel_lead sl
  78. WHERE
  79. "@Документ" = sl."Документ"
  80. RETURNING "@Документ"
  81. )
  82. SELECT max("@Документ") max_id
  83. FROM upd;
  84.  
  85. ') t (max_id integer);
  86. EXIT WHEN (vNextLead is null or clock_timestamp() > vDeadline);
  87. vDV := extract('milliseconds' from clock_timestamp() - vStartTime);
  88. vDuration := array_append(vDuration, vDV);
  89. vCounter := vCounter+1;
  90. vCurLead := vNextLead;
  91. SELECT avg(t)
  92. INTO vAvg
  93. FROM unnest(vDuration) t;
  94. RAISE NOTICE '%: Исправлено %. Среднее время на пачку: %, Время на пачку: %, регламент %, ID текущего лида %', clock_timestamp()::text, vCounter, vAvg, vDV, vTheme, vCurLead;
  95. END LOOP;
  96. END LOOP;
  97.  
  98. perform dblink_disconnect('crm');
  99.  
  100. SELECT avg(t), count(*)
  101. INTO vAvg, vCnt
  102. FROM unnest(vDuration) t;
  103.  
  104. IF clock_timestamp() > vDeadline THEN
  105. RAISE NOTICE '%: Выход по таймауту. Кол-во пачек: %, Среднее время на пачку: %, регламент %, ID текущего лида %', clock_timestamp()::text, vCnt, vAvg, vTheme, vCurLead;
  106. ELSE
  107. RAISE NOTICE '%: ЗАВЕРШЕНО. Кол-во пачек: %, Среднее время на пачку: %', clock_timestamp()::text, vCnt, vAvg;
  108. END IF;
  109.  
  110. EXCEPTION WHEN others THEN
  111. PERFORM dblink_disconnect('crm');
  112. RAISE NOTICE '% %', SQLERRM, SQLSTATE;
  113. RAISE NOTICE '%: Выход по ошибке: регламент %, ID текущего лида %', clock_timestamp()::text, vTheme, vСurLead;
  114. RAISE;
  115.  
  116. END;
  117. $$;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement