Skip to content
pgcalendar

pgcalendar

pgcalendar : Recurring calendar, schedule, and exception management for PostgreSQL

Overview

ID Extension Package Version Category License Language
3890
pgcalendar
pgcalendar
1.1.0
TYPE
MIT
SQL
Attribute Has Binary Has Library Need Load Has DDL Relocatable Trusted
----d--
No
No
No
Yes
no
no
Relationships
Schemas pgcalendar
See Also
periods
temporal_tables
timeseries
pg_cron

Deb/RPM recipes patch the stale upstream 1.1.0 control metadata (default_version/module_pathname).

Packages

Type Repo Version PG Major Compatibility Package Pattern Dependencies
EXT
PIGSTY
1.1.0
18
17
16
15
14
pgcalendar -
RPM
PIGSTY
1.1.0
18
17
16
15
14
pgcalendar_$v -
DEB
PIGSTY
1.1.0
18
17
16
15
14
postgresql-$v-pgcalendar -
Linux / PG PG18 PG17 PG16 PG15 PG14
el8.x86_64
PIGSTY 1.1.0
PIGSTY 1.1.0
PIGSTY 1.1.0
PIGSTY 1.1.0
PIGSTY 1.1.0
el8.aarch64
PIGSTY 1.1.0
PIGSTY 1.1.0
PIGSTY 1.1.0
PIGSTY 1.1.0
PIGSTY 1.1.0
el9.x86_64
PIGSTY 1.1.0
PIGSTY 1.1.0
PIGSTY 1.1.0
PIGSTY 1.1.0
PIGSTY 1.1.0
el9.aarch64
PIGSTY 1.1.0
PIGSTY 1.1.0
PIGSTY 1.1.0
PIGSTY 1.1.0
PIGSTY 1.1.0
el10.x86_64
PIGSTY 1.1.0
PIGSTY 1.1.0
PIGSTY 1.1.0
PIGSTY 1.1.0
PIGSTY 1.1.0
el10.aarch64
PIGSTY 1.1.0
PIGSTY 1.1.0
PIGSTY 1.1.0
PIGSTY 1.1.0
PIGSTY 1.1.0
d12.x86_64
PIGSTY 1.1.0
PIGSTY 1.1.0
PIGSTY 1.1.0
PIGSTY 1.1.0
PIGSTY 1.1.0
d12.aarch64
PIGSTY 1.1.0
PIGSTY 1.1.0
PIGSTY 1.1.0
PIGSTY 1.1.0
PIGSTY 1.1.0
d13.x86_64
PIGSTY 1.1.0
PIGSTY 1.1.0
PIGSTY 1.1.0
PIGSTY 1.1.0
PIGSTY 1.1.0
d13.aarch64
PIGSTY 1.1.0
PIGSTY 1.1.0
PIGSTY 1.1.0
PIGSTY 1.1.0
PIGSTY 1.1.0
u22.x86_64
PIGSTY 1.1.0
PIGSTY 1.1.0
PIGSTY 1.1.0
PIGSTY 1.1.0
PIGSTY 1.1.0
u22.aarch64
PIGSTY 1.1.0
PIGSTY 1.1.0
PIGSTY 1.1.0
PIGSTY 1.1.0
PIGSTY 1.1.0
u24.x86_64
PIGSTY 1.1.0
PIGSTY 1.1.0
PIGSTY 1.1.0
PIGSTY 1.1.0
PIGSTY 1.1.0
u24.aarch64
PIGSTY 1.1.0
PIGSTY 1.1.0
PIGSTY 1.1.0
PIGSTY 1.1.0
PIGSTY 1.1.0
u26.x86_64
PIGSTY 1.1.0
PIGSTY 1.1.0
PIGSTY 1.1.0
PIGSTY 1.1.0
PIGSTY 1.1.0
u26.aarch64
PIGSTY 1.1.0
PIGSTY 1.1.0
PIGSTY 1.1.0
PIGSTY 1.1.0
PIGSTY 1.1.0
Package Version OS ORG SIZE File URL
pgcalendar_18 1.1.0 el8.x86_64 pigsty 13.5 KiB pgcalendar_18-1.1.0-1PIGSTY.el8.x86_64.rpm
pgcalendar_18 1.1.0 el8.aarch64 pigsty 13.5 KiB pgcalendar_18-1.1.0-1PIGSTY.el8.aarch64.rpm
pgcalendar_18 1.1.0 el9.x86_64 pigsty 13.5 KiB pgcalendar_18-1.1.0-1PIGSTY.el9.x86_64.rpm
pgcalendar_18 1.1.0 el9.aarch64 pigsty 13.4 KiB pgcalendar_18-1.1.0-1PIGSTY.el9.aarch64.rpm
pgcalendar_18 1.1.0 el10.x86_64 pigsty 13.6 KiB pgcalendar_18-1.1.0-1PIGSTY.el10.x86_64.rpm
pgcalendar_18 1.1.0 el10.aarch64 pigsty 13.6 KiB pgcalendar_18-1.1.0-1PIGSTY.el10.aarch64.rpm
postgresql-18-pgcalendar 1.1.0 d12.x86_64 pigsty 7.3 KiB postgresql-18-pgcalendar_1.1.0-1PIGSTY~bookworm_amd64.deb
postgresql-18-pgcalendar 1.1.0 d12.aarch64 pigsty 7.3 KiB postgresql-18-pgcalendar_1.1.0-1PIGSTY~bookworm_arm64.deb
postgresql-18-pgcalendar 1.1.0 d13.x86_64 pigsty 7.3 KiB postgresql-18-pgcalendar_1.1.0-1PIGSTY~trixie_amd64.deb
postgresql-18-pgcalendar 1.1.0 d13.aarch64 pigsty 7.3 KiB postgresql-18-pgcalendar_1.1.0-1PIGSTY~trixie_arm64.deb
postgresql-18-pgcalendar 1.1.0 u22.x86_64 pigsty 7.4 KiB postgresql-18-pgcalendar_1.1.0-1PIGSTY~jammy_amd64.deb
postgresql-18-pgcalendar 1.1.0 u22.aarch64 pigsty 7.4 KiB postgresql-18-pgcalendar_1.1.0-1PIGSTY~jammy_arm64.deb
postgresql-18-pgcalendar 1.1.0 u24.x86_64 pigsty 7.4 KiB postgresql-18-pgcalendar_1.1.0-1PIGSTY~noble_amd64.deb
postgresql-18-pgcalendar 1.1.0 u24.aarch64 pigsty 7.4 KiB postgresql-18-pgcalendar_1.1.0-1PIGSTY~noble_arm64.deb
postgresql-18-pgcalendar 1.1.0 u26.x86_64 pigsty 7.4 KiB postgresql-18-pgcalendar_1.1.0-1PIGSTY~resolute_amd64.deb
postgresql-18-pgcalendar 1.1.0 u26.aarch64 pigsty 7.4 KiB postgresql-18-pgcalendar_1.1.0-1PIGSTY~resolute_arm64.deb

