首页 > 解决方案 > 将查询结果作为 CSV 文件从 Docker PostgreSQL 容器导出到本地机器

问题描述

我不确定这是否可能,因为我对 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

标签: sqlpostgresqldockercsvpsql

解决方案


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

docker exec -it -u database_user_name container_name \
psql -d database_name -c "COPY (SELECT * FROM table) TO STDOUT CSV" > output.csv

-c 告诉 psql 你在建立连接时执行给定的 SQL 语句。

所以你的命令应该是这样的:

docker exec -it -u postgres pgdocker \
psql -d yourdb -c "COPY (SELECT * FROM test) TO STDOUT CSV" > test_1.csv

推荐阅读