我正在使用psql命令\ copy,我想像在编写查询脚本时一样,从外壳(用于表名)向其传递变量。我已经阅读了psql的文档:
该命令的语法与SQL COPY命令的语法相似。请注意,因此,特殊的解析规则适用于\ copy命令。特别是,变量替换规则和反斜杠转义不适用。
这似乎很确定,但是我想知道是否有人知道解决方法?
我正在使用psql命令\ copy,我想像在编写查询脚本时一样,从外壳(用于表名)向其传递变量。我已经阅读了psql的文档:
该命令的语法与SQL COPY命令的语法相似。请注意,因此,特殊的解析规则适用于\ copy命令。特别是,变量替换规则和反斜杠转义不适用。
这似乎很确定,但是我想知道是否有人知道解决方法?
Answers:
备注:我自己在MS Windows上偶然发现了此问题,并且已经可以使用其stdin将某些内容输入psql。我不得不合并输入。这就是真正棘手的地方。在我看来,除了Erwin的答案外,我还想分享一些有价值的信息,因此,我在此处将其发布为答案,以防其他人\copy
在将数据馈入Windows平台上的stdin时也需要“使用变量” 。
如果要从stdin复制一些数据并同时使用“ variable” \copy
,则括号转义可能会使情况变得棘手。下面是一个示例,说明如何完成此操作。请注意三元(转!)尖号转义括号范围列名称
@echo off
set TBL=wd
(
echo truncate %TBL%;
echo \copy %TBL% (depth,path,name,created,accessed,modified,size^^^) from stdin csv
C:\msys64\usr\bin\find ^
"e:/somepath" ^
-type f -printf "%%d,\"%%h\",\"%%f\",\"%%t\",\"%%a\",\"%%c\",%%s\n"
) | "C:\Program Files\PostgreSQL\9.4\bin\psql.exe" -h some.server -U user dbname