是否可以在 PSQL 控制台导出文件中将当前日期放在文件名末尾?
导出的文件名应该是这样的表_20140710.csv可以动态地做到这一点吗? - 日期的格式可以与上面的不同,但这并不重要。
这就是我的意思的例子:
\set curdate current_date
\copy (SELECT * FROM table) To 'C:/users/user/desktop/table_ ' || :curdate || '.csv' WITH DELIMITER AS ';' CSV HEADER
例外的是\copy
元命令不扩展变量是(同时)有记录的 https://www.postgresql.org/docs/current/app-psql.html#APP-PSQL-META-COMMANDS-COPY
与大多数其他元命令不同,该行的整个剩余部分始终被视为 \copy 的参数,并且在参数中既不执行变量插值也不执行反引号扩展。
要解决此问题,您可以分多个步骤构建、存储和执行命令(类似于 Clodoaldo Neto 给出的解决方案):
\set filename 'my fancy dynamic name'
\set command '\\copy (SELECT * FROM generate_series(1, 5)) to ' :'filename'
:command
有了这个,你需要加倍(转义)任何\
and '
在嵌入的元命令中。请记住\set
将所有其他参数连接到第二个参数,因此参数之间需要引号空格。您可以在执行之前显示命令(:command
) with \echo :command
.
作为本地的替代方案\set
命令,您还可以使用 SQL 构建命令服务器端(最好的方法取决于动态内容的来源):
SELECT '\copy (SELECT * FROM generate_series(1, 5)) to ''' || :'filename' || '''' AS command \gset
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)