18

我想在 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')")

错误:

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

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

4

4 回答 4

37

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

CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;

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

select * from pg_extension;

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

于 2018-03-05T13:47:56.847 回答
1

您可以尝试转换您的输入,它看起来可能是输入被处理方式的问题。所以类似的东西SELECT create_hypertable('test_table1'::regclass, 'time'::name);可能会更好。

于 2018-03-05T17:22:31.777 回答
1

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

SELECT create_hypertable('table_name', 'time', if_not_exists => TRUE);
于 2021-04-14T00:10:25.383 回答
0

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

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

于 2019-12-23T10:30:57.767 回答