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

TimescaleDB: Is it possible to call 'create_hypertable' from Python?

我想在 Postgres 中即时创建 TimescaleDB tables,因为我正在处理随时间变化的数据源(财务提要,所以可能是 100,可能是 1000),我想要一个table 每个数据源。

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

环境:

测试代码:

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] function create_hypertable(unknown, unknown) does not exist
LINE 1: SELECT create_hypertable('temp_table1', 'time')
. . . . . . . . . . . . . . ^
HINT: No function matches the given name and argument types. You might need to add explicit type casts.

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

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

CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;

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

select * from pg_extension;

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

您可以尝试投射您的输入,它看起来可能是输入方式的问题 treated.So 像 SELECT create_hypertable('test_table1'::regclass, 'time'::name); 这样的东西可能会更好。

根据官方文档Here,我们必须"Extend the database with TimescaleDB",因此,在将table转换为"hypertable"之前,我们必须执行以下命令,扩展。

CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;

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

得到了解决
SELECT create_hypertable('table_name', 'time', if_not_exists => TRUE);