Sum*_*Das 3 postgresql timescaledb
问题是,当我想使用 created_at 表字段将简单的 Postgresql 表转换为 timescaledb 表或 hypertable 进行索引时,它将显示此错误。表名是订单。这里 cas_admin_db_new 是数据库名称。
我已经尝试了所有可能的方法。如下所示,但订单表不会转换为超表。
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_...
Run Code Online (Sandbox Code Playgroud)
时标人在这里。问题是您的架构可能将其他一些列列为主键(或 UNIQUE 索引)。
TimescaleDB 要求任何 PK/唯一索引包括所有分区键,在您的情况下是 created_at。
那是因为我们做了这种繁重的底层分区,并且不想构建全局查找结构来确保我们已经用于分区之外的唯一性。
更多信息:
小智 6
您需要删除表中当前的主键并创建新的复合主键,如下所示:
ALTER TABLE table_name ADD PRIMARY KEY (id, created_at);
Run Code Online (Sandbox Code Playgroud)
但有一个问题:不幸的是 ActiveRecord 不支持复合主键。
| 归档时间: |
|
| 查看次数: |
4740 次 |
| 最近记录: |