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

nht*_*han 5 sql csv postgresql psql docker

我不确定这是否可能,或者我是否做错了什么,因为我对 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
Run Code Online (Sandbox Code Playgroud)

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

\copy (select id,value from test) to 'test_1.csv' with csv;
Run Code Online (Sandbox Code Playgroud)

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

Jim*_*nes 9

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

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

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

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

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