【发布时间】:2021-09-14 05:01:17
【问题描述】:
在 CentOS 7 上使用 PostgreSQL 9.5,我创建了一个名为 sample 的数据库以及几个表。每个表的/home/MyUser/data 中都有.csv 数据。
例如,表"TableName" 存在TableName.csv。
如何将 csv 文件加载到每个表中?
我尝试过的方法不起作用,我无法弄清楚我做错了什么。
从数据库中加载
$ psql sample
sample=# COPY "TableName" FROM '/home/MyUser/data/TableName.csv' WITH CSV;
ERROR: could not open file "/home/MyUser/data/TableName.csv" for reading: Permission denied
这意味着文件权限问题。 data/ 中的所有文件都是-rw-r--r--,目录本身是drwxr-xr-x。所以文件权限不应该是问题(除非我遗漏了什么)。网上说COPY有权限问题,试试\copy。
从 CLI 加载
$ psql \copy sample FROM /home/MyUser/data/TableName.csv WITH CSV
psql: warning: extra command-line argument "FROM" ignored
psql: warning: extra command-line argument "/home/MyUser/data/TableName.csv" ignored
psql: warning: extra command-line argument "WITH" ignored
psql: warning: extra command-line argument "CSV" ignored
psql: FATAL: Peer authentication failed for user "sample"
这似乎是一个语法错误,但我没有发现文档特别有用(man psql 然后是/\copy)。我也尝试了以下相同的结果。
$ psql \copy sample."TableName" FROM /home/MyUser/data/TableName.csv WITH CSV
$ psql \copy sample FROM /home/MyUser/data/TableName.csv WITH DELIMITER ','
还有其他几种排列会产生类似的错误。
使用的网络资源
【问题讨论】:
-
尝试
psql>\copy "TableName" FROM '/home/MyUser/data/TableName.csv' WITH CSV;,如果您再次遇到权限错误,请确保您的 unix 用户可以读取该文件 -
使用
$ psql -c '\copy ...'
标签: postgresql