警告

您可以使用 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

关键词