如果我做錯了什么,我不確定這是否可行,因為我對 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
uj5u.com熱心網友回復:
您可以將資料匯出到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
uj5u.com熱心網友回復:
該/var/lib/postgresql/data目錄是資料庫服務器存盤其資料檔案的位置。它不是用戶需要直接操作或找不到任何有趣內容的目錄。
類似test_1.csv的路徑是相對于作業目錄的。進入 postgres 容器時的默認目錄docker exec是/您的檔案應該在的位置。您還可以cd在運行之前切換到另一個目錄psql:
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
...或者如果這是您經常做的事情,您可以創建一個卷。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/337136.html
標籤:sql PostgreSQL 码头工人 文件 查询语句
