容器化数据库文件路径和根目录未知

Containerized database file path and root directory unknown

我最近尝试在我的容器化 Postgres 数据库中使用以下命令将我的数据库内容复制到 csv 文件:

\copy ${TABLE} TO ${FILE} DELIMITER ',' CSV HEADER;

我收到的回复表明文件已成功复制,但我找不到它被复制到的位置。当我尝试指定不同的路径来输出文件时,我得到响应 directory/file.csv: No such file or directory

有谁知道容器化数据库输出文件的位置以及我如何将它们定向到可访问的位置?

我在 Mac OS 上,这是我的 docker-compose 文件中的一些相关信息,用于启动数据库。

  db:
      image: kartoza/postgis:12.0
      volumes:
        - postgis:/var/lib/postgresql

Docker 容器在内部将其信息存储在所谓的 Docker 卷中。您可以在 Use volumes.

中阅读更多相关文献

关于您的特定问题,您有一些选择:

  • 复制到临时文件并将其从容器中拉出:
\copy ${TABLE} TO /tmp/file.csv DELIMITER ',' CSV HEADER;

然后运行docker ps,找到你的容器ID和运行:

docker cp container_id:/tmp/file.csv file.csv

您将 file.csv 包含当前文件夹中的数据。

  • 另一种更简单的方法是导出到 stdout,如果输出很短:
\copy ${TABLE} TO STDOUT DELIMITER ',' CSV HEADER;

这将通过终端转储所有数据。仅当寄存器数量足够少且无法通过回滚时才使用它。

  • 第三个选项,因为两个永远不够...您可以临时发布 5432 端口并使用 psql 从您的本地计算机连接...然后 运行ning 复制命令将转储到您的本地机器。 (或者使用 third-party 工具,如 pgAdmin 或 DataGrip 来转储信息)。