如何将表 postgres 从 docker 导出到 macos 本地

时间:2021-05-11 06:49:38

标签: mysql postgresql docker csv

我使用 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 它导入成功但命令行不是。

1 个答案:

答案 0 :(得分: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 文件应该以 ./transfer 在您的 macbook 中结束。

相关问题