2025/11/13 14:33 RRules (yes handling RSCALE) using only PL/pgSQL

やっほー、ロボ子!今日のITニュースは、PostgreSQL用のiCalendar RRULE実装「rrule_plpgsql」じゃ!

博士、こんにちは。rrule_plpgsqlですか。iCalendarの繰り返しルールをPostgreSQLで扱えるようになるのですね。

そうなんじゃ!しかも、これ、純粋なPL/pgSQLで実装されてるから、C拡張とかコンパイルが要らないらしいぞ!

それはすごいですね!環境を選ばずに動かせるのは大きなメリットです。

じゃろ?記事によると、ウォールクロック時間を保持して、DST(夏時間)も考慮したタイムゾーンを完全にサポートしてるらしいぞ。

タイムゾーン対応は重要ですね。特に国際的なサービスでは必須です。

しかもな、標準的なRRULEパターンに加えて、SKIP/RSCALEもサポートしてて、RFC 5545 & RFC 7529に準拠してるらしいぞ。すごくない?

RFCに準拠しているのは信頼性が高いですね。SKIPやRSCALEは、具体的にどのような場面で役立つのでしょうか?

SKIPは無効な日付の処理方法を指定できるんじゃ。例えば、存在しない日付をスキップしたり、前後の日付に調整したりできるぞ。RSCALEはカレンダーシステムを指定するものじゃな。今はGREGORIAN(グレゴリオ暦)のみサポートみたいじゃが。

なるほど、柔軟な繰り返しルールの設定ができるのですね。パフォーマンスはどうなのでしょうか?

それがすごいんじゃ!コンパイルなしで、Node.jsよりも50-75倍高速らしいぞ!

そんなに速いんですか!データベース内で直接計算できるのが大きいのでしょうか。

その通り!クエリエンジンとの統合で、データがある場所で計算できるから、データ転送のコストがなくなるんじゃ。イベントとか予約のテーブルに対して、繰り返しルールを直接結合できるのも便利じゃな。

発生日でのフィルタリングや、発生回数のカウントもSQLでできるんですね。これは便利そうです。

じゃろ?しかも、SETOFを使って結果を段階的に返すから、メモリ効率も良いらしいぞ。ストリーミング処理にも向いてるんじゃ。

インストールも簡単そうですね。npmかSQLでできるみたいですね。

そうそう。頻度も、DAILY、WEEKLY、MONTHLY、YEARLYは常に有効で、HOURLY、MINUTELY、SECONDLYもオプションで使えるみたいじゃ。

修飾子もたくさんありますね。COUNT、UNTIL、INTERVAL、BYDAYなど、細かく設定できそうです。

タイムゾーンもちゃんとサポートしてるし、至れり尽くせりじゃな。エラーが出た時の対処法も書いてあるし、親切設計じゃ。

PostgreSQL 12以上が必要とのことですが、それ以外に依存関係がないのも良いですね。

ほんとじゃな。よし、ロボ子、今度うちのスケジュール管理システムに組み込んでみようかの。

いいですね!ぜひ試してみたいです。博士、今日はありがとうございました。

どういたしまして。最後に一つ、ロボ子。このrrule_plpgsql、あまりに速すぎて、時間が止まって見えるかもしれんぞ…って、それは言い過ぎかの?
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。