如何通过docker通过COPY正确地将数据复制到postgres数据库中?

LoF*_*F10 2 postgresql docker

我正在寻找运行 postgresql docker 容器来保存一些数据。我之前在 clickhouse 中使用过 docker,但没有在 postgresql 中使用过,而且我在这里遇到了一个基本问题,即使用 COPY 加载数据。详细信息如下:

\n\n

操作系统:在 NUC 上运行的 UBUNTU 16.04

\n\n

从这里使用 docker postgres 服务器容器:

\n\n

https://docs.docker.com/engine/examples/postgresql_service/

\n\n

docker ps 显示服务器运行没有问题:

\n\n
29fb9b39e293        eg_postgresql                     "/usr/lib/postgresql\xe2\x80\xa6"   43 hours ago        Up 3 hours              0.0.0.0:5432->5432/tcp   pg_test\n
Run Code Online (Sandbox Code Playgroud)\n\n

我想复制当前位于以下文件夹中同一 NUC 中的文件:

\n\n
Desktop/ems/ems_raw.csv\n
Run Code Online (Sandbox Code Playgroud)\n\n

我已向 postgres 用户授予用户权限,以防万一:

\n\n
-rw-rw-r-- 1 postgres me 4049497429 Mar 22 12:17 Desktop/ems/ems_raw.csv\nme@docker1:~$ \n
Run Code Online (Sandbox Code Playgroud)\n\n

我尝试在 psql 中运行以下命令。方法一:

\n\n
me@docker1:~$ docker exec -ti pg_test psql -U postgres\npsql (9.3.17)\nType "help" for help.\n\npostgres=# COPY ems_stage FROM "Desktop/ems/ems_raw.csv" WITH (format csv,header);\nERROR:  syntax error at or near ""Desktop/ems/ems_raw.csv""\nLINE 1: COPY ems_stage FROM "Desktop/ems/ems_raw.csv" WITH (format c...\n                            ^\npostgres=# \n
Run Code Online (Sandbox Code Playgroud)\n\n

我也尝试过直接通过终端运行它,以防万一,方法 2:

\n\n
me@docker1:~$ docker exec -ti pg_test psql -U postgres -c "COPY ems_stage FROM "Desktop/ems/ems_raw.csv" WITH (format csv,header);"\nERROR:  syntax error at or near "Desktop"\nLINE 1: COPY ems_stage FROM Desktop/ems/ems_raw.csv WITH (format csv...\n                            ^\nme@docker1:~$ \n
Run Code Online (Sandbox Code Playgroud)\n\n

我知道这里有一些基本的东西我可能无法理解。我该如何正确运行这个?我假设我在路径上犯了错误?感谢各位的帮助。

\n

LoF*_*F10 6

因此,在结合了建议之后,这对我有用:

psql -h localhost -p 5432 -d docker -U docker --password --c "\COPY ems_stage FROM 'Desktop/ems/ems_raw.csv' WITH (format csv,header);"
Run Code Online (Sandbox Code Playgroud)

从docker文档中的dockerfile引用docker数据库和docker用户名。