Создание материализованного представления timescaleDB с транзакцией sql завершается с ошибкойPython

Программы на Python
Anonymous
Создание материализованного представления timescaleDB с транзакцией sql завершается с ошибкой

Сообщение Anonymous »

Я пытаюсь выполнить непрерывную интеграцию с timescaleDB, но невозможно создать материализованное представление непосредственно из моего кода. Я получаю сообщение об ошибке:
ОШИБКА: CREATE MATERIALIZED VIEW ... With ДАННЫЕ не могут работать внутри блока транзакции
Можно ли мне настроить представление непосредственно из моего кода? Вместо использования терминала для создания представления?
sql_create_table = """
CREATE TABLE IF NOT EXISTS bin1s (
time TIMESTAMP,
symbol VARCHAR(50),
price NUMERIC,
qty INTEGER
);
"""

sql_aggregate = """
CREATE MATERIALIZED VIEW ohlc_data_minute
WITH (timescaledb.continuous) AS
SELECT symbol,
time_bucket(INTERVAL '1 minute', time) AS date,
FIRST(price, time) as open,
MAX(price) as high,
MIN(price) as low,
LAST(price, time) as close,
SUM(qty) as volume
FROM bin1s
GROUP BY symbol, date;
"""
sql_create_hypertable = "SELECT create_hypertable('bin1s', 'time');"

sql_create_index = "CREATE INDEX IF NOT EXISTS ix_symbol_time ON bin1s (symbol, time DESC);"

async def connect_to_database():
while True:
try:

await asyncio.sleep(1)

connection = psycopg2.connect(user="postgres", password="password", host="timescaledb", port="5432", database="postgres")
cursor = connection.cursor()

cursor.execute("SELECT EXISTS (SELECT 1 FROM information_schema.tables WHERE table_name = 'bin1s')")
table_exists = cursor.fetchone()[0]

if not table_exists:
cursor.execute(sql_create_table)
cursor.execute(sql_create_hypertable)
cursor.execute(sql_create_index)
connection.commit()
cursor.execute(sql_aggregate)
connection.commit()
print("Table 'bin1s' created successfully!")
else:
print("Table 'bin1s' already exists. Skipping table creation.")

print("Database setup successful")
return cursor, connection
except psycopg2.Error as e:
print(f"Error connecting to database: {e}")
print("Retrying in 1 second...")

# Retry after 1 second
await asyncio.sleep(1)



Подробнее здесь: https://stackoverflow.com/questions/783 ... tion-fails

Вернуться в «Python»