TimescaleDB中的Segment by需要使用外键id进行切分

Segment by in TimescaleDB requires foreign key id to be used for segmenting

我正在处理以下用例: 大量用户,每个用户都有自己独立的时间序列。时间序列中的每个测量都是使用具有一些伴随元数据的设备进行的。

为了为此创建一个 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.

为什么我必须使用外键进行分段?还有其他更好的方法来完成我想在这里做的事情吗?

这里是时标工程师。压缩的限制之一是我们不能将外部表的删除级联到压缩的超表,除非它是非压缩列。按列分段以非压缩形式存储。这就是限制外键约束背后的原因。