如何解决TimescaleDB / PostgreSQL:创建超表时如何使用唯一约束?
我正在尝试在PostgreSQL中创建一个包含大量数据的表,因此,我想使用时标超表,如下例所示。
CREATE TABLE "datapoints" (
"tstz" timestamptz NOT NULL,"id" bigserial UNIQUE NOT NULL,"entity_id" bigint NOT NULL,"value" real NOT NULL,PRIMARY KEY ("id","tstz","entity_id")
);
SELECT create_hypertable('datapoints','tstz');
但是,这将引发错误-如下所示。据我所知,由于在超表中不允许使用唯一约束,所以会出现错误,但是我确实需要唯一性。那么,有没有人对如何解决或解决它有想法?
ERROR: cannot create a unique index without the column "tstz" (used in partitioning)
SQL state: TS103
解决方法
没有办法避免这种情况。
TimescaleDB使用PostgreSQL分区,并且不可能在不包含分区键的分区表上具有主键或唯一约束。
其背后的原因是分区表上的索引由分区上的各个索引组成(这些分区是分区索引的分区)。现在,保证这种分区索引唯一性的唯一方法是在定义中隐含唯一性,只有当分区键是索引的一部分时,这种情况才会发生。
因此,您要么必须牺牲id
的唯一性约束(如果使用序列,这将非常有用),或者您必须不进行分区。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。