Docker容器中PostgreSQL加载CSV路径配置及SQL初始化失败求助
解决Docker PostgreSQL的两个问题
问题1:设置路径加载CSV文件到PostgreSQL容器
- 本地创建存放CSV的目录(比如
./csv),将retail.csv放入该目录 - 修改
docker-compose.yml的volumes配置,添加本地CSV目录到容器的挂载:services: postgres: # 其他配置保持不变 volumes: - db_data:/var/lib/postgresql/data - ./csv:/container-csv # 本地csv目录挂载到容器内指定路径 - ./docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d # 同时挂载初始化脚本目录(解决问题2) - 更新SQL文件中的
COPY路径为容器内的挂载路径:COPY retail.user_purchase(invoice_number,stock_code,detail,quantity,invoice_date,unit_price,customer_id,country) FROM '/container-csv/retail.csv' DELIMITER ',' CSV HEADER;
问题2:docker-entrypoint-initdb.d目录下的SQL未执行
核心原因及解决步骤
未挂载本地脚本目录到容器
你手动创建了本地docker-entrypoint-initdb.d目录,但未在docker-compose.yml中挂载到容器内对应路径,导致容器无法读取脚本。解决方法就是在volumes中添加上述挂载配置。已有数据卷导致初始化不重复执行
PostgreSQL官方镜像仅在**第一次初始化数据库(数据卷为空时)**执行docker-entrypoint-initdb.d内的脚本。若之前启动过容器,db_data卷已存在数据库数据,脚本不会再次运行。解决步骤:- 停止并删除容器:
docker-compose down - 删除现有命名卷:先通过
docker volume ls查看卷名(通常是项目名_db_data),再执行docker volume rm <卷名> - 重新启动容器:
docker-compose up -d
- 停止并删除容器:
验证执行状态
容器启动后,查看日志确认脚本执行情况:
docker logs postgres
若日志中出现running /docker-entrypoint-initdb.d/xxx.sql字样,说明脚本已成功执行。
内容的提问来源于stack exchange,提问作者Chillibeef99
相关产品推荐
相关产品推荐

