web-dev-qa-db-ja.com

TimescaleDB:Pythonから 'create_hypertable'を呼び出すことは可能ですか?

時間の経過とともに変化するデータソース(金融フィードなので、100になる可能性もあれば1000になる可能性もある)を処理しているため、TimescaleDBテーブルをその場でPostgresに作成し、データソースごとに1つのテーブルが必要です。

Pythonから問題なくテーブルを作成できますが、SELECT create_hypertable(test_table1, time)を呼び出すとエラーがスローされます。もちろん、同じクエリがpSQLから実行された場合は正常に機能するようです。そのため、psycopg2を介してタイムスケールAPIを使用できないように見えますか?

環境:

  • Python 3.6.4
  • psycopg2-binary-2.7.4(フラグでインストール:--no-binary:all :)
  • Postgres:10.3
  • Timescaledb: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)は存在しません
行1:SELECT create_hypertable( 'temp_table1'、 'time')
。 。 。 。 。 。 。 。 。 。 。 。 。 。 ^
ヒント:指定された名前と引数の型に一致する関数はありません。明示的な型キャストを追加する必要がある場合があります。

現在誰かがこの仕事をしているのかどうか知っていますか?シンプルなものを見逃しましたか?または、動的に作成されることをサポートするタイムスケール機能を置き換えることができる別のサービスはありますか?

14

この出力は、_create_hypertable_を実行しているデータベースにTimescaleDB拡張機能がインストールされていないことを示しています。必ず実行してください:

_CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;
_

_create_hypertable_を実行する前にデータベースで。拡張が作成されたことを確認するには、次のクエリを実行します。

_select * from pg_extension;
_

.query()呼び出しは、渡した生のSQLを実行しているように見えるため、psycopgはこれに影響を与えません。 psycopgクライアントがTimescaleDB拡張機能を最初にインストールしたデータベースと同じデータベースに接続されていることを確認してください。

21
Lee Hampton

公式ドキュメント ここ のとおり、「TimescaleDBを使用してデータベースを拡張する」必要があるため、テーブルを「ハイパーテーブル」に変換する前に、以下のコマンドを実行して拡張する必要があります。

存在しない場合は、拡張を作成します。timescaledbCASCADE;

0
Nikhil Vats

入力の処理方法に問題があると思われる入力をキャストしてみてください。したがって、SELECT create_hypertable('test_table1'::regclass, 'time'::name);のようなものがより適切に機能する可能性があります。

0
davidk