Postgres: Make psycopg (v3) the default synchronous Postgres driver#69474
Closed
Dev-iL wants to merge 1 commit into
Closed
Postgres: Make psycopg (v3) the default synchronous Postgres driver#69474Dev-iL wants to merge 1 commit into
Dev-iL wants to merge 1 commit into
Conversation
1 task
Mirrors the async default switch (apache#69089): PostgresHook no longer requires psycopg2 at import time. The psycopg2-specific connection, cursor, and execute_values imports are now lazy/guarded and raise a clear AirflowOptionalProviderFeatureException if psycopg2 genuinely needs to be used but isn't installed. psycopg2-binary moves to a new [psycopg2] extra. Part of the migration tracked in apache#68453.
93be77a to
fb8cf6f
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
related:
Mirrors the async default switch:
PostgresHookno longer requirespsycopg2at import time.psycopg2-binarymoves from a hard dependency to a new[psycopg2]optional extra.What changed
providers/postgres/pyproject.toml:psycopg2-binarymoved fromdependenciesinto a new"psycopg2"optional-dependencies extra, with its existing version constraints preserved. Theapache-airflow>=2.11.0floor and the"sqlalchemy"extra are unchanged.uv.lockregenerated.providers/postgres/src/airflow/providers/postgres/hooks/postgres.py: the psycopg2 connection/cursor/execute_valuesimports are now lazy/guarded (same try/except pattern already used for the psycopg3 import). The module imports successfully even when psycopg2 isn't installed, and any call site that genuinely needs the psycopg2 path raises a clearAirflowOptionalProviderFeatureExceptioninstead of failing at import time.USE_PSYCOPG3/is_sqla2dual-path logic is otherwise unchanged.providers/postgres/README.rst/docs/index.rst: regenerated to include the new[psycopg2]extra.providers/postgres/docs/changelog.rst: new "Breaking changes" note describing the sync default change and the remediation (pip install apache-airflow-providers-postgres[psycopg2]).Test plan
providers/postgres/tests/unit/postgres/hooks/test_postgres.pysimulate psycopg2 being absent (sys.modulespatching) and confirm the module still imports, while each of the three guarded call sites (_get_cursor,_create_connection,insert_rows(fast_executemany=True)) raises the clear, actionable error rather than a bare traceback.Was generative AI tooling used to co-author this PR?
Generated-by: Claude Code Sonnet 5 following the guidelines
{pr_number}.significant.rst, in airflow-core/newsfragments. You can add this file in a follow-up commit after the PR is created so you know the PR number.