(同时)记录\copy
了元命令不扩展变量的例外
与大多数其他元命令不同,该行的整个剩余部分总是作为 \copy 的参数,并且在参数中既不执行变量插值也不执行反引号扩展。
要解决此问题,您可以分多个步骤构建、存储和执行命令(类似于 Clodoaldo Neto 给出的解决方案):
\set filename 'my fancy dynamic name'
\set command '\\copy (SELECT * FROM generate_series(1, 5)) to ' :'filename'
:command
有了这个,您需要\
在嵌入的元命令中加倍(转义)。请记住,它将\set
所有进一步的参数连接到第二个参数,因此请在参数之间引用空格。您可以在执行前显示命令 ( :command
) 使用\echo :command
.
作为本地\set
命令的替代方案,您还可以使用 SQL 构建命令服务器端(最佳方式取决于动态内容的来源):
SELECT '\copy (SELECT * FROM generate_series(1, 5)) to ''' || :'filename' || '''' AS command \gset