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

Wil*_*owe 9 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
  • 时间表: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')")
Run Code Online (Sandbox Code Playgroud)

错误:

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

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

Lee*_*ton 15

该输出意味着您尚未TimescaleDB在正在运行的数据库上安装扩展create_hypertable.确保你运行:

CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;
Run Code Online (Sandbox Code Playgroud)

你的数据库上运行之前create_hypertable.要确保已创建扩展,请运行以下查询:

select * from pg_extension;
Run Code Online (Sandbox Code Playgroud)

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

  • AHHHHHH!所以这就是解决方案:我在运行安装步骤后创建了'CREATE EXTENSION,如果不是EXASTS timescaledb CASCADE;`,因为我有一个重置脚本可以删除所有表并再次创建它 - 我有运行`CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;`再次连接扩展名.所以,当我在pSQL中工作时,它是在我运行重置脚本之前,当然,当我尝试使用Python时,它就在之后. (2认同)