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

新手上路,请多包涵

我想在 Postgres 中即时创建 TimescaleDB 表,因为我正在处理随时间变化的数据源(财务提要,因此可能是 100,可能是 1000)并且我希望每个数据源一个表。

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

环境:

  • 蟒蛇 3.6.4
  • psycopg2-binary-2.7.4(使用标志安装:–no-binary :all :)
  • Postgres:10.3
  • 时标数据库:0.8.0-2
  • 苹果操作系统: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] [错误] 函数 create_hypertable(未知,未知)不存在

第 1 行:SELECT create_hypertable(‘temp_table1’, ‘time’)

… … … … . . ^

提示:没有函数匹配给定的名称和参数类型。您可能需要添加显式类型转换。

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

原文由 William Tonkin-Howe 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 828
2 个回答

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

 CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;

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

 select * from pg_extension;

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

原文由 Lee Hampton 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

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

原文由 Gustavo Monne 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进