迁移 Postgresql table 到时间刻度数据库

Migration Postgresql table to timescale db

我有 table

CREATE TABLE mytable
(
    device_id bigint       NOT NULL,
    start    TIMESTAMP WITHOUT TIME ZONE,
    level    varchar(255) NOT NULL,
    amount   integer
);

我想将它迁移到 hypertable 像那样:

SELECT create_hypertable('mytable', 'start','device_id', migrate_data => true);

但我得到一个错误

ERROR:  invalid number of partitions for dimension "device_id"
HINT:  A closed (space) dimension must specify between 1 and 32767 partitions.
SQL state: 22023

我做错了什么?我有类似的 tables,它可以正常工作。

在 azure postgresql 上使用 Postgresql 11 和时间刻度数据库 1.7.4 运行。 提前致谢

问候 奥利弗

该错误与数据迁移无关。是因为指定了space维数device_id而没有指定维数。来自 create_hypertable 的文档:

| `partitioning_column` | Name of an additional column to partition by. |
| `number_partitions` | Number of hash partitions to use for `partitioning_column`. Must be > 0. Default is the number of `data_nodes`. |

比如create hypertable语句可以固定为

SELECT create_hypertable('mytable', 'start','device_id', 4, migrate_data => true);

其中分区数的幻数 4 需要很好的推理。

实际上很少需要 space 维度,根据同一文档中的最佳实践,通常情况下不推荐:

Space partitions: In most cases, it is advised for users not to use space partitions. However, if you create a distributed hypertable, it is important to create space partitioning, see create_distributed_hypertable. The rare cases in which space partitions may be useful for non-distributed hypertables are described in the add_dimension section.

因此最好使用以下语句而不指定 space 分区:

SELECT create_hypertable('mytable', 'start', migrate_data => true);