如何设置从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