如何解决如何使用 psycopg2 创建物化视图?
我在使用使用 postgres 物化视图的 timescaledb 创建连续聚合时遇到错误:
connection = psycopg2.connect(DATABASE_URI)
cursor = connection.cursor()
cursor.execute(
"""CREATE MATERIALIZED VIEW quotes_1h WITH
(timescaledb.continuous)
AS
SELECT ticker,time_bucket('1h',time) as hour,min(close) as low,max(close) as high,first(close,time) as open,last(close,time) as close
FROM quotes
GROUP BY
ticker,time);""")
connection.commit()
错误: psycopg2.errors.ActiveSqlTransaction: CREATE MATERIALIZED VIEW ... WITH DATA 不能在事务块内运行
我已经设置了自动提交,但没有帮助
解决方法
修复它:
from psycopg2.extensions import ISOLATION_LEVEL_AUTOCOMMIT
connection.set_isolation_level(ISOLATION_LEVEL_AUTOCOMMIT)
,
TimescaleDB 目前不支持创建连续聚合并在同一事务中实现它。因此有两种选择:
- 不要通过将隔离级别设置为 ISOLATION_LEVEL_AUTOCOMMIT 来创建事务,如另一条回复中所述。
- 不要通过指定
WITH NO DATA
和 refreshing separately 或通过 policy 实现连续聚合。
第二种情况是:
cursor.execute(
"""CREATE MATERIALIZED VIEW quotes_1h WITH
(timescaledb.continuous)
AS
SELECT ticker,time_bucket('1h',time) as hour,min(close) as low,max(close) as high,first(close,time) as open,last(close,time) as close
FROM quotes
GROUP BY
ticker,time)
WITH NO DATA;""")
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。