postgresql - 将 CSV 文件导入 postgres。错误:没有这样的文件或目录
问题描述
我正在尝试将 CSV 文件导入 postgresql 数据库。
首先,我尝试了以下查询:
copy temporaryData
from '/home/milad/Desktop/myFolder/csvFiles/test.csv'
delimiter ',' csv;
但它给了我以下错误:
SQL Error [42501]: ERROR: could not open file "/home/milad/Desktop/myFolder/test.csv" for reading: Permission denied
正如这个线程和postgresql 教程所建议的那样,这个错误是合理的:
请注意,该文件必须由 PostgreSQL 服务器直接读取,而不是由客户端应用程序读取。因此,它必须可以被 PostgreSQL 服务器机器访问。此外,您需要具有超级用户访问权限才能成功执行 COPY 语句。
由于我不喜欢仅仅为了导入文件而更改我的系统权限,为了解决这个问题,我决定将我的 CSV 文件移动到这个答案/tmp/
所建议的目录中。
然后我尝试运行以下脚本:
create or replace procedure loadInstructorOfCourses()
language plpgsql
as $$
begin
create table temporaryData(
courseSectionID varchar(10),
instructorID varchar(25),
courseTitle varchar(50)
);
copy temporaryData
from '/tmp/test.csv'
delimiter ',' csv;
drop table temporaryData;
end;$$;
call loadInstructorOfCourses();
现在它给了我以下错误:
SQL Error [58P01]: ERROR: could not open file "/tmp/test.csv" for reading: No such file or directory
但我确信该文件具有read
权限others
并且它也可用:
> ls -l -d /tmp
drwxrwxrwt 25 root root 700 Oct 20 09:53 /tmp
> ls -l /tmp/test.csv
-rw-r--r-- 1 milad milad 6700 Oct 20 09:53 /tmp/test.csv
为什么会发生此问题以及如何解决?
信息: 我的操作系统是 Manjaro KDE:
> uname -r
5.4.150-1-MANJARO
我还使用DBeaver连接到 postgresql 服务器并运行我的脚本。
更新:使用psql我也有同样的问题。当我通过psql连接到 db 时:
psql -U postgres -d IUTPlanning
并运行我的程序:
call loadInstructorOfCourses();
我会得到同样的错误:
ERROR: could not open file "/tmp/test.csv" for reading: No such file or directory
HINT: COPY FROM instructs the PostgreSQL server process to read a file. You may want a client-side facility such as psql's \copy.
CONTEXT: SQL statement "copy temporaryData
from '/tmp/test.csv'
delimiter ',' csv"
PL/pgSQL function loadinstructorofcourses() line 9 at SQL statement
解决方案
尝试使用 psql 的\copy
命令,正如您引用的错误消息中的提示所暗示的那样。COPY FROM
告诉服务器打开文件并处理它,同时\copy
读取文件客户端然后将输出传递给服务器,请参阅https://stackoverflow.com/a/19466558/12760895
打开 psql 控制台,psql -U postgres -d [yourdb]
然后运行
\copy [target_table] from '/tmp/test.csv' DELIMITER ',' CSV;
推荐阅读
- devexpress - 响应式 Web 应用程序模板用户/注册实现 asp.net Web 表单
- python - 通过特定的网络接口发出 Python 请求
- node-red - 将 msg.payload 作为值插入 LIFX 节点
- sas - 打印二维表
- npm - npm package-lock.json 中的完整性字段实际上是做什么用的?
- typescript - 如何访问 serverless.ts 中无服务器 cli 传递的选项值?
- django - psycopg2.OperationalError:无法翻译主机名“db”(虽然名称“db”在容器中可 ping)
- c# - 在链表中查找值
- r - 如何过滤滑块中闪亮传单中的年份(交互式地图)
- python - Django - 输入值列表 - ForeignKey