/pg_rrule

RRULE data type for PostgreSQL

Primary LanguageCMIT LicenseMIT

pg_rrule

Docker Image

docker.pkg.github.com/ondrej-111/pg_rrule/postgres:11.6-alpine-dev

Pull image

docker pull docker.pkg.github.com/ondrej-111/pg_rrule/postgres:11.6-alpine-dev

Use as base image

FROM docker.pkg.github.com/ondrej-111/pg_rrule/postgres:11.6-alpine-dev

Usage

Get RRULE parameter get_PARAMNAME.

Example. Get freq param:

 SELECT get_freq('FREQ=WEEKLY;INTERVAL=1;WKST=MO;UNTIL=20200101T045102Z');
  get_freq
 ----------
  WEEKLY
 (1 row)

Example. Get byday param:

 SELECT get_byday('FREQ=WEEKLY;INTERVAL=1;WKST=MO;UNTIL=20200101T045102Z;BYDAY=MO,TH,SU');
  get_byday
 -----------
  {2,5,1}
 (1 row)

Example. Expand RRULE with timezone:

 SELECT * FROM
     unnest(
         get_occurrences('FREQ=WEEKLY;INTERVAL=1;WKST=MO;UNTIL=20200101T045102Z;BYDAY=SA;BYHOUR=10;BYMINUTE=51;BYSECOND=2',
             '2019-12-07 10:51:02+00'::timestamp with time zone)
     );

          unnest
 ------------------------
  2019-12-07 10:51:02+00
  2019-12-14 10:51:02+00
  2019-12-21 10:51:02+00
  2019-12-28 10:51:02+00
 (4 rows)

Example. Expand RRULE without timezone:

 SELECT * FROM
     unnest(
         get_occurrences('FREQ=WEEKLY;INTERVAL=1;WKST=MO;UNTIL=20200101T045102Z;BYDAY=SA;BYHOUR=10;BYMINUTE=51;BYSECOND=2',
             '2019-12-07 10:51:02'::timestamp)
     );

        unnest
 ---------------------
  2019-12-07 10:51:02
  2019-12-14 10:51:02
  2019-12-21 10:51:02
  2019-12-28 10:51:02
 (4 rows)

Simple building:

cd src/
qmake pg_rrule.pro
make

Simple install (Linux):

cp libpg_rrule.so /usr/lib/postgresql/pg_rrule.so
cp pg_rrule.control /usr/share/postgresql/extension/
cp sql/pg_rrule.sql /usr/share/postgresql/extension/pg_rrule--0.2.0.sql

Simple install (OS X):

#TODO

Install extension (Postgresql):

CREATE EXTENSION pg_rrule;

Building (A long description (not tested))

To build it, just do this:

make
make installcheck
make install

If you encounter an error such as:

"Makefile", line 8: Need an operator

You need to use GNU make, which may well be installed on your system as gmake:

gmake
gmake install
gmake installcheck

If you encounter an error such as:

make: pg_config: Command not found

Be sure that you have pg_config installed and in your path. If you used a package management system such as RPM to install PostgreSQL, be sure that the -devel package is also installed. If necessary tell the build process where to find it:

env PG_CONFIG=/path/to/pg_config make && make installcheck && make install

And finally, if all that fails (and if you're on PostgreSQL 8.1 or lower, it likely will), copy the entire distribution directory to the contrib/ subdirectory of the PostgreSQL source tree and try it there without pg_config:

env NO_PGXS=1 make && make installcheck && make install

If you encounter an error such as:

ERROR:  must be owner of database regression

You need to run the test suite using a super user, such as the default "postgres" super user:

make installcheck PGUSER=postgres

Once pg_rrule is installed, you can add it to a database. If you're running PostgreSQL 9.1.0 or greater, it's a simple as connecting to a database as a super user and running:

CREATE EXTENSION pg_rrule;

If you've upgraded your cluster to PostgreSQL 9.1 and already had pg_rrule installed, you can upgrade it to a properly packaged extension with:

CREATE EXTENSION pg_rrule FROM unpackaged;

For versions of PostgreSQL less than 9.1.0, you'll need to run the installation script:

psql -d mydb -f /path/to/pgsql/share/contrib/pg_rrule.sql

If you want to install pg_rrule and all of its supporting objects into a specific schema, use the PGOPTIONS environment variable to specify the schema, like so:

PGOPTIONS=--search_path=extensions psql -d mydb -f pg_rrule.sql

Dependencies

The pg_rrule has libical as dependency.

Copyright and License

Copyright (c) 2014 petropavel.

Debug

  1. Go inside container like postgres user
    • psql
    • SELECT pg_backend_pid(); -> will output PID
  2. Go inside container like root user
    • lldb -p {PID}