Advertisement
Guest User

Untitled

a guest
May 27th, 2016
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.13 KB | None | 0 0
  1. schema = context['schema'] #'_00000003'
  2. vStep = 100
  3. SqlQuery('''
  4. -- Создаем подключение
  5. do $$
  6. begin
  7. dblink_connect('dbname=inside.tensor.ru port=5435 host=web-dev-psql.unix.tensor.ru user=postgres password=postgres');
  8. end;
  9. $$;
  10. ''')
  11. SqlQuery('''
  12. -- Создаем временный индекс
  13. do $$
  14. begin
  15. dblink(''CREATE INDEX CONCURRENTLY "iЛид-РегламентДокументСозданиеДатаNULL_Tmp"
  16. ON {schema}."Лид"
  17. USING btree
  18. ("Регламент", "@Документ")
  19. WHERE "СозданиеДата" IS NULL;'')
  20. end;
  21. $$;
  22. '''.format(schema = schema))
  23.  
  24. resTheme = SqlQuery('''
  25. WITH recursive Regs as (
  26. SELECT
  27. x."@Регламент" "Регламент",
  28. x."Раздел@"
  29. FROM {schema}."Регламент" x
  30. WHERE "Раздел" = vMainReg
  31. UNION ALL
  32. SELECT
  33. r."@Регламент" "Регламент",
  34. r."Раздел@"
  35. FROM Regs t
  36. INNER JOIN {schema}."Регламент" r
  37. ON t."Регламент" = r."Раздел")
  38. SELECT "Регламент"
  39. FROM Regs
  40. WHERE "Раздел@" IS NOT TRUE
  41. '''.format(schema = schema))
  42.  
  43. for rec in resTheme:
  44. vCurLead = 0
  45. while True:
  46. vNextLead = SqlQueryScalar('''
  47. SELECT max_id
  48. FROM dblink(''
  49. SET search_path TO "_00000003", public;
  50. WITH
  51. sel AS (
  52. SELECT
  53. l."@Документ"
  54. FROM "Лид" l
  55. WHERE
  56. l."Регламент" = {vTheme} AND
  57. l."@Документ" > {vCurLead} AND
  58. l."СозданиеДата" IS NULL
  59. ORDER BY l."Регламент", l."@Документ"
  60. LIMIT {vStep}
  61. ),
  62. upd AS (
  63. UPDATE "Лид" l
  64. SET
  65. "СозданиеДата" = date_trunc(''day'', l."ДатаСоздания")
  66. FROM sel d
  67. WHERE
  68. l."@Документ" = d."@Документ"
  69. RETURNING l."@Документ"
  70. )
  71. SELECT max("@Документ") max_id
  72. FROM upd;
  73. '') t ;
  74. '''.format(vTheme=vTheme, vCurLead=vCurLead, vStep=vStep))
  75. if vNextLead is Null:
  76. break
  77. vCurLead = vNextLead
  78. SqlQuery('''
  79. -- Удаление временного индекса
  80. do $$
  81. begin
  82. loop
  83. begin
  84. dblink(''LOCK TABLE {schema}."Лид" IN ACCESS EXCLUSIVE MODE NOWAIT;
  85. DROP INDEX {schema}."iЛид-РегламентДокументСозданиеДатаNULL_Tmp";'')
  86. exception when lock_not_available then
  87. continue;
  88. end;
  89. exit;
  90. end loop;
  91. end;
  92. $$;
  93. ''').format(schema = schema))
  94. SqlQuery('''
  95. -- Закрываем подключение
  96. do $$
  97. begin
  98. perform dblink_disconnect();
  99. end;
  100. $$;
  101. ''')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement