generate_series() with TSTZRANGE

From: Wolfe Whalen <wolfe_whalen(at)fastmail(dot)fm>
To: pgsql-sql(at)postgresql(dot)org
Subject: generate_series() with TSTZRANGE
Date: 2012-09-12 23:53:10
Message-ID: 1347493990.25573.140661127188777.1658803C@webmail.messagingengine.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-sql

Hi everyone!

I'm new around here, so please forgive me if this is a bit trivial. It
seems that generate_series() won't generate time stamp ranges. I
googled around and didn't see anything handy, so I wrote this out and
thought I'd share and see if perhaps there was a better way to do it:

SELECT tstzrange((lag(a) OVER()), a, '[)')
FROM generate_series('2012-09-16 12:00:00'::timestamp, '2012-09-17
12:00:00', '1 hour')
AS a OFFSET 1;

Basically, it's generating a series of time stamps one hour apart, then
using the previous record and the current record to construct the
TSTZRANGE value. It's offset 1 to skip the first record, since there is
no previous record to pair with it.

If you were looking at Josh Berkus' example at
http://lwn.net/Articles/497069/ you might use it like this to generate
data for testing and experimentation:

INSERT INTO room_reservations
SELECT 'F104', 'John', 'Another Talk',
tstzrange((lag(a) OVER()), a, '[)')
FROM generate_series('2012-09-16 12:00:00'::timestamp, '2012-09-17
12:00:00', '1 hour')
AS a OFFSET 1;

Thanks!

--
Wolfe Whalen
wolfe(at)quios(dot)net

Responses

Browse pgsql-sql by date

  From Date Subject
Next Message BeeBee 2012-09-13 06:49:49 Problem with committing the update
Previous Message Rodrigo Rosenfeld Rosas 2012-09-12 23:20:07 Re: ORDER BY COLUMN_A, (COLUMN_B or COLUMN_C), COLUMN_D