Source

pig build pkg pgcalendar;		# build rpm/deb

Install

Make sure PGDG and PIGSTY repo available:

pig repo add pgsql -u   # add both repo and update cache

Install this extension with pig:

pig install pgcalendar;		# install via package name, for the active PG version

pig install pgcalendar -v 18;   # install for PG 18
pig install pgcalendar -v 17;   # install for PG 17
pig install pgcalendar -v 16;   # install for PG 16
pig install pgcalendar -v 15;   # install for PG 15
pig install pgcalendar -v 14;   # install for PG 14

Create this extension with:

CREATE EXTENSION pgcalendar;

Usage

Sources: README, repo

pgcalendar is a recurring calendar extension for PostgreSQL. The upstream README models recurring schedules with four main pieces: events, schedules, exceptions, and generated projections.

Create events and schedules

CREATE EXTENSION pgcalendar;

INSERT INTO pgcalendar.events (name, description, category)
VALUES ('Daily Standup', 'Team daily standup meeting', 'meeting');

INSERT INTO pgcalendar.schedules (
    event_id, start_date, end_date, recurrence_type, recurrence_interval
) VALUES (
    1, '2024-01-01 09:00:00', '2024-01-07 23:59:59', 'daily', 1
);

The README shows daily, weekly, monthly, and yearly recurrences, with extra columns such as recurrence_day_of_week, recurrence_day_of_month, and recurrence_month depending on the recurrence type.

Query projections

SELECT * FROM pgcalendar.get_event_projections(
    1, '2024-01-01'::date, '2024-01-07'::date
);

SELECT * FROM pgcalendar.get_events_detailed(
    '2024-01-01'::date, '2024-01-31'::date
);

The README also uses the pgcalendar.event_calendar view as a quick verification target.

Exceptions and schedule transitions

INSERT INTO pgcalendar.exceptions (
    schedule_id, exception_date, exception_type, notes
) VALUES (
    1, '2024-01-15', 'cancelled', 'Holiday - meeting cancelled'
);

SELECT pgcalendar.transition_event_schedule(
    p_event_id := 1,
    p_new_start_date := '2024-01-15 09:00:00',
    p_new_end_date := '2024-01-31 23:59:59',
    p_recurrence_type := 'weekly',
    p_recurrence_interval := 2,
    p_recurrence_day_of_week := 1,
    p_description := 'Changed to bi-weekly schedule'
);

Use pgcalendar.check_schedule_overlap(...) before adding a new schedule when you need to verify that date ranges do not overlap.

Caveat

The upstream README is the only user-facing documentation currently published. It gives clear table and function examples, but it does not add separate versioned release notes for user-visible SQL changes.

Last updated on