Docker部署Marquez与Airflow遇PostgreSQL报错及数据集不显示问题
问题解决:PostgreSQL "relation 'log' does not exist" 及 Marquez 数据集不显示
错误原因分析
- PostgreSQL权限不足:你的
init-db.sh仅授予了用户数据库级权限,但未开放默认publicschema的操作权限,导致Airflow/Marquez无法创建所需表(如log表)。 - Airflow元数据未初始化:Bitnami Airflow镜像需要显式执行数据库初始化命令,否则不会自动生成元数据表结构。
- Marquez数据库未迁移:Marquez必须执行数据库迁移来创建存储数据集的表结构,否则无法正常展示数据集。
修复步骤
1. 更新初始化脚本(init-db.sh)
修改init-db.sh,为Airflow和Marquez用户添加public schema的操作权限:
#!/bin/bash # Usage: $ ./init-db.sh set -eu psql -v ON_ERROR_STOP=1 --username "${POSTGRES_USER}" > /dev/null <<-EOSQL CREATE USER ${AIRFLOW_USER}; ALTER USER ${AIRFLOW_USER} WITH PASSWORD '${AIRFLOW_PASSWORD}'; CREATE DATABASE ${AIRFLOW_DB}; GRANT ALL PRIVILEGES ON DATABASE ${AIRFLOW_DB} TO ${AIRFLOW_USER}; -- 切换到Airflow数据库并授予schema权限 \c ${AIRFLOW_DB}; GRANT ALL PRIVILEGES ON SCHEMA public TO ${AIRFLOW_USER}; CREATE USER ${MARQUEZ_USER}; ALTER USER ${MARQUEZ_USER} WITH PASSWORD '${MARQUEZ_PASSWORD}'; CREATE DATABASE ${MARQUEZ_DB}; GRANT ALL PRIVILEGES ON DATABASE ${MARQUEZ_DB} TO ${MARQUEZ_USER}; -- 切换到Marquez数据库并授予schema权限 \c ${MARQUEZ_DB}; GRANT ALL PRIVILEGES ON SCHEMA public TO ${MARQUEZ_USER}; CREATE USER ${EXAMPLE_USER}; ALTER USER ${EXAMPLE_USER} WITH PASSWORD '${EXAMPLE_PASSWORD}'; CREATE DATABASE ${EXAMPLE_DB}; GRANT ALL PRIVILEGES ON DATABASE ${EXAMPLE_DB} TO ${EXAMPLE_USER}; EOSQL
2. 确保Airflow执行元数据初始化
在docker-compose的Airflow服务配置中,添加初始化命令:
airflow: image: bitnami/airflow:latest # 其他配置(端口、环境变量等)... command: > bash -c "airflow db init && airflow db upgrade && airflow webserver"
如果Airflow拆分了webserver和scheduler服务,需确保两个服务启动前都执行airflow db upgrade。
3. 执行Marquez数据库迁移
在docker-compose的Marquez服务中添加迁移命令,并配置正确的数据库连接:
marquez: image: marquezproject/marquez:latest environment: - MARQUEZ_DB_URL=jdbc:postgresql://postgres:5432/marquez?user=marquez&password=marquez # 其他配置(端口、依赖等)... command: > bash -c "./wait-for-it.sh postgres:5432 -- marquez db upgrade && marquez server"
4. 重置环境测试
删除现有PostgreSQL数据卷,重新启动服务以应用所有修改:
docker-compose down -v docker-compose up -d
验证
- 查看Airflow容器日志,确认
log表相关错误消失 - 访问Marquez UI,检查数据集是否正常加载显示
内容的提问来源于stack exchange,提问作者Irham Izza
相关产品推荐
相关产品推荐

