【问题标题】:Uploading csv file in docker using Postgres使用 Postgres 在 docker 中上传 csv 文件
【发布时间】:2018-07-18 03:40:58
【问题描述】:

我有一个非常规的问题。我在 Postgres 中建立了一个数据库

psql -h 192.168.99.100 -p 15432 -U postgres

并使用以下方法在数据库中创建了一个表:

$ docker=# CREATE TABLE cities (
docker(#     name            varchar(80),
docker(#     location        point
docker(# );

但是,我无法将 csv 文件上传到我创建的表格中。你能告诉我怎么做吗? (我正在使用 Docker 命令窗口来执行此操作) 提前致谢。

【问题讨论】:

  • 您的 csv 文件在哪里?你能从容器内访问它吗?
  • 我的 csv 文件位于我的桌面上
  • 所以,我假设您无法从容器中访问它。如果是这种情况,您首先必须在构建映像时添加数据量或手动复制该文件。检查stackoverflow.com/questions/46849539/… 开始

标签: postgresql docker


【解决方案1】:

以下是使用容器内的 psql 将 CSV 中的纬度/经度点复制到城市表的示例。

# Sample CSV data
echo "somecity",45,-45 > cities.csv

# Create database
docker run --name postgres -p 15432:5432 -d postgres

# Create cities table and a temp table for loading point coordinates
# Uses host network to access database published on port 15432 of the host
docker run --rm --network=host postgres psql -h localhost -p 15432 -U postgres -c '
  CREATE TABLE temp (
    name varchar(80),
    latitude numeric(12,8),
    longitude numeric(12,8)
  );
  CREATE TABLE cities (
    name varchar(80),
    location point
  );'

# \copy data from file (mounted by volume)
docker run --rm --network=host -v `pwd`:/data postgres \
  psql -h localhost -p 15432 -U postgres -c \
    "\\copy temp FROM '/data/cities.csv' WITH csv"

# Insert into cities creating point from coordinates
docker run --rm --network=host postgres psql -h localhost -p 15432 -U postgres -c "
  INSERT INTO cities (name, location)
  SELECT name, point(temp.latitude,temp.longitude) 
  FROM temp;
  DROP TABLE temp"

# Show the point
docker run --rm --network=host postgres psql -h localhost -p 15432 -U postgres -c \
  "SELECT * FROM cities;"

最后一条命令输出:

  name   | location
----------+----------
 somecity | (45,-45)
(1 row)

【讨论】:

  • 感谢您的回答。我对这件事真的很陌生。我正在尝试你的方法会尽快回复你
  • 您好,它给出以下错误“连接尝试失败,因为连接方在一段时间后没有正确响应,或者建立连接失败,因为连接的主机没有响应。” @logan rakai
  • 我给出的命令在同一台机器上运行数据库和客户端,因此我可以验证它是否在本地工作。您可能需要将 localhost 修改为 192.168.99.100,正如您在问题中所写的那样。
  • 抱歉,我在运行代码创建数据库时遇到一堆错误,我收到“:\Program Files\Docker Toolbox\docker.exe: error during connect: Post http://%2F %2F.%2Fpipe%2Fdocker_engine/v1.33/containers/create?name=postgres: open //./pipe/docker_engine: 系统找不到指定的文件 在Windows默认的daemon配置中,docker客户端必须是运行提升连接。此错误也可能表明 docker 守护程序没有运行。"
  • 这些错误似乎与您的 Docker 安装有关,与我的回答或最初的问题无关。我建议检查您的 docker 安装并在必要时发布一个新问题。
猜你喜欢
  • 1970-01-01
  • 2021-01-01
  • 1970-01-01
  • 2022-07-01
  • 1970-01-01
  • 2021-12-05
  • 1970-01-01
  • 2021-07-19
  • 1970-01-01
相关资源
最近更新 更多