繁体   English   中英

将查询结果作为 CSV 文件从 Docker PostgreSQL 容器导出到本地机器

[英]Export Query Result as CSV file from Docker PostgreSQL container to local machine

如果我做错了什么,我不确定这是否可行,因为我对 Docker 还是很陌生。 基本上,我想将 PostgreSQL docker 容器内的查询结果作为 csv 文件导出到我的本地机器。

这是我到目前为止的地方。 首先,我使用以下命令运行我的 PostgreSQL docker 容器:

sudo docker run --rm --name pg-docker -e POSTGRES_PASSWORD=something -d -p 5432:5432 -v $HOME/docker/volumes/postgres:/var/lib/postgresql/data postgres

然后我使用 docker exec 访问 docker 容器以运行 PostgreSQL 命令,该命令会将查询结果复制到具有指定位置的 csv 文件,如下所示:

\copy (select id,value from test) to 'test_1.csv' with csv;

我认为应该将查询结果导出为本地机器中名为 test_1.csv 的 csv 文件,但我在本地机器的任何地方都找不到该文件,还检查了这两个目录: $HOME/docker/volumes/postgres ; /var/lib/postgresql/data postgres

您可以将数据导出到STDOUT并将结果通过管道传输到客户端计算机中的文件:

$ docker exec -it pgdocker psql "COPY (SELECT * FROM test) TO STDOUT CSV" > test_1.csv

/var/lib/postgresql/data目录是数据库服务器存储其数据文件的地方。 它不是用户需要直接操作或找不到任何有趣内容的目录。

test_1.csv这样的路径是相对于工作目录的。 当您使用docker exec进入 postgres 容器时,默认目录是/所以这就是您的文件所在的位置。 您还可以在运行psql之前使用cd切换到另一个目录:

root@b9e5a0572207:/some/other/path# cd /some/other/path/
root@b9e5a0572207:/some/other/path# psql -U postgres

...或者您可以提供绝对路径:

\copy (select id,value from test) to '/some/other/path/test_1.csv' with csv;

您可以使用docker cp将文件从容器传输到主机:

docker cp pg-docker:/some/other/path/test_1.csv /tmp

...或者如果这是您经常做的事情,您可以创建一个卷。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM