CREATE INDEX ... WITH (timescaledb.transaction_per_chunk, ...);
此选项扩展了 CREATE INDEX
,使其能够为每个在其上创建索引的数据块使用单独的事务,而不是为整个超表使用单个事务。这允许在 CREATE INDEX
命令的大部分持续时间内并发执行 INSERT
和其他操作。当在单个数据块上创建索引时,它的功能就像在该数据块上调用了常规的 CREATE INDEX
一样,但是其他数据块完全不受阻塞。
注意
此版本的 CREATE INDEX
可以用作 CREATE INDEX CONCURRENTLY
的替代方案,后者目前在超表上不受支持。
警告
如果操作在进行到一半时失败,则可能不会在所有超表数据块上创建索引。如果发生这种情况,超表的根表上的索引将被标记为无效。您可以通过在超表上运行 \d+
来检查这一点。该索引仍然有效,并且会在新数据块上创建,但是如果您想确保所有数据块都有索引副本,请删除并重新创建它。
您还可以使用以下查询来查找所有无效索引
SELECT * FROM pg_index i WHERE i.indisvalid IS FALSE;
创建匿名索引
CREATE INDEX ON conditions(time, device_id)WITH (timescaledb.transaction_per_chunk);
或者
CREATE INDEX ON conditions USING brin(time, location)WITH (timescaledb.transaction_per_chunk);
关键词
在此页面上发现问题?报告问题 或 在 GitHub 上编辑此页面。