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 获得?
环境:
- Python 3.6.4
- psycopg2-binary-2.7.4(使用标志安装:--no-binary :all:)
- Postgres: 10.3
- Timescaledb: 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 ] [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);
我想在 Postgres 中即时创建 TimescaleDB tables,因为我正在处理随时间变化的数据源(财务提要,所以可能是 100,可能是 1000),我想要一个table 每个数据源。
我可以从 Python 创建 table 没有问题,但是当我调用 SELECT create_hypertable(test_table1, time)
时它会抛出错误。当然,从 pSQL 执行时,相同的查询似乎工作正常,所以看起来时间刻度 API 可能无法通过 psycopg2 获得?
环境:
- Python 3.6.4
- psycopg2-binary-2.7.4(使用标志安装:--no-binary :all:)
- Postgres: 10.3
- Timescaledb: 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 ] [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);