postgresql - 如何将变量传递给Postgresql中的复制命令

标签 postgresql psql

我试图在 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 ',';

它没有用。我得到错误:没有这样的文件。 licneses.csv 和 files.csv 这两个文件存储在 Ubuntu 上的/home/cilents/ats-dev 下。我发现了一些使用“\set file 'license.csv'”的命令。它对我不起作用,因为我有很多 csv 文件。我也尝试使用“from : outpath || 'licenses.csv'”。它没有工作醚。感谢您的帮助。

使用 9.3。

最佳答案

看起来 psql 不支持 :variable 替换 psql 反斜杠命令。

test=> \set somevar fred
test=> \copy z from :somevar
:somevar: No such file or directory

因此您需要通过外部工具(如 unix shell)来执行此操作。例如

for f in *.sql; do
    psql -c "\\copy $(basename $f) FROM '$f'"
done

关于postgresql - 如何将变量传递给Postgresql中的复制命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45356803/

相关文章:

sql - 选择两列的组合但不是序列

macos - 无法连接到数据库 postgres : FATAL: role"_postgres"does not exist

postgresql - 如何使非 super 用户可以使用 Postgres 扩展

postgresql - 是否可以使 psql\copy 将 csv 文件中的一行视为注释?

mysql - 返回仅包含不带空格的值的列

postgresql - pg_restore 警告 : errors ignored on restore: 62

postgresql - 在非常大的表上运行 AUTO_VACUUM(以防止环绕)时出现问题

sql - Postgresql - 与 string_agg 相反

postgresql - 在同一行 Postgres 中使用来自 jSON 的值更新新列

sql - PostGis 最近邻查询