Postgresql 当我们将路径定义为'~/路径/to/csv';博士后

Postgresql 当我们将路径定义为'~/路径/to/csv';博士后,postgresql,tilde-expansion,Postgresql,Tilde Expansion,如果我将路径定义为'/home/rihiraj12/outputcsvre.csv',它工作正常。是的,这是正常的 您实际上没有名为~的目录。在命令行上执行命令时,shell将在运行程序之前展开~到/home/rihiraj12。但是这里您没有使用shell,所以~是按字面意思解释的 作为一种解决方法,你可以说 lease=# COPY dhcpd_data (ip_address, start_time, end_time, mac_address, machine_name) FROM '~

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

是的,这是正常的

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

作为一种解决方法,你可以说

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
但是请注意,
COPY
命令是由服务器执行的,因此这将使服务器生成一个
cat
命令并使用PostgreSQL服务器的主目录

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

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

是的,这是正常的

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

作为一种解决方法,你可以说

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
但是请注意,
COPY
命令是由服务器执行的,因此这将使服务器生成一个
cat
命令并使用PostgreSQL服务器的主目录

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


这将使用您自己的主目录,因为它是一种快捷方式,类似unix的Shell可以将其扩展为用户的主目录。 i、 e.如果您使用
~/outputcsvre.csv
,shell会在对其执行任何其他操作之前将其转换为
/home/rihiraj12/outputcsvre.csv

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


对于postgresql中的COPY命令,它是由服务器执行的,因此在这种情况下,您必须提供一个文件名,服务器可以直接解析和读取该文件名。(也就是说,相对路径将与postgresql server所在的位置相对,因此请为文件使用绝对路径。)

~
是一种快捷方式,类似unix的Shell可以将其扩展为用户的主目录。 i、 e.如果您使用
~/outputcsvre.csv
,shell会在对其执行任何其他操作之前将其转换为
/home/rihiraj12/outputcsvre.csv

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


对于postgresql中的COPY命令,它是由服务器执行的,因此在这种情况下,您必须提供一个文件名,服务器可以直接解析和读取该文件名。(也就是说,相对路径将与postgresql server所在的位置相对,因此请为文件使用绝对路径。)

除了将路径定义为实际路径之外,还有其他方法来定义路径吗?您需要提供绝对路径,如
/home/rihiraj12/outputcsvre.csv
或相对路径,如
outputcsvre.csv
/outputcsvre.csv
/outputcsvre.csv
。相对是指相对于当前目录的路径。@nos对于
COPY
命令,它是相对于PostgreSQL服务器的当前工作目录的路径,该目录可能是群集的数据目录。尽管我认为复制PostgreSQL命令是由服务器执行的。因此,相对路径将与postgresql server运行的位置相对。是否有其他方法来定义路径,而不是将其定义为实际路径?您需要提供绝对路径,如
/home/rihiraj12/outputcsvre.csv
,或相对路径,如
outputcsvre.csv
,或
/outputcsvre.csv
。/outputcsvre.csv
。相对是指相对于当前目录的路径。@nos对于
COPY
命令,它是相对于PostgreSQL服务器的当前工作目录的路径,该目录可能是群集的数据目录。尽管我认为复制PostgreSQL命令是由服务器执行的。因此,相对路径将与postgresql server运行的位置相对。是否有其他方法来定义路径而不是将其定义为实际路径?是否有其他方法来定义路径而不是将其定义为实际路径?
\copy dhcpd_data (...) FROM PROGRAM 'cat ~/outputcsvre.csv' ...