如何使用 created_at 将简单的 postgresql table 转换为 hypertable 或时间刻度数据库 table

How to convert a simple postgresql table to hypertable or timescale db table using created_at for indexing

问题是当我想将一个简单的 Postgresql table 转换为 timescaledb table 或 hypertable 时使用 created_at table 字段进行索引然后它会显示这个错误。 table 名称是订单。这里 cas_admin_db_new 是数据库名称。

所有可能的方法我都试过了。这是波纹管,但订单 table 不会转换为 hypertable.

SELECT create_hypertable('orders','created_at', chunk_time_interval => 6040800000000);
ERROR: cannot create a unique index without the column "created_at" (used in partitioning)

SELECT create_hypertable('public.orders','created_at', chunk_time_interval => 6040800000000);
ERROR: cannot create a unique index without the column "created_at" (used in partitioning)

cas_admin_db_new=# SELECT create_hypertable('public.orders','created_at', chunk_time_interval => 6040800000000, created_default_indexes=>FALSE);
ERROR: function create_hypertable(unknown, unknown, chunk_time_interval => bigint, created_default_indexes => boolean) does not exist

cas_admin_db_new=# SELECT create_hypertable('"ORDER"','created_at', chunk_time_interval => 6040800000000);
ERROR: relation "ORDER" does not exist
LINE 1: SELECT create_hypertable('"ORDER"','created_at', chunk_time_...

时间刻度人在这里。问题是您的架构可能将其他一些列列为主键(或 UNIQUE 索引)。

TimescaleDB 要求任何 PK/unique 索引包含所有分区键,在您的情况下,created_at。

那是因为我们进行了这种繁重的底层分区,并且不想构建全局查找结构来确保我们已经用于分区的结构之外的唯一性。

更多信息:

https://docs.timescale.com/timescaledb/latest/how-to-guides/schema-management/indexing/##best-practices

您需要将当前主键放在 table 上,然后像这样创建新的复合主键:

ALTER TABLE table_name ADD PRIMARY KEY (id, created_at);

但是有问题:不幸的是 ActiveRecord 不支持复合主键。