[Python] TimescaleDB not accepting intervales less than one day

Discussão em 'Python' iniciado por Stack, Setembro 13, 2024.

  1. Stack

    Stack Membro Participativo

    I have a timescaleDB but I cannot seem to be able to use the time_bucket method with less than one day intervals.

    The code attempting to access it is running inside of a fast API and is as follows :

    async def get_candlestick_data(self, db: AsyncSession, market_name: str, resource_name: str, interval: str):
    sql = f"""
    SELECT
    time_bucket('{interval}', timestamp) as period,
    FIRST(price, timestamp) as open,
    MAX(price) as high,
    MIN(price) as low,
    LAST(price, timestamp) as close,
    SUM(quantity) as volume
    FROM
    resource_market_value
    WHERE
    market_name = :market_name AND resource_name = :resource_name
    GROUP BY
    period
    ORDER BY
    period;
    """
    result = await db.execute(text(sql), {'market_name': market_name, 'resource_name': resource_name})
    return result.fetchall()


    Here is the model I am using :

    from sqlalchemy import DateTime
    from sqlalchemy import Column, Integer, String, BigInteger
    from common_modules.database.base import Base


    class ResourceMarketValue(Base):
    __tablename__ = 'resource_market_value'
    id = Column(BigInteger, primary_key=True, autoincrement=True)
    market_name = Column(String, nullable=False)
    resource_name = Column(String, nullable=False)
    timestamp = Column(DateTime, nullable=False)
    price = Column(Integer, nullable=False)
    quantity = Column(Integer, nullable=False)


    And here is the only configuration / edit I am doing to the table :

    SELECT create_hypertable('resource_market_value', 'timestamp');


    The issue is that the TimescaleDB is not accepting intervals of less than one day. Here are the logs I am getting :

    2024-09-12 14:59:54.455 UTC [50740] ERROR: interval must not have sub-day precision
    2024-09-12 14:59:54.455 UTC [50740] STATEMENT:
    SELECT
    time_bucket('15 minutes', timestamp) as period,
    FIRST(price, timestamp) as open,
    MAX(price) as high,
    MIN(price) as low,
    LAST(price, timestamp) as close,
    SUM(quantity) as volume
    FROM
    resource_market_value
    WHERE
    market_name = $1 AND resource_name = $2
    GROUP BY
    period
    ORDER BY
    period;

    2024-09-12 14:59:54.456 UTC [50741] ERROR: could not map dynamic shared memory segment
    2024-09-12 14:59:54.456 UTC [50742] ERROR: could not map dynamic shared memory segment
    2024-09-12 14:59:54.458 UTC [1] LOG: background worker "parallel worker" (PID 50741) exited with exit code 1
    2024-09-12 14:59:54.459 UTC [1] LOG: background worker "parallel worker" (PID 50742) exited with exit code 1


    What makes me very confused is that I am not seeing any for of configuration being mentioned in the documentation of the time_bucket as seen here : https://docs.timescale.com/use-timescale/latest/time-buckets/use-time-buckets/
    If anything, it seems like I should be able to do so.

    The intent with my code on the long run is to be able to have market values being displayed in a candlestick chart and I'll need to be able to have up to 15 minutes per candle as minimum and 1 day as maximum.
    Currently the only data in the database is test data that I inserted. There is one entry per minute, no more.
    Ideally, if possible, I would like to automate the configuration and not navigate to a web page if changing configuration is needed.

    Edit : the version of timescaleDB I am using is the 2.16.1 as seen here :

    psql (14.12)
    Type "help" for help.

    timescaledb=# SELECT default_version, installed_version FROM pg_available_extensions WHERE name = 'timescaledb';
    default_version | installed_version
    -----------------+-------------------
    2.16.1 | 2.16.1
    (1 row)

    timescaledb=# SELECT version();
    version
    ---------------------------------------------------------------------------------------------------------------
    PostgreSQL 14.12 on x86_64-pc-linux-musl, compiled by gcc (Alpine 13.2.1_git20240309) 13.2.1 20240309, 64-bit
    (1 row)


    I will also add that it is as unconfigured as it can get. It has the password and username through environ values and that is it.

    Continue reading...

Compartilhe esta Página