PostgreSQL:从共享网络文件夹导入csv文件时出错

时间:2017-11-01 18:53:18

标签: postgresql

我的目标是将csv文件导入postgresql数据库。 我的文件位于网络共享文件夹中,我没有选择将其放在本地文件夹中。 我的文件夹位于:

Trigger

当我运行这个PostgreSQL脚本时:

"smb://file-srv/doc/myfile.csv"

我会收到此错误:

COPY tbl_data
FROM 'smb://file-srv/doc/myfile.csv' DELIMITER ',' CSV;

访问该文件并打开它没有问题。 我在Ubuntu 16.04下使用PostgreSQL 9.6。 请建议如何解决这个问题。

更新

当我尝试使用postgres用户访问该文件时,我会遇到同样的错误:

ERROR: could not open file "smb://file-srv/doc/myfile.csv" for reading: No such file or directory
SQL state: 58P01

正如我提到的,当我创建用户装载文件夹时,我可以访问该文件。

2 个答案:

答案 0 :(得分:0)

是关于许可。你必须检查文件和文件夹的读访问权限。 此外,使用超级用户访问权限记录可以解决您的问题。

答案 1 :(得分:0)

简而言之,这是一个权限问题:您的网络共享可能在本地安装到用户的 UID,而PostgreSQL服务器则以postgres用户身份运行。

其次,当您登录数据库时,即使您拥有相同的用户名,数据库的用户与系统用户之间也会存在 重叠。这意味着当您从网络共享中请求文件时,数据库用户(在本例中为postgres)没有必要的权限。

要查看此内容,并假设您对相关方框有root访问权限,您可能会尝试成为postgres用户并看到您无法访问该文件:

$ sudo su - postgres
$ cat /run/user/.../smb.../yourfile.csv
Permission denied

对您的问题的修复将涉及 - 以某种方式 - 使postgres用户可以访问该文件或共享。复制肯定是最快捷的方式。但那已经不在了。您可以将共享(可能是只读)挂载为postgres用户。您可以在fstab中执行此操作。

然而,除非这是一个经常发生的自动细节,否则这似乎是英雄。如果没有关于为什么您无法在本地复制的更多信息,我建议您在本地复制文件。