在Jupyter Lab中操作Docker部署的PostgreSQL建表时出现两类报错
Docker部署PostgreSQL导入数据报错解决方案
错误1:文件找不到
ERROR: could not open file "/home/heyoka/Schreibtisch/master/DE/data-engineering-infrastructure.git/workspace/data/departments.csv" for reading: No such file or directory
HINT: COPY FROM instructs the PostgreSQL server process to read a file. You may want a client-side facility such as psql's \copy.
原因:PostgreSQL的COPY命令由容器内的数据库服务器进程执行,你指定的路径是宿主机本地路径,容器内部无法直接访问。
解决方法:
- 方法一:改用psql客户端命令
\copy,该命令由宿主机的psql客户端执行,可直接读取宿主机文件。只需将脚本中的COPY替换为\copy,无需修改文件路径。 - 方法二:将宿主机数据目录挂载到Docker容器内。启动容器时添加挂载参数:
之后把脚本中sudo docker run -v /home/heyoka/Schreibtisch/master/DE/data-engineering-infrastructure.git/workspace/data:/container-data [其他启动参数] postgresCOPY的路径改为容器内的'/container-data/departments.csv'。
错误2:语法错误
ERROR: syntax error at or near ".."
LINE 1: ...
原因:脚本中的...是无效SQL语法,PostgreSQL无法识别该占位符。
解决方法:删除脚本中的...,替换为实际需要执行的SQL语句;若为省略的代码片段,补全完整的合法SQL即可。
修改后的示例脚本(使用\copy方案)
%%bash cat <<"EOF" | sudo docker exec -i dbis-postgres-db-1 psql -U postgres DROP DATABASE IF EXISTS satisfaction; CREATE DATABASE satisfaction; \c satisfaction; CREATE TABLE department ( id_dept SERIAL PRIMARY KEY, dept VARCHAR(50) NOT NULL, city VARCHAR(50) NOT NULL, zip_code INTEGER NOT NULL ); \copy department FROM '/home/heyoka/Schreibtisch/master/DE/data-engineering-infrastructure.git/workspace/data/departments.csv' WITH ( FORMAT CSV, DELIMITER ',', HEADER false, NULL '' ); # 此处添加其他需要执行的SQL语句,不要保留... EOF
内容的提问来源于stack exchange,提问作者heyoka955
相关产品推荐
相关产品推荐

