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 或仅使用客户端控制台中的 STDINpsql,例如在 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 命令中的数据无效

COPY FROM CSV 上的 Cassandra CQLSH TEXT 字段限制(字段大于字段限制 (131072))

在 PostgreSQL 中使用 COPY FROM 命令在多个表中插入

写作:使用 COPY (SELECT * from <table>) To <filename> DELIMITER ',' CSV HEADER" 在 postgr

move post process stack from package to asset

将 CSV 加载到 Redshift 中,注入更多信息