警告
TimescaleDB v2.13 是最后一个为 PostgreSQL 版本 13、14 和 15 提供多节点支持的版本。
您可以使用 INSERT
语句将数据插入到分布式超表。语法与标准超表或 PostgreSQL 表的语法相同。例如
INSERT INTO conditions(time, location, temperature, humidity)VALUES (NOW(), 'office', 70.0, 50.0);
分布式超表比标准超表具有更高的网络负载,因为它们必须将插入操作从访问节点推送到数据节点。您可以优化插入模式以减少负载。
通过批量处理多个数据行的 INSERT
语句来减少负载,而不是将每次插入作为单独的事务执行。
访问节点首先通过确定每行数据应属于哪个数据节点,将批处理数据拆分为更小的批次。然后,它将每个批次写入正确的数据节点。
当插入到分布式超表时,访问节点会尝试将 INSERT
语句转换为访问节点和数据节点之间更高效的 COPY
操作。但这在以下情况下不起作用:
INSERT
语句具有RETURNING
子句并且- 超表具有可能更改返回数据的触发器
在这种情况下,计划器使用多行预处理语句插入到每个数据节点中。它将原始插入语句拆分到这些子语句中。您可以通过在 INSERT
语句上运行 EXPLAIN
来查看计划。
在预处理语句中,访问节点可以在刷新到数据节点之前缓冲多行。默认情况下,数量为 1000。您可以通过更改 timescaledb.max_insert_batch_size
设置来优化此值,例如减少必须发送的单独批次的数量。
最大批次大小有一个上限。这等于预处理语句中允许的最大参数数量(当前为 32,767 个参数),除以每行中的列数。例如,如果您有一个包含 10 列的分布式超表,则您可以设置的最大批次大小为 3276。
有关更改 timescaledb.max_insert_batch_size
的更多信息,请参阅有关配置的部分。
COPY
在分布式超表上可能比 INSERT
性能更好。但它不支持某些功能,例如使用 ON CONFLICT
子句的冲突处理。
要从文件复制到超表,请运行
COPY <HYPERTABLE> FROM '<FILE_PATH>';
在执行 COPY
时,访问节点会将每个数据节点切换到复制模式。然后,它将每行流式传输到正确的数据节点。
关键词
在此页面上发现问题?报告问题 或 在 GitHub 上编辑此页。