Migration Postgresql table to timescale db

Viewed 1708

i have that table

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

and i want to migrate it to a hypertable like that:

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

but i get an error

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

What am i doing wrong? I had similar tables, where it worked without an issue.

Using Postgresql 11 and timescale db 1.7.4 running on azure postgresql. Thx in advance

Regards Oliver

1 Answers

The error is not related to migration of data. It is due to specified space dimension device_id without specifying the number of dimensions. From the documentation of 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`. |

For example, the create hypertable statement can be fixed to

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

Where the magic number 4 for number of partitions requires good reasoning.

Actually space dimension is rarely needed and according to the best practice in the same documentation not recommended in usual case:

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.

So it might be better to use the following statement without specifying space partition:

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