Sum up network events by type, interval and network
Axel Rau <axel.rau@chaos1.de>
From: Axel Rau <Axel.Rau@Chaos1.DE>
To: pgsql-sql@postgresql.org
Date: 2010-11-16T16:29:08Z
Lists: pgsql-sql
Hi all,
For each event of each type in each interval I want to compute the sum
of events referencing the same relayNet (via host) and insert/update 1
row in SumOfEvents.
All intervals start at a time, minimum 5 minutes in the past, rounded
down modulo 5 minutes like:
SELECT DATE_TRUNC('MINUTES', NOW () - ('0:' || (SELECT
(EXTRACT('MINUTE' FROM NOW())::INT % 5) + 5 ) || ':0')::INTERVAL);
CREATE TABLE host (
id SERIAL PRIMARY KEY,
relayNetFK INT
REFERENCES relayNet
ON DELETE CASCADE
)
CREATE TABLE event (
id SERIAL PRIMARY KEY,
type CHAR NOT NULL
CHECK ( type IN ('C', 'A', 'D', 'S', 'R') ),
timeOfEvent timestamp NOT NULL
DEFAULT NOW(),
hostfk INT NOT NULL
REFERENCES host
ON DELETE CASCADE
)
CREATE TABLE relayNet (
id SERIAL PRIMARY KEY,
name TEXT NOT NULL UNIQUE
)
CREATE TYPE eventIntervals AS ENUM ('5m', '30m', '3h', '24h', '30d');
CREATE TABLE SumOfEvents (
id SERIAL PRIMARY KEY,
type CHAR NOT NULL
CHECK ( type IN ('C', 'A', 'D', 'S', 'R') ),
startTime timestamp NOT NULL,
interval eventIntervals NOT NULL,
value INT, -- sum
relayNetFK INT
REFERENCES relayNet
ON DELETE CASCADE,
UNIQUE (type, interval, relayNetFK)
)
Can this be done w/o procedural code?
Any hints?
Thanks, Axel
---
axel.rau@chaos1.de PGP-Key:29E99DD6 +49 151 2300 9283 computing @
chaos claudius