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

标签 postgresql docker docker-compose postgis

我最近尝试在容器化的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从本地计算机连接...,然后运行copy命令将转储到本地计算机。 (或使用pgAdmin或DataGrip等第三方工具来转储信息)。
  • 关于postgresql - 容器化数据库文件路径和根目录未知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64342359/

    相关文章:

    elasticsearch - docker-compose.yml 用于 Elasticsearch 和 kibana

    docker - 禁用作为守护进程运行的 docker 镜像(始终重启策略)

    postgresql - 拆分 PostgreSQL 查询过滤

    java - java服务器信息中的postgres

    Postgresql 增量如果存在或创建一个新行

    docker - 在 QNAP 中运行 GOCD docker 容器时出现 java.net.UnknownHostException

    postgresql - 如何在 PostgreSQL 中自动递增?

    docker - 如何在 Docker 上构建镜像?

    linux - 如何将 chroot 目录启动为 docker 容器?

    postgresql - 用户 "postgres"的密码不匹配