如何设置从CSV文件加载数据到Docker容器中PostgreSQL数据库的path?

我想从CSV文件中的数据加载到Docker中的PostgreSQL数据库。 我运行:

docker exec -ti my project_db_1 psql -U postgres 

然后我select我的数据库:

 \c myDatabase 

现在我尝试从Django项目主目录下的myfile.csv将数据加载到backend_data表中:

 \copy backend_data (t, sth1, sth2) FROM 'myfile.csv' CSV HEADER; 

但是我得到错误:

 myfile.csv: No such file or directory 

在我看来,我尝试了一切可能的道路,没有任何工作。 任何想法我怎么能解决它? 这是我的docker-compose.yml:

 version: '3' services: db: image: postgres environment: POSTGRES_USER: myuser POSTGRES_PASSWORD: mypassword django: build: . command: python3 manage.py runserver 0.0.0.0:8000 volumes: - .:/code ports: - "8000:8000" depends_on: - db 

最简单的方法是将一个目录挂载到postgres容器中,将文件放入挂载的目录中,并在那里引用它。

实际上,我们正在安装pgdata目录,确保即使重新创buildpostgres docker容器,postgres数据仍然存在。 所以,我的例子也会使用pgdata

 services: db: image: postgres environment: POSTGRES_USER: myuser POSTGRES_PASSWORD: mypassword volumes: volumes: - "<path_to_local_pgdata>:/var/lib/postgresql/data/pgdata" 

myfile.csv放入<path_to_local_pgdata> (相对于包含config或绝对path的目录)。 复制命令然后看起来像这样:

 \copy backend_data (t, sth1, sth2) FROM '/var/lib/postgresql/data/pgdata/myfile.csv' CSV HEADER; 

如果在该容器中运行该命令,则需要在db容器中装入myfile.csv的path。

你可能只在django服务中挂载了这个文件。

可能docker-compose.yml

 version: '3' services: db: image: postgres environment: POSTGRES_USER: myuser POSTGRES_PASSWORD: mypassword volumes: - <path_to_csv_in_local>:<path_of_csv_in_db_container> django: build: . command: python3 manage.py runserver 0.0.0.0:8000 volumes: - .:/code ports: - "8000:8000" depends_on: - db 

你还没有创build你的db的挂载。 一旦你closures你的数据库容器,你将会失去所有的数据。 postgresql容器将数据存储在/var/lib/postgresql/data 。 您需要将此path安装到本地系统,以便即使容器closures也可以维护数据。

 volumes: - <path_of_db_in_local_system>:/var/lib/postgresql/data