微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

无法使用PostgreSQL COPY从/ tmp读取,但能够从具有完全相同权限的另一个目录中读取相同的文件

我有一个文件/tmp/foo.csv,如下所示:

1,2
10,20
100,200

我在另一个目录/mydata/foo.csv中有完全相同的文件.目录和文件具有相同的确切权限,所有者,并且由同一用户创建,但是当我运行时

copY foo FROM '/tmp/foo.csv' (FORMAT CSV, DELIMITER ',', HEADER TRUE);

我收到这个错误

ERROR:  Could not open file "/tmp/foo.csv" for reading: No such file or directory

我跑的时候

copY foo FROM '/mydata/foo.csv' (FORMAT CSV, DELIMITER ',', HEADER TRUE);

我看到了copY 3.

在这里错过了什么?

这是相关的文件和目录信息:

╭─foo@bar  / ‹py27› 
╰─$ll -d /mydata /mydata/foo.csv /tmp /tmp/foo.csv                                                                                                                       1 ↵
drwxrwxrwt  2 root root 4.0K Sep  9 08:26  /mydata
drwxrwxrwt 17 root root  420 Sep  9 08:57  /tmp
-rw-r--r--  1 root root   17 Sep  6 12:03  /mydata/foo.csv
-rw-r--r--  1 root root   17 Sep  9 08:36  /tmp/foo.csv
╭─foo@bar  / ‹py27› 
╰─$diff /mydata/foo.csv /tmp/foo.csv
╭─foo@bar  / ‹py27› 
╰─$

我正在运行Arch Linux

注意:我也在另一台运行CentOS的Linux机器上试过这个,我无法重现这个问题.

解决方法:

在Arch上,Postgresql的系统脚本(/usr/lib/systemd/system/postgresql.service)启用了private /tmp,这意味着Postgresql服务器进程无法使用/ tmp与用户通信.

两种可能的解决方

>在其他地方创建一个文件夹,并为其授予用户postgres读取权限:#sudo mount -t tmpfs -o users,rw tmpfs / data
>(NOT NOTOMOMENDED)将postgresql.service中的PrivateTmp选项设置为false.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