本节包含一些关于排查超表常见问题的思路。

ERROR: temporary file size exceeds temp_file_limit

当您尝试压缩数据块时,特别是当数据块非常大时,您可能会收到此错误。压缩操作将文件写入新的压缩数据块表,该表写入临时内存中。 可用的最大临时内存量由 temp_file_limit 参数决定。您可以通过调整 temp_file_limitmaintenance_work_mem 参数来解决此问题。

ERROR: cannot add column with constraints or defaults to a hypertable that has compression enabled

如果您尝试向已启用压缩的超表添加带有约束或默认值的列,则可能会收到此错误。 要添加列,您需要解压缩超表中的数据,添加列,然后再压缩数据。

ERROR: tuple decompression limit exceeded by operation

当从压缩数据块插入、更新或删除元组时,可能需要解压缩元组。这发生在您更新现有元组或具有需要在插入时验证的约束时。 如果您碰巧使用单个命令触发大量解压缩,您最终可能会耗尽存储空间。 因此,对单个命令可以解压缩的元组数量设置了限制。

可以像这样增加或关闭(设置为 0)限制

-- set limit to a milion tuples
SET timescaledb.max_tuples_decompressed_per_dml_transaction TO 1000000;
-- disable limit by setting to 0
SET timescaledb.max_tuples_decompressed_per_dml_transaction TO 0;
ERROR: must be owner of hypertable "HYPERTABLE_NAME"

如果您尝试使用非特权用户帐户压缩或解压缩数据块,则可能会收到此错误。 要压缩或解压缩数据块,您的用户帐户必须具有允许其在数据块上执行 CREATE INDEX 的权限。 您可以使用以下命令在 psql 命令提示符下检查当前用户的权限

\dn+ <USERNAME>

要解决此问题,请使用以下命令授予您的用户帐户适当的权限

GRANT PRIVILEGES
ON TABLE <TABLE_NAME>
TO <ROLE_TYPE>;

有关 GRANT 命令的更多信息,请参阅 PostgreSQL 文档

当您删除数据块时,它需要独占锁。 如果另一个会话正在访问数据块,则您不能同时删除该数据块。 如果删除数据块操作无法获取数据块上的锁,则它会超时并且该过程失败。 要解决此问题,请检查是什么锁定了数据块。 在某些情况下,这可能是由连续聚合或其他访问数据块的进程引起的。 当删除数据块操作可以获得数据块上的独占锁时,它将按预期完成。

有关锁的更多信息,请参阅 PostgreSQL 锁监控文档

ERROR: cannot create a unique index without the column "<COLUMN_NAME>" (used in partitioning)

在两种情况下,您可能会收到唯一索引和分区列错误

  • 在超表上创建主键或唯一索引时
  • 从已具有唯一索引或主键的表创建超表时

有关如何解决此问题的更多信息,请参阅关于在超表上创建唯一索引的部分

ERROR: invalid attribute number -6 for _hyper_2_839_chunk
CONTEXT: SQL function "hypertable_local_size" statement 1 PL/pgSQL function hypertable_detailed_size(regclass) line 26 at RETURN QUERY SQL function "hypertable_size" statement 1
SQL state: XX000

如果您的超表索引变得非常大,您可能会看到此错误。 要解决此问题,请使用以下命令重新索引您的超表

reindex table _timescaledb_internal._hyper_2_1523284_chunk

有关更多信息,请参阅 超表文档

关键词

在此页面上发现问题?报告问题 或 在 GitHub 上编辑此页面