Expand description
TimescaleDB
§docker
services:
timescaledb:
command: postgres
-c config_file=/etc/postgresql/postgresql.conf
-c hba_file=/etc/postgresql/pg_hba.conf
container_name: timescaledb
healthcheck:
test: pg_isready -d db_prod
interval: 30s
timeout: 60s
retries: 5
start_period: 80s
hostname: timescaledb
image: timescale/timescaledb:2.12.2-pg15
networks:
- network_internal
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
ports:
- "5432:5432"
profiles:
- dev
- target
volumes:
- ./timescaledb/postgresql.conf:/etc/postgresql/postgresql.conf
- ./timescaledb/pg_hba.conf:/etc/postgresql/pg_hba.conf
- ./timescaledb/init.sql:/docker-entrypoint-initdb.d/init.sql
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
networks:
network_internal:
§postgresql.conf
listen_addresses = '*'
max_locks_per_transaction = 10000
§pg_hba.conf
local all all trust
host all all 0.0.0.0/0 trust
§init.sql
CREATE DATABASE db_conf;
CREATE DATABASE db_data;
\c db_data
CREATE EXTENSION IF NOT EXISTS timescaledb;
-- enum agg_type
CREATE TYPE agg_type AS ENUM (
'curr',
'first',
'inc',
'sum',
'mean',
'min',
'max'
);
-- table raw
CREATE TABLE raw (
ts TIMESTAMPTZ NOT NULL,
entity TEXT NOT NULL,
attr TEXT NOT NULL,
value DOUBLE PRECISION NULL,
agg AGG_TYPE NOT NULL,
aggts TIMESTAMPTZ NULL,
aggnext AGG_TYPE[] NULL,
UNIQUE (ts, entity, attr, agg)
);
SELECT create_hypertable(
'raw', 'ts',
chunk_time_interval => INTERVAL '24 hours'
);
ALTER TABLE raw SET (
timescaledb.compress,
timescaledb.compress_segmentby='entity, attr, agg'
);
SELECT add_compression_policy('raw', INTERVAL '100000 hours');
-- agg_30min
CREATE TABLE agg_30min (LIKE raw);
-- create databases for test
CREATE DATABASE db_data_test WITH TEMPLATE db_data;
CREATE DATABASE db_conf_test WITH TEMPLATE db_conf;