Guest User

Untitled

a guest
Jul 17th, 2018
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.80 KB | None | 0 0
  1. #TODO: make policy_advisors.status default submitted
  2. #TODO: make view say *_total_unmaterialized and materialized table just have *_total
  3.  
  4. DROP TABLE advisor_submitted_premium_total_materialized;
  5.  
  6. CREATE TABLE advisor_submitted_premium_total_materialized AS
  7. SELECT * FROM advisor_submitted_premium_total;
  8.  
  9. ALTER TABLE advisor_submitted_premium_total_materialized ADD PRIMARY KEY (advisor_id,channel_id,status,submitted_at);
  10.  
  11. create language 'plpgsql';
  12.  
  13. CREATE FUNCTION advisor_submitted_premium_total_refresh_rows(
  14. a_id integer) RETURNS VOID
  15. security definer language 'plpgsql' as $$
  16. begin
  17. delete
  18. from advisor_submitted_premium_total_materialized WHERE advisor_id = a_id;
  19. insert into advisor_submitted_premium_total_materialized
  20. select * from advisor_submitted_premium_total WHERE advisor_id = a_id;
  21. end
  22. $$;
  23.  
  24. select advisor_submitted_premium_total_refresh_rows(38420);
  25.  
  26. select * from advisor_submitted_premium_total_materialized where advisor_id = 38420;
  27. update advisor_submitted_premium_total_materialized set total = 5 where advisor_id = 38420;
  28.  
  29. #advisor_submitted_premium_total_materialized_view == asptmv
  30. CREATE or REPLACE FUNCTION asptmv_policy_advisors_update_trigger() returns trigger
  31. security definer language 'plpgsql' as $$
  32. begin
  33. if old.advisor_id = new.advisor_id then
  34. perform advisor_submitted_premium_total_refresh_rows(new.advisor_id);
  35. else
  36. perform advisor_submitted_premium_total_refresh_rows(new.advisor_id);
  37. perform advisor_submitted_premium_total_refresh_rows(old.advisor_id);
  38. end if;
  39. return null;
  40. end
  41. $$;
  42. CREATE or REPLACE FUNCTION asptmv_policy_advisors_delete_trigger() returns trigger
  43. security definer language 'plpgsql' as $$
  44. begin
  45. perform advisor_submitted_premium_total_refresh_rows(old.advisor_id);
  46. return null;
  47. end
  48. $$;
  49. CREATE or REPLACE FUNCTION asptmv_policy_advisors_insert_trigger() returns trigger
  50. security definer language 'plpgsql' as $$
  51. begin
  52. perform advisor_submitted_premium_total_refresh_rows(old.advisor_id);
  53. return null;
  54. end
  55. $$;
  56.  
  57. CREATE TRIGGER asptmv_policy_advisors_update_trigger after update on policy_advisors
  58. for each row execute procedure asptmv_policy_advisors_update_trigger();
  59. CREATE TRIGGER asptmv_view_policy_advisors_delete_trigger after delete on policy_advisors
  60. for each row execute procedure asptmv_policy_advisors_delete_trigger();
  61. CREATE TRIGGER asptmv_policy_advisors_insert_trigger after insert on policy_advisors
  62. for each row execute procedure asptmv_policy_advisors_insert_trigger();
  63.  
  64.  
  65. CREATE or REPLACE FUNCTION asptmv_policies_update_trigger() returns trigger
  66. security definer language 'plpgsql' as $$
  67. begin
  68. if old.id = new.id then
  69. perform advisor_submitted_premium_total_refresh_rows(advisor_id) from policy_advisors where policy_id = new.id;
  70. else
  71. perform advisor_submitted_premium_total_refresh_rows(advisor_id) from policy_advisors where policy_id = new.id;
  72. perform advisor_submitted_premium_total_refresh_rows(advisor_id) from policy_advisors where policy_id = old.id;
  73. end if;
  74. return null;
  75. end
  76. $$;
  77. CREATE TRIGGER asptmv_policies_update_trigger after update on policies
  78. for each row execute procedure asptmv_policies_update_trigger();
  79.  
  80.  
  81.  
  82. CREATE or REPLACE FUNCTION asptmv_submitted_premiums_update_trigger() returns trigger
  83. security definer language 'plpgsql' as $$
  84. begin
  85. if old.id = new.id then
  86. perform advisor_submitted_premium_total_refresh_rows(advisor_id) from policy_advisors where policy_id = new.policy_id;
  87. else
  88. perform advisor_submitted_premium_total_refresh_rows(advisor_id) from policy_advisors where policy_id = new.policy_id;
  89. perform advisor_submitted_premium_total_refresh_rows(advisor_id) from policy_advisors where policy_id = old.policy_id;
  90. end if;
  91. return null;
  92. end
  93. $$;
  94. CREATE or REPLACE FUNCTION asptmv_submitted_premiums_delete_trigger() returns trigger
  95. security definer language 'plpgsql' as $$
  96. begin
  97. perform advisor_submitted_premium_total_refresh_rows(advisor_id) from policy_advisors where policy_id = old.policy_id;
  98. return null;
  99. end
  100. $$;
  101. CREATE or REPLACE FUNCTION asptmv_submitted_premiums_insert_trigger() returns trigger
  102. security definer language 'plpgsql' as $$
  103. begin
  104. perform advisor_submitted_premium_total_refresh_rows(advisor_id) from policy_advisors where policy_id = new.policy_id;
  105. return null;
  106. end
  107. $$;
  108.  
  109. CREATE TRIGGER asptmv_submitted_premiums_update_trigger after update on submitted_premiums
  110. for each row execute procedure asptmv_submitted_premiums_update_trigger();
  111. CREATE TRIGGER asptmv_submitted_premiums_delete_trigger after delete on submitted_premiums
  112. for each row execute procedure asptmv_submitted_premiums_delete_trigger();
  113. CREATE TRIGGER asptmv_submitted_premiums_insert_trigger after insert on submitted_premiums
  114. for each row execute procedure asptmv_submitted_premiums_insert_trigger();
  115.  
  116.  
  117. EXPLAIN ANALYZE SELECT SUM(total) AS total FROM advisor_submitted_premium_total_materialized WHERE advisor_id = 38420 AND channel_id = 3
  118. AND submitted_at >= '2010-01-01' AND submitted_at < '2011-01-01';
  119.  
  120. SELECT
  121. COALESCE(SUM(CASE WHEN submitted_at >= '2010-01-01' AND submitted_at < '2010-02-01' THEN (COALESCE(total,0.0)) ELSE 0.0 END),0.0) AS jan,
  122. COALESCE(SUM(CASE WHEN submitted_at >= '2010-02-01' AND submitted_at < '2010-03-01' THEN (COALESCE(total,0.0)) ELSE 0.0 END),0.0) AS feb,
  123. COALESCE(SUM(CASE WHEN submitted_at >= '2010-03-01' AND submitted_at < '2010-04-01' THEN (COALESCE(total,0.0)) ELSE 0.0 END),0.0) AS mar,
  124. COALESCE(SUM(CASE WHEN submitted_at >= '2010-04-01' AND submitted_at < '2010-05-01' THEN (COALESCE(total,0.0)) ELSE 0.0 END),0.0) AS apr,
  125. COALESCE(SUM(CASE WHEN submitted_at >= '2010-05-01' AND submitted_at < '2010-06-01' THEN (COALESCE(total,0.0)) ELSE 0.0 END),0.0) AS may,
  126. COALESCE(SUM(CASE WHEN submitted_at >= '2010-06-01' AND submitted_at < '2010-07-01' THEN (COALESCE(total,0.0)) ELSE 0.0 END),0.0) AS jun,
  127. COALESCE(SUM(CASE WHEN submitted_at >= '2010-07-01' AND submitted_at < '2010-08-01' THEN (COALESCE(total,0.0)) ELSE 0.0 END),0.0) AS jul,
  128. COALESCE(SUM(CASE WHEN submitted_at >= '2010-08-01' AND submitted_at < '2010-09-01' THEN (COALESCE(total,0.0)) ELSE 0.0 END),0.0) AS aug,
  129. COALESCE(SUM(CASE WHEN submitted_at >= '2010-09-01' AND submitted_at < '2010-10-01' THEN (COALESCE(total,0.0)) ELSE 0.0 END),0.0) AS sep,
  130. COALESCE(SUM(CASE WHEN submitted_at >= '2010-10-01' AND submitted_at < '2010-11-01' THEN (COALESCE(total,0.0)) ELSE 0.0 END),0.0) AS oct,
  131. COALESCE(SUM(CASE WHEN submitted_at >= '2010-11-01' AND submitted_at < '2010-12-01' THEN (COALESCE(total,0.0)) ELSE 0.0 END),0.0) AS nov,
  132. COALESCE(SUM(CASE WHEN submitted_at >= '2010-12-01' AND submitted_at < '2011-01-01' THEN (COALESCE(total,0.0)) ELSE 0.0 END),0.0) AS dec
  133. FROM advisor_submitted_premium_total_materialized
  134. WHERE advisor_id = 38420 AND channel_id = 3;
Add Comment
Please, Sign In to add comment