我想在Postgres中动态创建TimescaleDB表,因为我正在处理随着时间的推移而变化的数据源(财务供稿,因此可能是100,可能是1000),我希望每个数据源有一个表。
我可以用Python创建表没问题,但是当我调用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]功能create_hypertable(未知,未知)不存在
第1行:SELECT create_hypertable('temp_table1','time')
。 。 。 。 。 。 。 。 。 。 。 。 。 。 ^
提示:没有函数匹配给定的名称和参数类型。您可能需要添加显式类型转换。
有没有人知道目前是否还有这项工作?我错过了一些简单的事吗?或者是否有其他服务可以取代支持动态创建的时间刻度功能?
答案 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);