"""initial accounts and messages hypertable Revision ID: 77df960a31de Revises: Create Date: 2026-05-29 10:58:16.118857 """ from collections.abc import Sequence import sqlalchemy as sa from alembic import op from sqlalchemy.dialects import postgresql revision: str = "77df960a31de" down_revision: str | None = None branch_labels: str | Sequence[str] | None = None depends_on: str | Sequence[str] | None = None def upgrade() -> None: # ### commands auto generated by Alembic - please adjust! ### op.create_table( "accounts", sa.Column("account_id", sa.Integer(), nullable=False), sa.Column("tg_user_id", sa.BigInteger(), nullable=True), sa.Column("label", sa.String(), nullable=True), sa.Column("phone", sa.String(), nullable=True), sa.Column("session_name", sa.String(), nullable=False), sa.Column("is_active", sa.Boolean(), nullable=False), sa.Column("raw", postgresql.JSONB(astext_type=sa.Text()), nullable=False), sa.Column( "created_at", sa.DateTime(timezone=True), server_default=sa.text("now()"), nullable=False, ), sa.Column( "updated_at", sa.DateTime(timezone=True), server_default=sa.text("now()"), nullable=False, ), sa.PrimaryKeyConstraint("account_id"), sa.UniqueConstraint("tg_user_id"), ) op.create_table( "messages", sa.Column("account_id", sa.Integer(), nullable=False), sa.Column("chat_id", sa.BigInteger(), nullable=False), sa.Column("message_id", sa.BigInteger(), nullable=False), sa.Column("date", sa.DateTime(timezone=True), nullable=False), sa.Column("raw", postgresql.JSONB(astext_type=sa.Text()), nullable=False), sa.Column("deleted_at", sa.DateTime(timezone=True), nullable=True), sa.PrimaryKeyConstraint("account_id", "chat_id", "message_id", "date"), ) # ### end Alembic commands ### op.execute( "SELECT create_hypertable('messages', by_range('date', INTERVAL '1 month'))" ) op.execute( "ALTER TABLE messages SET (" "timescaledb.enable_columnstore = true, " "timescaledb.segmentby = 'chat_id', " "timescaledb.orderby = 'date DESC')" ) op.execute("CALL add_columnstore_policy('messages', after => INTERVAL '30 days')") def downgrade() -> None: # ### commands auto generated by Alembic - please adjust! ### op.drop_table("messages") op.drop_table("accounts") # ### end Alembic commands ###