TimescaleDB:是否可以从Python调用'create_hypertable'?

时间:2018-03-04 23:45:23

标签: python-3.x timescaledb

我想在Postgres中动态创建TimescaleDB表,因为我正在处理随着时间的推移而变化的数据源(财务供稿,因此可能是100,可能是1000),我希望每个数据源有一个表。

我可以用Python创建表没问题,但是当我调用SELECT create_hypertable(test_table1, time)时它会抛出错误。当然,当从pSQL执行时,同样的查询似乎工作正常,所以看起来像时间刻度API不能通过psycopg2获得吗?

环境:

  • Python 3.6.4
  • psycopg2-binary-2.7.4(使用标志安装: - no-binary:all:)
  • Postgres:10.3
  • Timescaledb:0.8.0-2
  • MacOS:10.13.3

测试代码:

db.query("CREATE TABLE test_table1 (time TIMESTAMP NOT NULL, name CHAR(100) NOT NULL")
db.query("SELECT create_hypertable('test_table1', 'time')")

错误:

  

2018-03-05 11:45:36,901 [MainThread] [ERROR]功能create_hypertable(未知,未知)不存在
  第1行:SELECT create_hypertable('temp_table1','time')
  。 。 。 。 。 。 。 。 。 。 。 。 。 。 ^
  提示:没有函数匹配给定的名称和参数类型。您可能需要添加显式类型转换。

有没有人知道目前是否还有这项工作?我错过了一些简单的事吗?或者是否有其他服务可以取代支持动态创建的时间刻度功能?

4 个答案:

答案 0 :(得分:13)

该输出表示您尚未在您正在运行reviews_and_ratings = sum([list(reviews), list(ratings)], []) reviews_and_ratings.sort(key=lambda item: item.datetime, reverse=True) context_dict['reviews_and_ratings'] = reviews_and_ratings 的数据库上安装TimescaleDB扩展程序。确保你运行:

create_hypertable
运行CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE; 之前在数据库上

。要确保已创建扩展,请运行以下查询:

create_hypertable

select * from pg_extension; 不会对此产生任何影响,因为psycopg调用似乎只是执行您传递的原始SQL。确保您的.query()客户端与最初安装psycopg扩展名的客户端连接到同一数据库。

答案 1 :(得分:0)

您可能会尝试投射您的输入,看起来这可能是输入处理方式的问题。所以SELECT create_hypertable('test_table1'::regclass, 'time'::name);之类的内容可能会更好。

答案 2 :(得分:0)

根据官方文档Here,我们必须“使用TimescaleDB扩展数据库”,因此,在将表转换为“超表”之前,我们必须执行以下命令进行扩展。

  

如果timescaledb CASCADE不存在,则创建扩展;

答案 3 :(得分:0)

我在 Postgres: 12 上遇到了同样的问题,它在 Postgres: 13 中通过添加参数 if_not_exists:

SELECT create_hypertable('table_name', 'time', if_not_exists => TRUE);