【问题标题】:How to export table postgres from docker to macos local如何将表 postgres 从 docker 导出到本地 macos
【发布时间】:2021-05-11 06:49:38
【问题描述】:

我使用 docker 然后安装 postgres 。现在我想从 postgres 导出一张表并将其插入到 mysql 中。我使用命令一步一步的命令看起来像:

关于数据库 postgres 我访问 docker 容器并运行命令

\copy users TO  '/Users/maclocaluser/abc.csv' WITH CSV HEADER DELIMITER ';'

但它让我例外:/Users/maclocaluser/abc.csv: No such file or directory

但是当我使用工具 dbever 或 pgadmin 时,它导出成功。没有错误。

然后当我想使用 docker 导入 mysql 时,我使用命令:

LOAD DATA  LOCAL INFILE '/Users/maclocaluser/abc.csv'  INTO TABLE users  FIELDS TERMINATED BY ','  ENCLOSED BY '"' LINES TERMINATED BY '\n' IGNORE 1 ROWS;

这和我一样例外:

File '/Users/maclocaluser/abc.csv' not found (Errcode: 2 - No such file or directory) 但它存在于我的字典中。

如何在 mac 上导出和导入。当我使用 ubuntu 时,它运行成功。我使用工具 mysql 或 dbever 导入成功但命令行不成功。

【问题讨论】:

    标签: mysql postgresql docker csv


    【解决方案1】:

    您的 postgres 位于 Docker 容器中。那是一台与你的mac不同的机器,它是主机。 因此,Docker 容器不知道 /Users/maclocaluser 文件夹。

    您应该将 docker 容器中的目录映射到主机(您的 Macbook)上的文件夹。 (请参阅 Docker 文档中的卷)

    然后将数据从 postgres 复制到容器上该目录中的 CSV。卷将确保它最终出现在您的 Mac 上。

    作为示例,请参见下面的 docker-compose.yml。

    version: '3.9'
    
    services:
    
      db:
        image: postgres:latest
        restart: "no"
        container_name: db
        volumes:
          - ./database:/var/lib/postgresql/data
          - ./transfer:/var/transfer:rw
        ports:
          - "5432:5432"
        environment:
          POSTGRES_PASSWORD: root
          POSTGRES_USER: myrootpassword
          POSTGRES_DB: mydatabase
    

    它启动一个数据库并将数据库本身映射到名为 ./database 的主机文件夹。 它还将文件夹 ./transfer 映射到 Docker 容器上的 /var/transfer。

    您的复制命令将如下所示:

    \copy users TO  '/var/transfer/abc.csv' WITH CSV HEADER DELIMITER ';'
    

    如果您在 Postgres 上执行此命令,您的 abc.csv 文件应该在您的 macbook 上以 ./transfer 结束。

    【讨论】:

    • 非常感谢。但是在哪里放置我的文件夹 ./database 。在 /Users/maclocaluser 对吗?所以我有一个问题:为什么pgadmin和dbever导出成功呢?
    • 如果你也在 docker 中运行了 pgadmin,它在同一个 docker-network 上。在 dbever 中,您可能与端口 5432 建立连接。如果将 Docker-Container 端口 5432 映射到 Host-port 5432,则 dbever 可以在主机上运行时访问该端口上的数据库。
    • 您的文件夹 ./database 与您的 docker-compose.yml 文件处于同一级别。 ./transfer 文件夹也是如此。
    猜你喜欢
    • 1970-01-01
    • 2019-08-30
    • 2022-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-07
    • 1970-01-01
    • 2014-01-07
    相关资源
    最近更新 更多