【发布时间】:2021-08-14 11:15:27
【问题描述】:
我正在处理以下用例: 大量用户,每个用户都有自己独立的时间序列。时间序列中的每个测量都是使用带有一些附带元数据的设备进行的。
要为此创建一个 TimescaleDB 超表,我做了以下操作:
CREATE TABLE devices (
id VARCHAR NOT NULL,
brand VARCHAR,
model VARCHAR,
serial_number VARCHAR,
mac VARCHAR,
firmware VARCHAR,
UNIQUE (id),
PRIMARY KEY (id)
);
CREATE TABLE measurements (
time TIMESTAMPTZ NOT NULL,
measurement_location VARCHAR,
measurement_value DOUBLE PRECISION NOT NULL,
device_id, VARCHAR NOT NULL,
customer_id VARCHAR NOT NULL,
FOREIGN KEY (device_id) REFERENCES devices (id)
);
SELECT create_hypertable('measurements', 'time');
ALTER TABLE measurements SET (
timescaledb.compress,
timescaledb.compress_segmentby='customer_id'
);
我想按客户 ID 进行细分 - 因为用户的所有测量值通常都会被查询。
但是,当我这样做时,我收到以下错误:
ERROR: column "device_id" must be used for segmenting
DETAIL: The foreign key constraint "measurements_device_id_fkey" cannot be enforced with the given compression configuration.
为什么我必须使用外键进行分段?还有其他更好的方法来完成我想要在这里做的事情吗?
【问题讨论】:
标签: postgresql time-series timescaledb