如何将WSL安装的Apache Airflow连接到Windows环境的PostgreSQL
完全可行,以下是具体操作步骤:
1. 配置Windows本地PostgreSQL允许WSL访问
1.1 修改PostgreSQL监听地址
找到Windows上PostgreSQL安装目录下data文件夹中的postgresql.conf文件,修改以下配置:
listen_addresses = '*'
这会让PostgreSQL监听所有网络接口,允许外部(包括WSL)的连接请求。
1.2 配置访问控制规则
同样在data文件夹中打开pg_hba.conf文件,添加一行规则允许WSL子网的IP访问:
host all all <WSL子网IP>/24 scram-sha-256
如果不确定WSL子网IP,可在WSL终端中执行ip addr show eth0,找到inet字段后的IP(例如172.18.0.2/16),取前两段加.0.0/24作为子网(比如172.18.0.0/24)。
也可以直接允许Windows主机IP的访问(更简单):在Windows CMD中执行ipconfig找到本地IPv4地址(例如192.168.3.10),然后添加:
host all all 192.168.3.10/32 scram-sha-256
注:
scram-sha-256是PostgreSQL 14+的默认认证方式,若使用旧版本,替换为md5即可。
1.3 重启Windows PostgreSQL服务
打开Windows CMD,执行以下命令(版本号根据你的安装调整,例如postgresql-x64-16):
net stop postgresql-x64-16 net start postgresql-x64-16
2. 测试WSL到Windows PostgreSQL的连通性
在WSL终端中执行psql命令测试连接:
psql -h <Windows主机IPv4> -U <PostgreSQL用户名> -d <目标数据库名>
输入密码后若能成功进入PostgreSQL命令行,说明网络配置没问题。
3. 配置Airflow连接到Windows PostgreSQL
3.1 通过Airflow UI配置
- 登录Airflow Web UI,进入
Admin > Connections页面 - 点击「+」新建连接,填写以下信息:
- Connection Id:自定义名称(例如
windows_postgres) - Connection Type:选择
Postgres - Host:填写Windows主机的IPv4地址
- Schema:要连接的数据库名
- Login:PostgreSQL用户名(例如
postgres) - Password:PostgreSQL用户密码
- Port:5432(默认端口,若修改过则填对应值)
- Connection Id:自定义名称(例如
- 点击「Test Connection」验证通过后保存。
3.2 通过环境变量配置(适合自动化场景)
在WSL终端中设置临时环境变量:
export AIRFLOW_CONN_WINDOWS_POSTGRES='postgres://<用户名>:<密码>@<Windows主机IP>:5432/<数据库名>'
若需要永久生效,将上述命令添加到~/.bashrc或~/.zshrc文件中,然后执行source ~/.bashrc。
4. 验证Airflow连接可用性
创建一个简单的测试DAG,放到Airflow的dags目录下:
from airflow import DAG from airflow.providers.postgres.operators.postgres import PostgresOperator from datetime import datetime default_args = { 'owner': 'airflow', 'start_date': datetime(2024, 1, 1), } with DAG('test_windows_postgres_conn', default_args=default_args, schedule_interval='@daily', catchup=False) as dag: test_task = PostgresOperator( task_id='verify_postgres_connection', postgres_conn_id='windows_postgres', sql='SELECT version();' )
等待Airflow加载DAG后触发执行,若任务成功运行,说明连接配置正确。
注意事项
- 确保Windows防火墙允许5432端口的TCP入站连接:在Windows Defender防火墙中添加入站规则,允许端口5432的连接请求。
- 若WSL使用默认NAT网络模式,Windows主机IP可能会动态变化,建议给Windows设置静态IP以保证连接稳定。
- 确认Windows上的PostgreSQL用户拥有目标数据库的连接权限,可执行以下SQL授权:
GRANT CONNECT ON DATABASE <数据库名> TO <用户名>;
内容的提问来源于stack exchange,提问作者blackishgray

