What does this let me do that can't be achieved with "regular PostgreSQL without the extension"?
What does this let me do that can't be achieved with "regular PostgreSQL without the extension"?
I guess depends on your needs but I do think I need to investigate timeseries more to see if it'd help us.
Postgres is just a beast.
I have no doubt sql can do it without too much trouble, but for a time series this is really an instant operation, even on a small server.
A time series will first find the relevant series and then simply for-loop through all the data. It takes just a handful of milliseconds.
Sql will need to join with other tables, traverse index, load wider columns. And you better have set the correct index first, in your case you also spent extra effort on partitioning tables. Likely you are also using a beefy server.
> and just contains tons of data coming in from sensors.
it's also desired to, on the fly, deal with missing sensor data, clearly bad sensor data, identify and smooth spikes in data (weird glitch or actual transient spike of interest), apply a variety of running filters; centred average is basic, parameterised Savitzky–Golay filters provide "beefed up" better than running average handling .. and there are more.
It's not just better access to sequential data that makes a dedicated time series engine desirable, it's the suite of time (and geo spatial) series operations that close the deal.
CREATE TABLE logs (
id SERIAL PRIMARY KEY,
log_time TIMESTAMP NOT NULL,
message TEXT
) PARTITION BY RANGE (log_time);
Why won't this work on stock PostgreSQL?This also isn't typical time-series data, which generally stores numbers. Supposing you had a column "value INTEGER" as well, how do you do something like the following (pseudo-SQL)?
SELECT AVG(value) AS avg_value FROM logs GROUP BY INTERVAL '5m'
Which should output rows like the following, even if the data were reported much more frequently than every 5 minutes: log_time | avg_value
2024-05-20T00:00:00Z | 10.3
2024-05-20T00:05:00Z | 7.8
2024-05-20T00:10:00Z | 16.1 SELECT date_bin('5 minutes', log_time, '2000-01-01') log_time,
AVG(value) avg_value
FROM logs GROUP BY 1