【问题标题】:How to determine if a table has Timescale enabled and on which columns?如何确定表是否启用了时间刻度以及在哪些列上?
【发布时间】:2021-11-27 00:22:07
【问题描述】:

我有一个其他人创建的Timescale 数据库。

  1. 如何确定create_hypertable 是否在表上被调用?

现在我用这个,但一定有更好的方法:

SELECT * FROM hypertable_relation_size('public.data');
  1. 如果在表上调用create_hypertable,调用create_hypertable时使用了哪些参数(包括chunk_time_interval)?

(在某些情况下有 from_date 和 to_date)

【问题讨论】:

    标签: postgresql timescaledb


    【解决方案1】:

    TimescaleDB 维护有关超表的元数据并提供用于查询元数据的视图。视图位于架构timescaledb_information 中,有关超表的信息可以从timescaledb_information.hypertable 检索。

    例如:

    SELECT * FROM timescaledb_information.hypertable WHERE table_name = 'data';
    

    This API doc 包含更多信息和示例。

    请注意,时间块间隔可以随时间更改,因此视图不提供有关它的信息。因此有必要检查每个块以查看其间隔。这可以通过调用文档here 中描述的函数chunk_relation_size_pretty 来完成。例如:

    SELECT chunk_table, partitioning_columns, ranges 
      FROM chunk_relation_size_pretty('data');
    

    如果您在另一个模式中,则需要指定超表的完全限定名称,因为它需要一个标识符:

    SET SCHEMA 'test';
    SELECT chunk_table, partitioning_columns, ranges 
      FROM public.chunk_relation_size_pretty('public.data');
    
    

    【讨论】:

    • 谢谢。就像注释一样,第二个命令需要是完全限定的表名。所以它应该是'schemaname.data'。所以 chunk_relation_size_pretty('schemaname.data')
    • 如果您在同一架构中,它可以工作。问题中的示例使用公共架构,因此我假设您在其中。我同意总体上完全符合条件是件好事。如果是答案,则需要在第一个答案中添加条件。
    • 更正我的评论,即第一个答案中不需要条件,因为它仍然会按表名找到超表。
    【解决方案2】:

    更新语法(版本>2.0)以获取有关超表的元数据:

    SELECT * FROM timescaledb_information.hypertables WHERE hypertable_name = 'data';
    

    Can't display hypertable information: timescaledb_information.hypertable does not exist

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-27
      • 1970-01-01
      • 2011-11-09
      • 2015-06-20
      相关资源
      最近更新 更多