如何设置将数据从CSV文件加载到Docker容器中的PostgreSQL数据库的路径?
问题描述:
我想将数据从CSV文件加载到Docker中的PostgreSQL数据库中。 我运行:如何设置将数据从CSV文件加载到Docker容器中的PostgreSQL数据库的路径?
docker exec -ti my project_db_1 psql -U postgres
然后我选择我的数据库:
\c myDatabase
现在,我尝试从myfile.csv
这是在Django项目的主目录为backend_data
表加载数据:
\copy backend_data (t, sth1, sth2) FROM 'myfile.csv' CSV HEADER;
但是我得到的错误:
myfile.csv: No such file or directory
在我看来,我尝试了所有可能的路径,没有任何工作。任何想法如何解决它?这是我的搬运工,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
目录,以确保即使重新创建postgres泊坞窗容器,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>
(相对于包含配置或绝对路径的目录)。复制命令,然后看起来是这样的:
\copy backend_data (t, sth1, sth2) FROM '/var/lib/postgresql/data/pgdata/myfile.csv' CSV HEADER;
答
你需要安装myfile.csv
的路径在db
容器,如果你正在运行在该容器中的命令。
您可能已将该文件仅安装在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
您尚未创建db
的坐骑。这会在您关闭数据库容器后发生致命的行为(您将丢失所有数据)。 postgresql
集装箱数据存储在/var/lib/postgresql/data
。您需要将此路径安装到本地系统,以便即使容器关闭也可以维护数据。
volumes:
- <path_of_db_in_local_system>:/var/lib/postgresql/data
哪个容器是'myfile.csv' in,'django'或'db'?你要进入哪个容器? 'django'或'db'? – Alasdair
@Alasdair'myfile.csv'在主目录中,其中也是'docker-compose.yml'和'Dockerfile'的Django项目。我执行'\ copy backend_data(t,sth1,sth2)FROM'myfile.csv'CSV HEADER;'in'project_db_1''。 – wahtdbogh
您没有为'db'容器装载任何卷,文件'myfile.csv'不在'db'容器中,并且您正在该容器中运行该命令。在docker-compose.yml'卷中添加可能的解决方案: - “:”' –