【问题标题】:Segment by in TimescaleDB requires foreign key id to be used for segmentingTimescaleDB 中的 Segment by 需要使用外键 id 进行分段
【发布时间】: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


    【解决方案1】:

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-11
    • 2011-09-12
    • 2016-02-04
    • 2019-10-26
    • 1970-01-01
    • 2022-11-22
    • 2018-12-26
    相关资源
    最近更新 更多