当我们在 postgres 中将路径定义为'~/path/to/csv'时,没有这样的文件或目录


lease=# COPY dhcpd_data (ip_address, start_time, end_time, mac_address, machine_name) FROM '~/outputcsvre.csv' DELIMITER ',' CSV HEADER;
ERROR:  could not open file "~/outputcsvre.csv" for reading: No such file or directory

如果我将路径定义为'/home/rihiraj12/outputcsvre.csv',它工作正常。

是的,这很正常。

您实际上没有一个名为~的目录。在命令行上执行命令时,shell 将在运行程序之前~展开/home/rihiraj12。但是这里你没有使用 shell,所以~是按字面解释的。

作为解决方法,您可以说

COPY dhcpd_data (...) FROM PROGRAM 'cat ~/outputcsvre.csv' ...

但请注意,COPY命令是由服务器执行的,因此这将使服务器生成一个cat命令并使用 PostgreSQL 服务器的主目录。

要从您自己的角度指定文件,您可以(在 psql 中(使用copy元命令(其语法与COPY相同(:

copy dhcpd_data (...) FROM PROGRAM 'cat ~/outputcsvre.csv' ...

这将使用您自己的主目录作为~

>~是一个快捷方式,类Unix的shell可以扩展为用户的主目录。 即如果你使用~/outputcsvre.csv,shell 会在对它做任何其他事情之前将其转换为/home/rihiraj12/outputcsvre.csv

在 shell 之外,应用程序很少实现这种扩展 - postgresql 也没有,因此您必须提供文件的真实路径。

对于 postgresql 中的 COPY 命令,它由服务器执行 - 因此在这种情况下,您必须提供服务器可以直接解析和读取的文件名。(即相对路径将相对于PostgreSQL服务器所在的位置 - 因此请使用文件的绝对路径。

相关内容

  • 没有找到相关文章

最新更新