2

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

IEE1394
  • 1,181
  • 13
  • 33

1 Answers1

2

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);
k_rus
  • 2,959
  • 1
  • 19
  • 31
  • thx for the answer .. so in that case i have to do ```SELECT create_hypertable('mytable', 'start','device_id',1, migrate_data => true);``` – IEE1394 Mar 31 '21 at 14:26
  • @IEE1394 it is better to not use space dimension in such case, i.e., `SELECT create_hypertable('mytable', 'start',migrate_data => true)` – k_rus Mar 31 '21 at 16:53
  • Is it possible to alter the space dimension out? – IEE1394 Mar 31 '21 at 22:16
  • No, I don't see that such function is available. It is only possible to add a dimension. – k_rus Apr 01 '21 at 06:50