我尝试在Postgresql中的SQL语句中创建一个变量,但没有成功。在该路径下存储了许多csv文件。我想在Postgresql中设置一个路径,以便告诉复制命令在哪里可以找到csv文件。
SQL语句示例:
\set outpath '/home/clients/ats-dev/'
\COPY licenses (_id, name,number_seats ) FROM :outpath + 'licenses.csv' CSV HEADER DELIMITER ',';
\COPY uploaded_files (_id, added_date ) FROM :outpath + 'files.csv' CSV HEADER DELIMITER ',';
它不工作。我得到错误:没有这样的文件。两个文件licneseses.csv和files.csv存储在Ubuntu上的/home/cilents/ats-dev下。我发现一些使用“\set file 'license. csv'”的解决方案。它对我不起作用,因为我有很多csv文件。我还尝试使用“来自:外通路||“licenses. csv”“。它无法正常工作。感谢您的帮助。
使用9.3。
3条答案
按热度按时间x4shl7ld1#
psql
似乎不支持在psql
反斜杠命令中使用:variable
替换。所以你需要通过一个像unix shell这样的外部工具来完成。
utugiqy62#
您可以尝试使用COPY命令
注:COPY命令中指定的文件直接由服务器读取或写入,而不是由客户端应用程序读取或写入。因此,这些文件必须位于数据库服务器计算机上或可由数据库服务器计算机访问,而不是由客户端访问。PostgreSQL用户必须可访问这些文件并对其进行读写(运行服务器的用户ID),而不是客户端。同样,使用PROGRAM指定的命令直接由服务器执行,而不是由客户端应用程序执行,必须由PostgreSQL用户执行。COPY命名文件或命令只允许数据库超级用户使用,因为它允许读取或写入服务器有权访问的任何文件。
文件:Postgresql 9.3 COPY
pinkon5k3#
最初提出这个问题时,psql反斜杠命令可能不支持变量插值,但在我的PostgreSQL 14示例中,情况不再如此。然而,psql手册页明确指出\copy不支持变量插值。