"""add procrastinate schema Revision ID: 0019 Revises: 0018 Create Date: 2026-05-23 """ from typing import Sequence, Union from alembic import op revision: str = "0019" down_revision: Union[str, None] = "0018" branch_labels: Union[str, Sequence[str], None] = None depends_on: Union[str, Sequence[str], None] = None def upgrade() -> None: from procrastinate.schema import SchemaManager from app.config import settings import psycopg schema_sql = SchemaManager.get_schema() # asyncpg (used by SQLAlchemy async) cannot execute multi-statement DDL via # its prepare() path, so we open a direct psycopg connection instead. with psycopg.connect(settings.procrastinate_database_url, autocommit=True) as conn: conn.execute(schema_sql) def downgrade() -> None: op.execute(""" DROP TABLE IF EXISTS procrastinate_events CASCADE; DROP TABLE IF EXISTS procrastinate_periodic_defers CASCADE; DROP TABLE IF EXISTS procrastinate_jobs CASCADE; DROP TABLE IF EXISTS procrastinate_workers CASCADE; DROP FUNCTION IF EXISTS procrastinate_defer_jobs_v1 CASCADE; DROP FUNCTION IF EXISTS procrastinate_defer_periodic_job_v2 CASCADE; DROP FUNCTION IF EXISTS procrastinate_fetch_job_v2 CASCADE; DROP FUNCTION IF EXISTS procrastinate_finish_job_v1 CASCADE; DROP FUNCTION IF EXISTS procrastinate_cancel_job_v1 CASCADE; DROP FUNCTION IF EXISTS procrastinate_retry_job_v1 CASCADE; DROP FUNCTION IF EXISTS procrastinate_retry_job_v2 CASCADE; DROP FUNCTION IF EXISTS procrastinate_notify_queue_job_inserted_v1 CASCADE; DROP FUNCTION IF EXISTS procrastinate_notify_queue_abort_job_v1 CASCADE; DROP FUNCTION IF EXISTS procrastinate_trigger_function_status_events_insert_v1 CASCADE; DROP FUNCTION IF EXISTS procrastinate_trigger_function_status_events_update_v1 CASCADE; DROP FUNCTION IF EXISTS procrastinate_trigger_function_scheduled_events_v1 CASCADE; DROP FUNCTION IF EXISTS procrastinate_trigger_abort_requested_events_procedure_v1 CASCADE; DROP FUNCTION IF EXISTS procrastinate_unlink_periodic_defers_v1 CASCADE; DROP FUNCTION IF EXISTS procrastinate_register_worker_v1 CASCADE; DROP FUNCTION IF EXISTS procrastinate_unregister_worker_v1 CASCADE; DROP FUNCTION IF EXISTS procrastinate_update_heartbeat_v1 CASCADE; DROP FUNCTION IF EXISTS procrastinate_prune_stalled_workers_v1 CASCADE; DROP TYPE IF EXISTS procrastinate_job_to_defer_v1 CASCADE; DROP TYPE IF EXISTS procrastinate_job_event_type CASCADE; DROP TYPE IF EXISTS procrastinate_job_status CASCADE; """)