仅创建模式是不够的。
在配置的DSN值中,模式不是可配置选项AIRFLOW__CORE__SQL_ALCHEMY_CONN
。
libpq依赖于psycopg2驱动程序不允许在DSN中配置search_path
作为额外参数。
最佳实践是为Airflow创建一个数据库。
例如,
复制到create-airflow-db.sql
create database airflow;
create user airflow;
alter user airflow with password 'airflow';
grant all on database airflow to airflow;
在容器中启动数据库服务器。在一个单独的终端窗口中保持其运行。
docker run -it --rm \
--publish '5432:5432' \
-v $PWD/create-airflow-db.sql:/create-airflow-db.sql \
--name postgres \
-e POSTGRES_PASSWORD=password postgres:alpine
在另一个终端中运行SQL文件中的查询。
docker exec -ti postgres psql -w -U postgres -d postgres -f create-airflow-db.sql
最后,在新终端中运行Airflow服务。
docker run --rm \
-it \
-e 'AIRFLOW__CORE__SQL_ALCHEMY_CONN=postgresql://airflow:airflow@172.17.0.1:5432/airflow' \
--publish '8080:8080' puckel/docker-airflow
你可以连接到数据库服务器并列出表格。
➜ airflow docker exec -ti postgres psql -w -U airflow -d airflow
psql (13.1)
Type "help" for help.
airflow=> \dt
List of relations
Schema | Name | Type | Owner
--------+-----------------------+-------+---------
public | alembic_version | table | airflow
public | chart | table | airflow
public | connection | table | airflow
public | dag | table | airflow
public | dag_pickle | table | airflow
public | dag_run | table | airflow
public | dag_tag | table | airflow
public | import_error | table | airflow
public | job | table | airflow
public | known_event | table | airflow
public | known_event_type | table | airflow
public | kube_resource_version | table | airflow
public | kube_worker_uuid | table | airflow
public | log | table | airflow
public | serialized_dag | table | airflow
public | sla_miss | table | airflow
public | slot_pool | table | airflow
public | task_fail | table | airflow
public | task_instance | table | airflow
public | task_reschedule | table | airflow
public | users | table | airflow
public | variable | table | airflow
public | xcom | table | airflow
(23 rows)
在这里,您可以看到支持Airflow模型的表都是在公共架构或搜索路径中创建的。