RRules (yes handling RSCALE) using only PL/pgSQL

https://news.ycombinator.com/rss Hits: 5
Summary

Pure PL/pgSQL implementation of iCalendar RRULE (RFC 5545) for PostgreSQL. No C extensions, no compilation, works everywhere. Overview This library provides complete RRULE recurrence calculation functionality using pure PL/pgSQL. Use this implementation for all environments (local, development, staging, production) to ensure consistency. Key Features: ✅ No C extensions required - Pure PL/pgSQL, works on any PostgreSQL - Pure PL/pgSQL, works on any PostgreSQL ✅ Full timezone support with DST handling - Wall-clock time preserved ("10 AM stays 10 AM" across DST transitions) - Wall-clock time preserved ("10 AM stays 10 AM" across DST transitions) ✅ Consistent everywhere - Same implementation across all environments - Same implementation across all environments ✅ Production-ready - Comprehensive test suite with 187 tests (including table operation integration tests) - Comprehensive test suite with 187 tests (including table operation integration tests) ✅ RFC 5545 & RFC 7529 compliant - Supports standard RRULE patterns plus SKIP/RSCALE - Supports standard RRULE patterns plus SKIP/RSCALE ✅ 50-75x faster than Node.js - Excellent performance without compilation - Excellent performance without compilation ✅ Works on managed services - AlloyDB, RDS, Azure Database for PostgreSQL Why This Approach? Query Engine Integration Computation where your data lives delivers performance impossible with external processing: Set-based operations : JOIN recurrence rules against events, bookings, or any table without data transfer : JOIN recurrence rules against events, bookings, or any table without data transfer Native WHERE/aggregation : Filter by occurrence dates, COUNT occurrences, GROUP BY - all in SQL : Filter by occurrence dates, COUNT occurrences, GROUP BY - all in SQL Batch processing : Process 100+ schedules in a single query without round trips : Process 100+ schedules in a single query without round trips Memory-efficient streaming : SETOF returns results incrementally, not all ...

First seen: 2025-11-22 01:11

Last seen: 2025-11-22 05:12