payroll-read-timeout-recovery.sql 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. -- Incident 2026-10-15: keep JIT compilation out of interactive payroll reads.
  2. -- Scope is these functions only; restore the backed-up definitions/view to roll back.
  3. BEGIN;
  4. SET LOCAL lock_timeout='5s';
  5. SELECT pg_advisory_xact_lock(hashtext('xs-payroll-read-recovery'));
  6. ALTER FUNCTION xs_payroll_sources(text) SET jit=off;
  7. ALTER FUNCTION xs_payroll_source_version(text) SET jit=off;
  8. ALTER FUNCTION xs_payroll_cutoff_snapshot(text,text) SET jit=off;
  9. -- Preserve every column and correction rule while allowing tenant/month predicates
  10. -- to reach the indexed receipt table before projecting corrected amounts.
  11. CREATE OR REPLACE VIEW "ReviewRewardIncome" AS
  12. SELECT
  13. r."objectId",
  14. r."company",
  15. r."taskId",
  16. r."taskKey",
  17. r."coachId",
  18. r."coachName",
  19. r."studentId",
  20. r."studentName",
  21. r."courseName",
  22. r."storeId",
  23. r."storeName",
  24. r."plannedDate",
  25. r."completedAt",
  26. r."incomeMonth",(r.amount+COALESCE(c.amount,0))::numeric(12,2) AS amount,
  27. CASE WHEN c."objectId" IS NULL THEN r.status ELSE 'ineligible' END AS status,
  28. r."exception",
  29. r."createdAt",
  30. CASE WHEN c."objectId" IS NULL THEN r."ineligibleReason" ELSE 'corrected_overdue' END AS "ineligibleReason",
  31. r.amount AS "originalAmount",
  32. c."objectId" AS "correctionId",
  33. c.reason AS "correctionReason",
  34. c.amount AS "correctionAmount",
  35. c."adjustmentBatchId"
  36. FROM "ReviewReward" r LEFT JOIN "ReviewRewardCorrection" c ON c.company=r.company AND c."rewardId"=r."objectId";
  37. COMMIT;