COPY FROM .csv 文件到远程 PostgreSQL 数据库(在 Linux 服务器上运行)
Posted
技术标签:
【中文标题】COPY FROM .csv 文件到远程 PostgreSQL 数据库(在 Linux 服务器上运行)【英文标题】:COPY FROM .csv file to a remote PostgreSQL Database (Running in Linux Server) 【发布时间】:2020-02-12 18:58:54 【问题描述】:我正在尝试使用以下命令将 .csv 文件中的数据导入托管在 Linux 服务器中的 PostgreSQL 数据库:
COPY areas_brasil FROM 'C:/Temp/RELATORIO_DTB_BRASIL_MUNICIPIO.csv' with delimiter '|' null 'NULL';
但我收到以下错误:
错误:无法打开文件 "C:/Temp/RELATORIO_DTB_BRASIL_MUNICIPIO.csv" 用于阅读:没有这样的文件 或目录提示:COPY FROM 指示 PostgreSQL 服务器进程 读取文件。您可能需要一个客户端工具,例如 psql 的 \复制。
.csv 文件位于客户端计算机(在 Windows 10 上运行)中,我对服务器中托管的数据库具有管理员访问权限(在 Linux - Debian 上运行)。
谢谢你帮助我!
【问题讨论】:
您是否尝试过按照错误消息的提示进行操作:改用 \copy 命令? COPY 指的是 postgres 服务器目录,而 \COPY 文件路径是相对于当前工作目录的。 【参考方案1】:欢迎来到 SO。
COPY .. FROM 'path'
假定文件位于服务器中。如果您希望在不将文件放入数据库服务器的情况下执行 COPY,则可以使用 \copy
或仅使用客户端控制台中的 STDIN
或 psql
,例如在 unix 系统中(对于 Windows,您必须找到 cat
和 |
等效项):
$ cat file.csv | psql yourdb -c "COPY areas_brasil FROM STDIN DELIMITER '|';"
在psql
内部使用\COPY
可以这样完成:
\COPY areas_brasil FROM '/home/jones/file.csv' DELIMITER '|';
查看answer
了解更多详情。
【讨论】:
以上是关于COPY FROM .csv 文件到远程 PostgreSQL 数据库(在 Linux 服务器上运行)的主要内容,如果未能解决你的问题,请参考以下文章
COPY FROM CSV 上的 Cassandra CQLSH TEXT 字段限制(字段大于字段限制 (131072))
在 PostgreSQL 中使用 COPY FROM 命令在多个表中插入
写作:使用 COPY (SELECT * from <table>) To <filename> DELIMITER ',' CSV HEADER" 在 postgr