diff --git a/airflow-core/.pre-commit-config.yaml b/airflow-core/.pre-commit-config.yaml
index 52b7d39875b80..2bd97f4c6936c 100644
--- a/airflow-core/.pre-commit-config.yaml
+++ b/airflow-core/.pre-commit-config.yaml
@@ -194,7 +194,9 @@ repos:
pass_filenames: true
files: ^src/airflow/migrations/versions/.*\.py$
exclude:
- ^src/airflow/migrations/versions/0028_3_0_0_drop_ab_user_id_foreign_key.py$
+ (?x)
+ ^src/airflow/migrations/versions/0000_2_6_2_squashed_migrations\.py$|
+ ^src/airflow/migrations/versions/0028_3_0_0_drop_ab_user_id_foreign_key\.py$
- id: ts-compile-lint-ui
name: Compile / format / lint UI
description: TS types generation / ESLint / Prettier new UI files
diff --git a/airflow-core/docs/img/airflow_erd.sha256 b/airflow-core/docs/img/airflow_erd.sha256
index aa301e6d30700..3e1e6de636ba7 100644
--- a/airflow-core/docs/img/airflow_erd.sha256
+++ b/airflow-core/docs/img/airflow_erd.sha256
@@ -1 +1 @@
-99114dbbb7c6e7ae792b0dd380c55901aea3185c7e8f969c2e44b8fa69e2a467
\ No newline at end of file
+5e7215fa50868683623f2f4ff4e1ede41beeda84acb141eb3f36c854b9b24314
\ No newline at end of file
diff --git a/airflow-core/docs/img/airflow_erd.svg b/airflow-core/docs/img/airflow_erd.svg
index 1ac7bcda5d68a..92e29e2522616 100644
--- a/airflow-core/docs/img/airflow_erd.svg
+++ b/airflow-core/docs/img/airflow_erd.svg
@@ -656,7 +656,7 @@
NOT NULL
-
+
trigger:id--asset_watcher:trigger_id
0..N
@@ -825,7 +825,7 @@
[TIMESTAMP]
-
+
trigger:id--task_instance:trigger_id
0..N
@@ -929,7 +929,7 @@
NOT NULL
-
+
asset_alias:id--asset_alias_asset_event:alias_id
0..N
@@ -962,7 +962,7 @@
NOT NULL
-
+
asset_alias:id--dag_schedule_asset_alias_reference:alias_id
0..N
@@ -1017,7 +1017,7 @@
1
-
+
asset:id--asset_watcher:asset_id
0..N
@@ -1156,7 +1156,7 @@
NOT NULL
-
+
asset:id--task_inlet_asset_reference:asset_id
0..N
@@ -1184,7 +1184,7 @@
NOT NULL
-
+
asset:id--asset_dag_run_queue:asset_id
0..N
@@ -1237,7 +1237,7 @@
NOT NULL
-
+
asset_event:id--asset_alias_asset_event:event_id
0..N
@@ -1369,7 +1369,7 @@
1
-
+
dag:dag_id--dag_schedule_asset_alias_reference:dag_id
0..N
@@ -1390,14 +1390,14 @@
1
-
+
dag:dag_id--task_inlet_asset_reference:dag_id
0..N
1
-
+
dag:dag_id--asset_dag_run_queue:target_dag_id
0..N
@@ -1743,7 +1743,7 @@
1
-
+
dag_version:id--task_instance:dag_version_id
0..N
@@ -1776,7 +1776,7 @@
NOT NULL
-
+
log_template:id--dag_run:log_template_id
0..N
@@ -1873,21 +1873,21 @@
NOT NULL
-
+
dag_run:id--backfill_dag_run:dag_run_id
0..N
{0,1}
-
+
dag_run:dag_id--task_instance:dag_id
0..N
1
-
+
dag_run:run_id--task_instance:run_id
0..N
@@ -1993,14 +1993,14 @@
NOT NULL
-
+
backfill:id--dag_run:backfill_id
0..N
{0,1}
-
+
backfill:id--backfill_dag_run:backfill_id
0..N
@@ -2114,31 +2114,31 @@
-task_instance:dag_id--task_map:dag_id
-
-0..N
-1
+task_instance:map_index--task_map:map_index
+
+0..N
+1
task_instance:run_id--task_map:run_id
-
+
0..N
1
-task_instance:task_id--task_map:task_id
-
-0..N
-1
+task_instance:dag_id--task_map:dag_id
+
+0..N
+1
-task_instance:map_index--task_map:map_index
-
-0..N
-1
+task_instance:task_id--task_map:task_id
+
+0..N
+1
@@ -2230,26 +2230,26 @@
+task_instance:dag_id--xcom:dag_id
+
+0..N
+1
+
+
+
task_instance:run_id--xcom:run_id
0..N
1
-
+
task_instance:map_index--xcom:map_index
0..N
1
-
-task_instance:dag_id--xcom:dag_id
-
-0..N
-1
-
-
task_instance:task_id--xcom:task_id
@@ -2453,32 +2453,32 @@
-task_instance:dag_id--task_instance_history:dag_id
-
-0..N
-1
-
-
-
task_instance:map_index--task_instance_history:map_index
0..N
1
-
-task_instance:task_id--task_instance_history:task_id
-
-0..N
-1
+
+task_instance:dag_id--task_instance_history:dag_id
+
+0..N
+1
-
+
task_instance:run_id--task_instance_history:run_id
0..N
1
+
+
+task_instance:task_id--task_instance_history:task_id
+
+0..N
+1
+
rendered_task_instance_fields
@@ -2516,10 +2516,10 @@
-task_instance:dag_id--rendered_task_instance_fields:dag_id
-
-0..N
-1
+task_instance:task_id--rendered_task_instance_fields:task_id
+
+0..N
+1
@@ -2530,10 +2530,10 @@
-task_instance:task_id--rendered_task_instance_fields:task_id
-
-0..N
-1
+task_instance:dag_id--rendered_task_instance_fields:dag_id
+
+0..N
+1
diff --git a/airflow-core/docs/migrations-ref.rst b/airflow-core/docs/migrations-ref.rst
index 6157bc6a18250..da7932422a3ce 100644
--- a/airflow-core/docs/migrations-ref.rst
+++ b/airflow-core/docs/migrations-ref.rst
@@ -242,7 +242,9 @@ Here's the list of all the Database Migrations that are executed via when you ru
+-------------------------+------------------+-------------------+--------------------------------------------------------------+
| ``788397e78828`` | ``937cbd173ca1`` | ``2.7.0`` | Add custom_operator_name column. |
+-------------------------+------------------+-------------------+--------------------------------------------------------------+
-| ``937cbd173ca1`` (base) | ``None`` | ``2.7.0`` | Add index to task_instance table. |
+| ``937cbd173ca1`` | ``4bc4d934e2bc`` | ``2.7.0`` | Add index to task_instance table. |
++-------------------------+------------------+-------------------+--------------------------------------------------------------+
+| ``4bc4d934e2bc`` (base) | ``None`` | ``2.6.2`` | Create initial database state from Airflow v2.6.2. |
+-------------------------+------------------+-------------------+--------------------------------------------------------------+
.. End of auto-generated table
diff --git a/airflow-core/src/airflow/migrations/versions/0000_2_6_2_squashed_migrations.py b/airflow-core/src/airflow/migrations/versions/0000_2_6_2_squashed_migrations.py
new file mode 100644
index 0000000000000..9c8cbd789a3f6
--- /dev/null
+++ b/airflow-core/src/airflow/migrations/versions/0000_2_6_2_squashed_migrations.py
@@ -0,0 +1,848 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+"""
+Create initial database state from Airflow v2.6.2.
+
+Revision ID: 4bc4d934e2bc
+Revises: None
+Create Date: 2025-12-08 14:46:22.497513
+
+"""
+
+from __future__ import annotations
+
+from datetime import datetime, timezone
+
+import sqlalchemy as sa
+from alembic import op
+
+from airflow.utils.sqlalchemy import ExtendedJSON, UtcDateTime
+
+# revision identifiers, used by Alembic.
+revision = "4bc4d934e2bc"
+down_revision = None
+branch_labels = None
+depends_on = None
+airflow_version = "2.6.2"
+
+
+def upgrade() -> None:
+ """Upgrade schema."""
+ op.create_table(
+ "ab_permission",
+ sa.Column("id", sa.Integer(), nullable=False),
+ sa.Column("name", sa.String(length=100), nullable=False),
+ sa.PrimaryKeyConstraint("id", name="ab_permission_pkey"),
+ sa.UniqueConstraint("name", name="ab_permission_name_uq"),
+ )
+ op.create_table(
+ "ab_register_user",
+ sa.Column("id", sa.Integer(), nullable=False),
+ sa.Column("first_name", sa.String(length=256), nullable=False),
+ sa.Column("last_name", sa.String(length=256), nullable=False),
+ sa.Column("username", sa.String(length=512), nullable=False),
+ sa.Column("email", sa.String(length=512), nullable=False),
+ sa.Column("password", sa.String(length=256), nullable=True),
+ sa.Column("registration_date", sa.DateTime(), nullable=True),
+ sa.Column("registration_hash", sa.String(length=256), nullable=True),
+ sa.PrimaryKeyConstraint("id", name="ab_register_user_pkey"),
+ sa.UniqueConstraint("username", name="ab_register_user_username_uq"),
+ )
+ op.create_table(
+ "ab_role",
+ sa.Column("id", sa.Integer(), nullable=False),
+ sa.Column("name", sa.String(length=64), nullable=False),
+ sa.PrimaryKeyConstraint("id", name="ab_role_pkey"),
+ sa.UniqueConstraint("name", name="ab_role_name_uq"),
+ )
+ op.create_table(
+ "ab_user",
+ sa.Column("id", sa.Integer(), nullable=False),
+ sa.Column("first_name", sa.String(length=256), nullable=False),
+ sa.Column("last_name", sa.String(length=256), nullable=False),
+ sa.Column("username", sa.String(length=512), nullable=False),
+ sa.Column("email", sa.String(length=512), nullable=False),
+ sa.Column("password", sa.String(length=256), nullable=True),
+ sa.Column("active", sa.Boolean(), nullable=True),
+ sa.Column("last_login", sa.DateTime(), nullable=True),
+ sa.Column("login_count", sa.Integer(), nullable=True),
+ sa.Column("fail_login_count", sa.Integer(), nullable=True),
+ sa.Column("created_on", sa.DateTime(), nullable=True),
+ sa.Column("changed_on", sa.DateTime(), nullable=True),
+ sa.Column("created_by_fk", sa.Integer(), nullable=True),
+ sa.Column("changed_by_fk", sa.Integer(), nullable=True),
+ sa.ForeignKeyConstraint(["changed_by_fk"], ["ab_user.id"], name="ab_user_changed_by_fk_fkey"),
+ sa.ForeignKeyConstraint(["created_by_fk"], ["ab_user.id"], name="ab_user_created_by_fk_fkey"),
+ sa.PrimaryKeyConstraint("id", name="ab_user_pkey"),
+ sa.UniqueConstraint("email", name="ab_user_email_uq"),
+ sa.UniqueConstraint("username", name="ab_user_username_uq"),
+ )
+ op.create_table(
+ "ab_view_menu",
+ sa.Column("id", sa.Integer(), nullable=False),
+ sa.Column("name", sa.String(length=250), nullable=False),
+ sa.PrimaryKeyConstraint("id", name="ab_view_menu_pkey"),
+ sa.UniqueConstraint("name", name="ab_view_menu_name_uq"),
+ )
+ op.create_table(
+ "callback_request",
+ sa.Column("id", sa.Integer(), nullable=False),
+ sa.Column("created_at", UtcDateTime(timezone=True), nullable=False),
+ sa.Column("priority_weight", sa.Integer(), nullable=False),
+ sa.Column("callback_data", sa.JSON(), nullable=False),
+ sa.Column("callback_type", sa.String(length=20), nullable=False),
+ sa.Column("processor_subdir", sa.String(length=2000), nullable=True),
+ sa.PrimaryKeyConstraint("id", name="callback_request_pkey"),
+ )
+ op.create_table(
+ "connection",
+ sa.Column("id", sa.Integer(), nullable=False),
+ sa.Column("conn_id", sa.String(length=250), nullable=False),
+ sa.Column("conn_type", sa.String(length=500), nullable=False),
+ sa.Column("description", sa.Text(), nullable=True),
+ sa.Column("host", sa.String(length=500), nullable=True),
+ sa.Column("schema", sa.String(length=500), nullable=True),
+ sa.Column("login", sa.String(length=500), nullable=True),
+ sa.Column("password", sa.String(length=5000), nullable=True),
+ sa.Column("port", sa.Integer(), nullable=True),
+ sa.Column("is_encrypted", sa.Boolean(), nullable=True),
+ sa.Column("is_extra_encrypted", sa.Boolean(), nullable=True),
+ sa.Column("extra", sa.Text(), nullable=True),
+ sa.PrimaryKeyConstraint("id", name="connection_pkey"),
+ sa.UniqueConstraint("conn_id", name="connection_conn_id_uq"),
+ )
+ op.create_table(
+ "dag",
+ sa.Column("dag_id", sa.String(length=250), nullable=False),
+ sa.Column("max_active_tasks", sa.Integer(), nullable=False),
+ sa.Column("has_task_concurrency_limits", sa.Boolean(), nullable=False),
+ sa.Column("root_dag_id", sa.String(length=250), nullable=True),
+ sa.Column("is_paused", sa.Boolean(), nullable=True),
+ sa.Column("is_subdag", sa.Boolean(), nullable=True),
+ sa.Column("is_active", sa.Boolean(), nullable=True),
+ sa.Column("last_parsed_time", UtcDateTime(timezone=True), nullable=True),
+ sa.Column("last_pickled", UtcDateTime(timezone=True), nullable=True),
+ sa.Column("last_expired", UtcDateTime(timezone=True), nullable=True),
+ sa.Column("scheduler_lock", sa.Boolean(), nullable=True),
+ sa.Column("pickle_id", sa.Integer(), nullable=True),
+ sa.Column("fileloc", sa.String(length=2000), nullable=True),
+ sa.Column("processor_subdir", sa.String(length=2000), nullable=True),
+ sa.Column("owners", sa.String(length=2000), nullable=True),
+ sa.Column("description", sa.Text(), nullable=True),
+ sa.Column("default_view", sa.String(length=25), nullable=True),
+ sa.Column("schedule_interval", sa.Text(), nullable=True),
+ sa.Column("timetable_description", sa.String(length=1000), nullable=True),
+ sa.Column("max_active_runs", sa.Integer(), nullable=True),
+ sa.Column(
+ "has_import_errors",
+ sa.Boolean(),
+ server_default=sa.text("(false)"),
+ nullable=True,
+ ),
+ sa.Column("next_dagrun", UtcDateTime(timezone=True), nullable=True),
+ sa.Column(
+ "next_dagrun_data_interval_start",
+ UtcDateTime(timezone=True),
+ nullable=True,
+ ),
+ sa.Column("next_dagrun_data_interval_end", UtcDateTime(timezone=True), nullable=True),
+ sa.Column("next_dagrun_create_after", UtcDateTime(timezone=True), nullable=True),
+ sa.PrimaryKeyConstraint("dag_id", name="dag_pkey"),
+ )
+ op.create_index(
+ "idx_next_dagrun_create_after",
+ "dag",
+ ["next_dagrun_create_after"],
+ unique=False,
+ )
+ op.create_index("idx_root_dag_id", "dag", ["root_dag_id"], unique=False)
+ op.create_table(
+ "dag_code",
+ sa.Column("fileloc_hash", sa.BigInteger(), nullable=False),
+ sa.Column("fileloc", sa.String(length=2000), nullable=False),
+ sa.Column("last_updated", UtcDateTime(timezone=True), nullable=False),
+ sa.Column("source_code", sa.Text(), nullable=False),
+ sa.PrimaryKeyConstraint("fileloc_hash", name="dag_code_pkey"),
+ )
+ op.create_table(
+ "dag_pickle",
+ sa.Column("id", sa.Integer(), nullable=False),
+ sa.Column("pickle", sa.LargeBinary(), nullable=True),
+ sa.Column("created_dttm", UtcDateTime(timezone=True), nullable=True),
+ sa.Column("pickle_hash", sa.BigInteger(), nullable=True),
+ sa.PrimaryKeyConstraint("id", name="dag_pickle_pkey"),
+ )
+ op.create_table(
+ "dataset",
+ sa.Column("id", sa.Integer(), nullable=False),
+ sa.Column("uri", sa.String(length=3000), nullable=False),
+ sa.Column("extra", sa.JSON(), nullable=False),
+ sa.Column("created_at", UtcDateTime(timezone=True), nullable=False),
+ sa.Column("updated_at", UtcDateTime(timezone=True), nullable=False),
+ sa.Column(
+ "is_orphaned",
+ sa.Boolean(),
+ server_default=sa.text("(false)"),
+ nullable=False,
+ ),
+ sa.PrimaryKeyConstraint("id", name="dataset_pkey"),
+ )
+ op.create_index("idx_uri_unique", "dataset", ["uri"], unique=True)
+ op.create_table(
+ "dataset_event",
+ sa.Column("id", sa.Integer(), nullable=False),
+ sa.Column("dataset_id", sa.Integer(), nullable=False),
+ sa.Column("extra", sa.JSON(), nullable=False),
+ sa.Column("timestamp", UtcDateTime(timezone=True), nullable=False),
+ sa.Column("source_task_id", sa.String(length=250), nullable=True),
+ sa.Column("source_dag_id", sa.String(length=250), nullable=True),
+ sa.Column("source_run_id", sa.String(length=250), nullable=True),
+ sa.Column("source_map_index", sa.Integer(), server_default="-1", nullable=True),
+ sa.PrimaryKeyConstraint("id", name="dataset_event_pkey"),
+ )
+ op.create_index(
+ "idx_dataset_id_timestamp",
+ "dataset_event",
+ ["dataset_id", "timestamp"],
+ unique=False,
+ )
+ op.create_table(
+ "import_error",
+ sa.Column("id", sa.Integer(), nullable=False),
+ sa.Column("timestamp", UtcDateTime(timezone=True), nullable=True),
+ sa.Column("filename", sa.String(length=1024), nullable=True),
+ sa.Column("stacktrace", sa.Text(), nullable=True),
+ sa.PrimaryKeyConstraint("id", name="import_error_pkey"),
+ )
+ op.create_table(
+ "job",
+ sa.Column("id", sa.Integer(), nullable=False),
+ sa.Column("dag_id", sa.String(length=250), nullable=True),
+ sa.Column("state", sa.String(length=20), nullable=True),
+ sa.Column("job_type", sa.String(length=30), nullable=True),
+ sa.Column("start_date", UtcDateTime(timezone=True), nullable=True),
+ sa.Column("end_date", UtcDateTime(timezone=True), nullable=True),
+ sa.Column("latest_heartbeat", UtcDateTime(timezone=True), nullable=True),
+ sa.Column("executor_class", sa.String(length=500), nullable=True),
+ sa.Column("hostname", sa.String(length=500), nullable=True),
+ sa.Column("unixname", sa.String(length=1000), nullable=True),
+ sa.PrimaryKeyConstraint("id", name="job_pkey"),
+ )
+ op.create_index("idx_job_dag_id", "job", ["dag_id"], unique=False)
+ op.create_index("idx_job_state_heartbeat", "job", ["state", "latest_heartbeat"], unique=False)
+ op.create_index("job_type_heart", "job", ["job_type", "latest_heartbeat"], unique=False)
+ op.create_table(
+ "log",
+ sa.Column("id", sa.Integer(), nullable=False),
+ sa.Column("dttm", UtcDateTime(timezone=True), nullable=True),
+ sa.Column("dag_id", sa.String(length=250), nullable=True),
+ sa.Column("task_id", sa.String(length=250), nullable=True),
+ sa.Column("map_index", sa.Integer(), nullable=True),
+ sa.Column("event", sa.String(length=30), nullable=True),
+ sa.Column("execution_date", UtcDateTime(timezone=True), nullable=True),
+ sa.Column("owner", sa.String(length=500), nullable=True),
+ sa.Column("extra", sa.Text(), nullable=True),
+ sa.PrimaryKeyConstraint("id", name="log_pkey"),
+ )
+ op.create_index("idx_log_dag", "log", ["dag_id"], unique=False)
+ op.create_index("idx_log_dttm", "log", ["dttm"], unique=False)
+ op.create_index("idx_log_event", "log", ["event"], unique=False)
+ op.create_table(
+ "log_template",
+ sa.Column("id", sa.Integer(), nullable=False, autoincrement=True),
+ sa.Column("filename", sa.Text(), nullable=False),
+ sa.Column("elasticsearch_id", sa.Text(), nullable=False),
+ sa.Column("created_at", UtcDateTime(timezone=True), nullable=False),
+ sa.PrimaryKeyConstraint("id", name="log_template_pkey"),
+ )
+ op.create_table(
+ "serialized_dag",
+ sa.Column("dag_id", sa.String(length=250), nullable=False),
+ sa.Column("fileloc", sa.String(length=2000), nullable=False),
+ sa.Column("fileloc_hash", sa.BigInteger(), nullable=False),
+ sa.Column("last_updated", UtcDateTime(timezone=True), nullable=False),
+ sa.Column("dag_hash", sa.String(length=32), nullable=False),
+ sa.Column("data", sa.JSON(), nullable=True),
+ sa.Column("data_compressed", sa.LargeBinary(), nullable=True),
+ sa.Column("processor_subdir", sa.String(length=2000), nullable=True),
+ sa.PrimaryKeyConstraint("dag_id", name="serialized_dag_pkey"),
+ )
+ op.create_index("idx_fileloc_hash", "serialized_dag", ["fileloc_hash"], unique=False)
+ op.create_table(
+ "slot_pool",
+ sa.Column("id", sa.Integer(), nullable=False),
+ sa.Column("pool", sa.String(length=256), nullable=True),
+ sa.Column("slots", sa.Integer(), nullable=True),
+ sa.Column("description", sa.Text(), nullable=True),
+ sa.PrimaryKeyConstraint("id", name="slot_pool_pkey"),
+ sa.UniqueConstraint("pool", name="slot_pool_pool_uq"),
+ )
+ op.create_table(
+ "trigger",
+ sa.Column("id", sa.Integer(), nullable=False),
+ sa.Column("classpath", sa.String(length=1000), nullable=False),
+ sa.Column("kwargs", sa.JSON(), nullable=False),
+ sa.Column("created_date", UtcDateTime(timezone=True), nullable=False),
+ sa.Column("triggerer_id", sa.Integer(), nullable=True),
+ sa.PrimaryKeyConstraint("id", name="trigger_pkey"),
+ )
+ op.create_table(
+ "variable",
+ sa.Column("id", sa.Integer(), nullable=False),
+ sa.Column("key", sa.String(length=250), nullable=True),
+ sa.Column("val", sa.Text(), nullable=True),
+ sa.Column("description", sa.Text(), nullable=True),
+ sa.Column("is_encrypted", sa.Boolean(), nullable=True),
+ sa.PrimaryKeyConstraint("id", name="variable_pkey"),
+ sa.UniqueConstraint("key", name="variable_key_uq"),
+ )
+ op.create_table(
+ "ab_permission_view",
+ sa.Column("id", sa.Integer(), nullable=False),
+ sa.Column("permission_id", sa.Integer(), nullable=True),
+ sa.Column("view_menu_id", sa.Integer(), nullable=True),
+ sa.ForeignKeyConstraint(
+ ["permission_id"],
+ ["ab_permission.id"],
+ name="ab_permission_view_permission_id_fkey",
+ ),
+ sa.ForeignKeyConstraint(
+ ["view_menu_id"],
+ ["ab_view_menu.id"],
+ name="ab_permission_view_view_menu_id_fkey",
+ ),
+ sa.PrimaryKeyConstraint("id", name="ab_permission_view_pkey"),
+ sa.UniqueConstraint(
+ "permission_id",
+ "view_menu_id",
+ name="ab_permission_view_permission_id_view_menu_id_uq",
+ ),
+ )
+ op.create_table(
+ "ab_user_role",
+ sa.Column("id", sa.Integer(), nullable=False),
+ sa.Column("user_id", sa.Integer(), nullable=True),
+ sa.Column("role_id", sa.Integer(), nullable=True),
+ sa.ForeignKeyConstraint(["role_id"], ["ab_role.id"], name="ab_user_role_role_id_fkey"),
+ sa.ForeignKeyConstraint(["user_id"], ["ab_user.id"], name="ab_user_role_user_id_fkey"),
+ sa.PrimaryKeyConstraint("id", name="ab_user_role_pkey"),
+ sa.UniqueConstraint("user_id", "role_id", name="ab_user_role_user_id_role_id_uq"),
+ )
+ op.create_table(
+ "dag_owner_attributes",
+ sa.Column("dag_id", sa.String(length=250), nullable=False),
+ sa.Column("owner", sa.String(length=500), nullable=False),
+ sa.Column("link", sa.String(length=500), nullable=False),
+ sa.ForeignKeyConstraint(["dag_id"], ["dag.dag_id"], name="dag.dag_id", ondelete="CASCADE"),
+ sa.PrimaryKeyConstraint("dag_id", "owner", name="dag_owner_attributes_pkey"),
+ )
+ op.create_table(
+ "dag_run",
+ sa.Column("id", sa.Integer(), nullable=False),
+ sa.Column("dag_id", sa.String(length=250), nullable=False),
+ sa.Column("execution_date", UtcDateTime(timezone=True), nullable=False),
+ sa.Column("run_id", sa.String(length=250), nullable=False),
+ sa.Column("run_type", sa.String(length=50), nullable=False),
+ sa.Column("queued_at", UtcDateTime(timezone=True), nullable=True),
+ sa.Column("start_date", UtcDateTime(timezone=True), nullable=True),
+ sa.Column("end_date", UtcDateTime(timezone=True), nullable=True),
+ sa.Column("state", sa.String(length=50), nullable=True),
+ sa.Column("creating_job_id", sa.Integer(), nullable=True),
+ sa.Column("external_trigger", sa.Boolean(), nullable=True),
+ sa.Column("conf", sa.LargeBinary(), nullable=True),
+ sa.Column("data_interval_start", UtcDateTime(timezone=True), nullable=True),
+ sa.Column("data_interval_end", UtcDateTime(timezone=True), nullable=True),
+ sa.Column("last_scheduling_decision", UtcDateTime(timezone=True), nullable=True),
+ sa.Column("dag_hash", sa.String(length=32), nullable=True),
+ sa.Column("log_template_id", sa.Integer(), nullable=True),
+ sa.Column("updated_at", UtcDateTime(timezone=True), nullable=True),
+ sa.ForeignKeyConstraint(
+ ["log_template_id"],
+ ["log_template.id"],
+ name="task_instance_log_template_id_fkey",
+ ),
+ sa.PrimaryKeyConstraint("id", name="dag_run_pkey"),
+ sa.UniqueConstraint("dag_id", "execution_date", name="dag_run_dag_id_execution_date_key"),
+ sa.UniqueConstraint("dag_id", "run_id", name="dag_run_dag_id_run_id_key"),
+ )
+ op.create_index("dag_id_state", "dag_run", ["dag_id", "state"], unique=False)
+ op.create_index("idx_dag_run_dag_id", "dag_run", ["dag_id"], unique=False)
+ op.create_index("idx_dag_run_queued_dags", "dag_run", ["state", "dag_id"], unique=False)
+ op.create_index("idx_dag_run_running_dags", "dag_run", ["state", "dag_id"], unique=False)
+ op.create_index(
+ "idx_last_scheduling_decision",
+ "dag_run",
+ ["last_scheduling_decision"],
+ unique=False,
+ )
+ op.create_table(
+ "dag_schedule_dataset_reference",
+ sa.Column("dataset_id", sa.Integer(), nullable=False),
+ sa.Column("dag_id", sa.String(length=250), nullable=False),
+ sa.Column("created_at", UtcDateTime(timezone=True), nullable=False),
+ sa.Column("updated_at", UtcDateTime(timezone=True), nullable=False),
+ sa.ForeignKeyConstraint(["dag_id"], ["dag.dag_id"], name="dsdr_dag_id_fkey", ondelete="CASCADE"),
+ sa.ForeignKeyConstraint(["dataset_id"], ["dataset.id"], name="dsdr_dataset_fkey", ondelete="CASCADE"),
+ sa.PrimaryKeyConstraint("dataset_id", "dag_id", name="dsdr_pkey"),
+ )
+ op.create_table(
+ "dag_tag",
+ sa.Column("name", sa.String(length=100), nullable=False),
+ sa.Column("dag_id", sa.String(length=250), nullable=False),
+ sa.ForeignKeyConstraint(["dag_id"], ["dag.dag_id"], name="dag_tag_dag_id_fkey", ondelete="CASCADE"),
+ sa.PrimaryKeyConstraint("name", "dag_id", name="dag_tag_pkey"),
+ )
+ op.create_table(
+ "dag_warning",
+ sa.Column("dag_id", sa.String(length=250), nullable=False),
+ sa.Column("warning_type", sa.String(length=50), nullable=False),
+ sa.Column("message", sa.Text(), nullable=False),
+ sa.Column("timestamp", UtcDateTime(timezone=True), nullable=False),
+ sa.ForeignKeyConstraint(["dag_id"], ["dag.dag_id"], name="dcw_dag_id_fkey", ondelete="CASCADE"),
+ sa.PrimaryKeyConstraint("dag_id", "warning_type", name="dag_warning_pkey"),
+ )
+ op.create_table(
+ "dataset_dag_run_queue",
+ sa.Column("dataset_id", sa.Integer(), nullable=False),
+ sa.Column("target_dag_id", sa.String(length=250), nullable=False),
+ sa.Column("created_at", UtcDateTime(timezone=True), nullable=False),
+ sa.ForeignKeyConstraint(["dataset_id"], ["dataset.id"], name="ddrq_dataset_fkey", ondelete="CASCADE"),
+ sa.ForeignKeyConstraint(["target_dag_id"], ["dag.dag_id"], name="ddrq_dag_fkey", ondelete="CASCADE"),
+ sa.PrimaryKeyConstraint("dataset_id", "target_dag_id", name="datasetdagrunqueue_pkey"),
+ )
+ op.create_table(
+ "task_outlet_dataset_reference",
+ sa.Column("dataset_id", sa.Integer(), nullable=False),
+ sa.Column("dag_id", sa.String(length=250), nullable=False),
+ sa.Column("task_id", sa.String(length=250), nullable=False),
+ sa.Column("created_at", UtcDateTime(timezone=True), nullable=False),
+ sa.Column("updated_at", UtcDateTime(timezone=True), nullable=False),
+ sa.ForeignKeyConstraint(["dag_id"], ["dag.dag_id"], name="todr_dag_id_fkey", ondelete="CASCADE"),
+ sa.ForeignKeyConstraint(["dataset_id"], ["dataset.id"], name="todr_dataset_fkey", ondelete="CASCADE"),
+ sa.PrimaryKeyConstraint("dataset_id", "dag_id", "task_id", name="todr_pkey"),
+ )
+ op.create_table(
+ "ab_permission_view_role",
+ sa.Column("id", sa.Integer(), nullable=False),
+ sa.Column("permission_view_id", sa.Integer(), nullable=True),
+ sa.Column("role_id", sa.Integer(), nullable=True),
+ sa.ForeignKeyConstraint(
+ ["permission_view_id"],
+ ["ab_permission_view.id"],
+ name="ab_permission_view_role_permission_view_id_fkey",
+ ),
+ sa.ForeignKeyConstraint(["role_id"], ["ab_role.id"], name="ab_permission_view_role_role_id_fkey"),
+ sa.PrimaryKeyConstraint("id", name="ab_permission_view_role_pkey"),
+ sa.UniqueConstraint(
+ "permission_view_id",
+ "role_id",
+ name="ab_permission_view_role_permission_view_id_role_id_uq",
+ ),
+ )
+ op.create_table(
+ "dag_run_note",
+ sa.Column("dag_run_id", sa.Integer(), nullable=False),
+ sa.Column("created_at", UtcDateTime(timezone=True), nullable=False),
+ sa.Column("updated_at", UtcDateTime(timezone=True), nullable=False),
+ sa.Column("user_id", sa.Integer(), nullable=True),
+ sa.Column("content", sa.String(length=1000), nullable=True),
+ sa.ForeignKeyConstraint(
+ ["dag_run_id"],
+ ["dag_run.id"],
+ name="dag_run_note_dr_fkey",
+ ondelete="CASCADE",
+ ),
+ sa.ForeignKeyConstraint(["user_id"], ["ab_user.id"], name="dag_run_note_user_fkey"),
+ sa.PrimaryKeyConstraint("dag_run_id", name="dag_run_note_pkey"),
+ )
+ op.create_table(
+ "dagrun_dataset_event",
+ sa.Column("dag_run_id", sa.Integer(), nullable=False),
+ sa.Column("event_id", sa.Integer(), nullable=False),
+ sa.ForeignKeyConstraint(
+ ["dag_run_id"],
+ ["dag_run.id"],
+ name="dagrun_dataset_event_dag_run_id_fkey",
+ ondelete="CASCADE",
+ ),
+ sa.ForeignKeyConstraint(
+ ["event_id"],
+ ["dataset_event.id"],
+ name="dagrun_dataset_event_event_id_fkey",
+ ondelete="CASCADE",
+ ),
+ sa.PrimaryKeyConstraint("dag_run_id", "event_id", name="dagrun_dataset_event_pkey"),
+ )
+ op.create_index(
+ "idx_dagrun_dataset_events_dag_run_id",
+ "dagrun_dataset_event",
+ ["dag_run_id"],
+ unique=False,
+ )
+ op.create_index(
+ "idx_dagrun_dataset_events_event_id",
+ "dagrun_dataset_event",
+ ["event_id"],
+ unique=False,
+ )
+ op.create_table(
+ "task_instance",
+ sa.Column("task_id", sa.String(length=250), nullable=False),
+ sa.Column("dag_id", sa.String(length=250), nullable=False),
+ sa.Column("run_id", sa.String(length=250), nullable=False),
+ sa.Column("map_index", sa.Integer(), server_default="-1", nullable=False),
+ sa.Column("pool", sa.String(length=256), nullable=False),
+ sa.Column("pool_slots", sa.Integer(), nullable=False),
+ sa.Column("start_date", UtcDateTime(timezone=True), nullable=True),
+ sa.Column("end_date", UtcDateTime(timezone=True), nullable=True),
+ sa.Column("duration", sa.Float(), nullable=True),
+ sa.Column("state", sa.String(length=20), nullable=True),
+ sa.Column("try_number", sa.Integer(), nullable=True),
+ sa.Column("max_tries", sa.Integer(), server_default="-1", nullable=True),
+ sa.Column("hostname", sa.String(length=1000), nullable=True),
+ sa.Column("unixname", sa.String(length=1000), nullable=True),
+ sa.Column("job_id", sa.Integer(), nullable=True),
+ sa.Column("queue", sa.String(length=256), nullable=True),
+ sa.Column("priority_weight", sa.Integer(), nullable=True),
+ sa.Column("operator", sa.String(length=1000), nullable=True),
+ sa.Column("queued_dttm", UtcDateTime(timezone=True), nullable=True),
+ sa.Column("queued_by_job_id", sa.Integer(), nullable=True),
+ sa.Column("pid", sa.Integer(), nullable=True),
+ sa.Column("executor_config", sa.LargeBinary(), nullable=True),
+ sa.Column("updated_at", UtcDateTime(timezone=True), nullable=True),
+ sa.Column("external_executor_id", sa.String(length=250), nullable=True),
+ sa.Column("trigger_id", sa.Integer(), nullable=True),
+ sa.Column("trigger_timeout", UtcDateTime(timezone=True), nullable=True),
+ sa.Column("next_method", sa.String(length=1000), nullable=True),
+ sa.Column("next_kwargs", ExtendedJSON(), nullable=True),
+ sa.ForeignKeyConstraint(
+ ["dag_id", "run_id"],
+ ["dag_run.dag_id", "dag_run.run_id"],
+ name="task_instance_dag_run_fkey",
+ ondelete="CASCADE",
+ ),
+ sa.ForeignKeyConstraint(
+ ["trigger_id"],
+ ["trigger.id"],
+ name="task_instance_trigger_id_fkey",
+ ondelete="CASCADE",
+ ),
+ sa.PrimaryKeyConstraint("dag_id", "task_id", "run_id", "map_index", name="task_instance_pkey"),
+ )
+ op.create_index("ti_dag_run", "task_instance", ["dag_id", "run_id"], unique=False)
+ op.create_index("ti_dag_state", "task_instance", ["dag_id", "state"], unique=False)
+ op.create_index("ti_job_id", "task_instance", ["job_id"], unique=False)
+ op.create_index("ti_pool", "task_instance", ["pool", "state", "priority_weight"], unique=False)
+ op.create_index("ti_state", "task_instance", ["state"], unique=False)
+ op.create_index(
+ "ti_state_lkp",
+ "task_instance",
+ ["dag_id", "task_id", "run_id", "state"],
+ unique=False,
+ )
+ op.create_index("ti_trigger_id", "task_instance", ["trigger_id"], unique=False)
+ op.create_table(
+ "rendered_task_instance_fields",
+ sa.Column("dag_id", sa.String(length=250), nullable=False),
+ sa.Column("task_id", sa.String(length=250), nullable=False),
+ sa.Column("run_id", sa.String(length=250), nullable=False),
+ sa.Column("map_index", sa.Integer(), server_default="-1", nullable=False),
+ sa.Column("rendered_fields", sa.JSON(), nullable=False),
+ sa.Column("k8s_pod_yaml", sa.JSON(), nullable=True),
+ sa.ForeignKeyConstraint(
+ ["dag_id", "task_id", "run_id", "map_index"],
+ [
+ "task_instance.dag_id",
+ "task_instance.task_id",
+ "task_instance.run_id",
+ "task_instance.map_index",
+ ],
+ name="rtif_ti_fkey",
+ ondelete="CASCADE",
+ ),
+ sa.PrimaryKeyConstraint(
+ "dag_id",
+ "task_id",
+ "run_id",
+ "map_index",
+ name="rendered_task_instance_fields_pkey",
+ ),
+ )
+ op.create_table(
+ "task_fail",
+ sa.Column("id", sa.Integer(), nullable=False),
+ sa.Column("task_id", sa.String(length=250), nullable=False),
+ sa.Column("dag_id", sa.String(length=250), nullable=False),
+ sa.Column("run_id", sa.String(length=250), nullable=False),
+ sa.Column("map_index", sa.Integer(), server_default="-1", nullable=False),
+ sa.Column("start_date", UtcDateTime(timezone=True), nullable=True),
+ sa.Column("end_date", UtcDateTime(timezone=True), nullable=True),
+ sa.Column("duration", sa.Integer(), nullable=True),
+ sa.ForeignKeyConstraint(
+ ["dag_id", "task_id", "run_id", "map_index"],
+ [
+ "task_instance.dag_id",
+ "task_instance.task_id",
+ "task_instance.run_id",
+ "task_instance.map_index",
+ ],
+ name="task_fail_ti_fkey",
+ ondelete="CASCADE",
+ ),
+ sa.PrimaryKeyConstraint("id", name="task_fail_pkey"),
+ )
+ op.create_index(
+ "idx_task_fail_task_instance",
+ "task_fail",
+ ["dag_id", "task_id", "run_id", "map_index"],
+ unique=False,
+ )
+ op.create_table(
+ "task_instance_note",
+ sa.Column("task_id", sa.String(length=250), nullable=False),
+ sa.Column("dag_id", sa.String(length=250), nullable=False),
+ sa.Column("run_id", sa.String(length=250), nullable=False),
+ sa.Column("map_index", sa.Integer(), nullable=False),
+ sa.Column("created_at", UtcDateTime(timezone=True), nullable=False),
+ sa.Column("updated_at", UtcDateTime(timezone=True), nullable=False),
+ sa.Column("user_id", sa.Integer(), nullable=True),
+ sa.Column("content", sa.String(length=1000), nullable=True),
+ sa.ForeignKeyConstraint(
+ ["dag_id", "task_id", "run_id", "map_index"],
+ [
+ "task_instance.dag_id",
+ "task_instance.task_id",
+ "task_instance.run_id",
+ "task_instance.map_index",
+ ],
+ name="task_instance_note_ti_fkey",
+ ondelete="CASCADE",
+ ),
+ sa.ForeignKeyConstraint(["user_id"], ["ab_user.id"], name="task_instance_note_user_fkey"),
+ sa.PrimaryKeyConstraint("task_id", "dag_id", "run_id", "map_index", name="task_instance_note_pkey"),
+ )
+ op.create_table(
+ "task_map",
+ sa.Column("dag_id", sa.String(length=250), nullable=False),
+ sa.Column("task_id", sa.String(length=250), nullable=False),
+ sa.Column("run_id", sa.String(length=250), nullable=False),
+ sa.Column("map_index", sa.Integer(), nullable=False),
+ sa.Column("length", sa.Integer(), nullable=False),
+ sa.Column("keys", ExtendedJSON(), nullable=True),
+ sa.CheckConstraint("length >= 0", name="task_map_length_not_negative"),
+ sa.ForeignKeyConstraint(
+ ["dag_id", "task_id", "run_id", "map_index"],
+ [
+ "task_instance.dag_id",
+ "task_instance.task_id",
+ "task_instance.run_id",
+ "task_instance.map_index",
+ ],
+ name="task_map_task_instance_fkey",
+ onupdate="CASCADE",
+ ondelete="CASCADE",
+ ),
+ sa.PrimaryKeyConstraint("dag_id", "task_id", "run_id", "map_index", name="task_map_pkey"),
+ )
+ op.create_table(
+ "task_reschedule",
+ sa.Column("id", sa.Integer(), nullable=False),
+ sa.Column("task_id", sa.String(length=250), nullable=False),
+ sa.Column("dag_id", sa.String(length=250), nullable=False),
+ sa.Column("run_id", sa.String(length=250), nullable=False),
+ sa.Column("map_index", sa.Integer(), server_default="-1", nullable=False),
+ sa.Column("try_number", sa.Integer(), nullable=False),
+ sa.Column("start_date", UtcDateTime(timezone=True), nullable=False),
+ sa.Column("end_date", UtcDateTime(timezone=True), nullable=False),
+ sa.Column("duration", sa.Integer(), nullable=False),
+ sa.Column("reschedule_date", UtcDateTime(timezone=True), nullable=False),
+ sa.ForeignKeyConstraint(
+ ["dag_id", "run_id"],
+ ["dag_run.dag_id", "dag_run.run_id"],
+ name="task_reschedule_dr_fkey",
+ ondelete="CASCADE",
+ ),
+ sa.ForeignKeyConstraint(
+ ["dag_id", "task_id", "run_id", "map_index"],
+ [
+ "task_instance.dag_id",
+ "task_instance.task_id",
+ "task_instance.run_id",
+ "task_instance.map_index",
+ ],
+ name="task_reschedule_ti_fkey",
+ ondelete="CASCADE",
+ ),
+ sa.PrimaryKeyConstraint("id", name="task_reschedule_pkey"),
+ )
+ op.create_index(
+ "idx_task_reschedule_dag_run",
+ "task_reschedule",
+ ["dag_id", "run_id"],
+ unique=False,
+ )
+ op.create_index(
+ "idx_task_reschedule_dag_task_run",
+ "task_reschedule",
+ ["dag_id", "task_id", "run_id", "map_index"],
+ unique=False,
+ )
+ op.create_table(
+ "xcom",
+ sa.Column("dag_run_id", sa.Integer(), nullable=False),
+ sa.Column("task_id", sa.String(length=250), nullable=False),
+ sa.Column("map_index", sa.Integer(), server_default="-1", nullable=False),
+ sa.Column("key", sa.String(length=512), nullable=False),
+ sa.Column("dag_id", sa.String(length=250), nullable=False),
+ sa.Column("run_id", sa.String(length=250), nullable=False),
+ sa.Column("timestamp", UtcDateTime(timezone=True), nullable=False),
+ sa.Column("value", sa.LargeBinary(), nullable=True),
+ sa.ForeignKeyConstraint(
+ ["dag_id", "task_id", "run_id", "map_index"],
+ [
+ "task_instance.dag_id",
+ "task_instance.task_id",
+ "task_instance.run_id",
+ "task_instance.map_index",
+ ],
+ name="xcom_task_instance_fkey",
+ ondelete="CASCADE",
+ ),
+ sa.PrimaryKeyConstraint("dag_run_id", "task_id", "map_index", "key", name="xcom_pkey"),
+ )
+ op.create_index("idx_xcom_key", "xcom", ["key"], unique=False)
+ op.create_index(
+ "idx_xcom_task_instance",
+ "xcom",
+ ["dag_id", "task_id", "run_id", "map_index"],
+ unique=False,
+ )
+ op.bulk_insert(
+ sa.table(
+ "log_template",
+ sa.column("filename", sa.Text()),
+ sa.column("elasticsearch_id", sa.Text()),
+ sa.column("created_at", UtcDateTime(timezone=True)),
+ ),
+ [
+ {
+ "filename": "{{ ti.dag_id }}/{{ ti.task_id }}/{{ ts }}/{{ try_number }}.log",
+ "elasticsearch_id": "{dag_id}-{task_id}-{execution_date}-{try_number}",
+ "created_at": datetime.now(tz=timezone.utc),
+ },
+ {
+ "filename": "dag_id={{ ti.dag_id }}/run_id={{ ti.run_id }}/task_id={{ ti.task_id }}/{% if ti.map_index >= 0 %}map_index={{ ti.map_index }}/{% endif %}attempt={{ try_number }}.log",
+ "elasticsearch_id": "{dag_id}-{task_id}-{run_id}-{map_index}-{try_number}",
+ "created_at": datetime.now(tz=timezone.utc),
+ },
+ ],
+ )
+ op.bulk_insert(
+ sa.table(
+ "slot_pool",
+ sa.column("id", sa.Integer()),
+ sa.column("pool", sa.String()),
+ sa.column("slots", sa.Integer()),
+ sa.column("description", sa.Text()),
+ ),
+ [
+ {
+ "id": 1,
+ "pool": "default_pool",
+ "slots": 128,
+ "description": "Default pool",
+ },
+ ],
+ )
+
+
+def downgrade() -> None:
+ """Downgrade schema."""
+ op.drop_index("idx_xcom_task_instance", table_name="xcom")
+ op.drop_index("idx_xcom_key", table_name="xcom")
+ op.drop_table("xcom")
+ op.drop_index("idx_task_reschedule_dag_task_run", table_name="task_reschedule")
+ op.drop_index("idx_task_reschedule_dag_run", table_name="task_reschedule")
+ op.drop_table("task_reschedule")
+ op.drop_table("task_map")
+ op.drop_table("task_instance_note")
+ op.drop_index("idx_task_fail_task_instance", table_name="task_fail")
+ op.drop_table("task_fail")
+ op.drop_table("rendered_task_instance_fields")
+ op.drop_index("ti_trigger_id", table_name="task_instance")
+ op.drop_index("ti_state_lkp", table_name="task_instance")
+ op.drop_index("ti_state", table_name="task_instance")
+ op.drop_index("ti_pool", table_name="task_instance")
+ op.drop_index("ti_job_id", table_name="task_instance")
+ op.drop_index("ti_dag_state", table_name="task_instance")
+ op.drop_index("ti_dag_run", table_name="task_instance")
+ op.drop_table("task_instance")
+ op.drop_index("idx_dagrun_dataset_events_event_id", table_name="dagrun_dataset_event")
+ op.drop_index("idx_dagrun_dataset_events_dag_run_id", table_name="dagrun_dataset_event")
+ op.drop_table("dagrun_dataset_event")
+ op.drop_table("dag_run_note")
+ op.drop_table("ab_permission_view_role")
+ op.drop_table("task_outlet_dataset_reference")
+ op.drop_table("dataset_dag_run_queue")
+ op.drop_table("dag_warning")
+ op.drop_table("dag_tag")
+ op.drop_table("dag_schedule_dataset_reference")
+ op.drop_index("idx_last_scheduling_decision", table_name="dag_run")
+ op.drop_index("idx_dag_run_running_dags", table_name="dag_run")
+ op.drop_index("idx_dag_run_queued_dags", table_name="dag_run")
+ op.drop_index("idx_dag_run_dag_id", table_name="dag_run")
+ op.drop_index("dag_id_state", table_name="dag_run")
+ op.drop_table("dag_run")
+ op.drop_table("dag_owner_attributes")
+ op.drop_table("ab_user_role")
+ op.drop_table("ab_permission_view")
+ op.drop_table("variable")
+ op.drop_table("trigger")
+ op.drop_table("slot_pool")
+ op.drop_index("sm_dag", table_name="sla_miss")
+ op.drop_index("idx_fileloc_hash", table_name="serialized_dag")
+ op.drop_table("serialized_dag")
+ op.drop_table("log_template")
+ op.drop_index("idx_log_event", table_name="log")
+ op.drop_index("idx_log_dttm", table_name="log")
+ op.drop_index("idx_log_dag", table_name="log")
+ op.drop_table("log")
+ op.drop_index("job_type_heart", table_name="job")
+ op.drop_index("idx_job_state_heartbeat", table_name="job")
+ op.drop_index("idx_job_dag_id", table_name="job")
+ op.drop_table("job")
+ op.drop_table("import_error")
+ op.drop_index("idx_dataset_id_timestamp", table_name="dataset_event")
+ op.drop_table("dataset_event")
+ op.drop_index("idx_uri_unique", table_name="dataset")
+ op.drop_table("dataset")
+ op.drop_table("dag_pickle")
+ op.drop_table("dag_code")
+ op.drop_index("idx_root_dag_id", table_name="dag")
+ op.drop_index("idx_next_dagrun_create_after", table_name="dag")
+ op.drop_table("dag")
+ op.drop_table("connection")
+ op.drop_table("callback_request")
+ op.drop_table("ab_view_menu")
+ op.drop_index("idx_ab_user_username", table_name="ab_user")
+ op.drop_table("ab_user")
+ op.drop_table("ab_role")
+ op.drop_index("idx_ab_register_user_username", table_name="ab_register_user")
+ op.drop_table("ab_register_user")
+ op.drop_table("ab_permission")
diff --git a/airflow-core/src/airflow/migrations/versions/0001_2_7_0_add_index_to_task_instance_table.py b/airflow-core/src/airflow/migrations/versions/0001_2_7_0_add_index_to_task_instance_table.py
index 1f32bb30a2dc3..37da0920b5c1c 100644
--- a/airflow-core/src/airflow/migrations/versions/0001_2_7_0_add_index_to_task_instance_table.py
+++ b/airflow-core/src/airflow/migrations/versions/0001_2_7_0_add_index_to_task_instance_table.py
@@ -20,7 +20,7 @@
Add index to task_instance table.
Revision ID: 937cbd173ca1
-Revises: None
+Revises: 4bc4d934e2bc
Create Date: 2023-05-03 11:31:32.527362
"""
@@ -31,7 +31,7 @@
# revision identifiers, used by Alembic.
revision = "937cbd173ca1"
-down_revision = None
+down_revision = "4bc4d934e2bc"
branch_labels = None
depends_on = None
airflow_version = "2.7.0"
diff --git a/airflow-core/src/airflow/utils/db.py b/airflow-core/src/airflow/utils/db.py
index b776333d10d1c..dd0c6fb7871e8 100644
--- a/airflow-core/src/airflow/utils/db.py
+++ b/airflow-core/src/airflow/utils/db.py
@@ -101,6 +101,7 @@ class MappedClassProtocol(Protocol):
log = logging.getLogger(__name__)
_REVISION_HEADS_MAP: dict[str, str] = {
+ "2.6.2": "4bc4d934e2bc",
"2.7.0": "405de8318b3a",
"2.8.0": "10b52ebd31f7",
"2.8.1": "88344c1d9134",
@@ -167,7 +168,7 @@ def add_default_pool_if_not_exists(session: Session = NEW_SESSION):
"""Add default pool if it does not exist."""
from airflow.models.pool import Pool
- if not Pool.get_pool(Pool.DEFAULT_POOL_NAME, session=session):
+ if not session.scalar(select(Pool.id).where(Pool.pool == Pool.DEFAULT_POOL_NAME)):
default_pool = Pool(
pool=Pool.DEFAULT_POOL_NAME,
slots=conf.getint(section="core", key="default_pool_task_slot_count"),
@@ -1118,7 +1119,7 @@ def upgradedb(
if errors_seen:
exit(1)
- if not _get_current_revision(session=session):
+ if not _get_current_revision(session=session) and not to_revision:
# Don't load default connections
# New DB; initialize and exit
initdb(session=session)
diff --git a/providers/fab/src/airflow/providers/fab/migrations/versions/0001_1_4_0_create_ab_tables_if_missing.py b/providers/fab/src/airflow/providers/fab/migrations/versions/0000_1_4_0_create_ab_tables_if_missing.py
similarity index 100%
rename from providers/fab/src/airflow/providers/fab/migrations/versions/0001_1_4_0_create_ab_tables_if_missing.py
rename to providers/fab/src/airflow/providers/fab/migrations/versions/0000_1_4_0_create_ab_tables_if_missing.py
diff --git a/scripts/in_container/run_migration_reference.py b/scripts/in_container/run_migration_reference.py
index 659685363c3d5..7479f3a9f07f5 100755
--- a/scripts/in_container/run_migration_reference.py
+++ b/scripts/in_container/run_migration_reference.py
@@ -166,7 +166,7 @@ def update_docs(revisions: Iterable[Script], app="airflow"):
def ensure_mod_prefix(mod_name, idx, version):
- parts = [f"{idx + 1:04}", *version]
+ parts = [f"{idx:04}", *version]
match = re.match(r"([0-9]+)_([0-9]+)_([0-9]+)_([0-9]+)_(.+)", mod_name)
if match:
# previously standardized file, rebuild the name