我在尝试使用 COPY 函数将查询导出到 CSV 时遇到了一些问题。
如果未在 TO
上使用自定义文件名,COPY 运行正常并成功导出查询。
此问题与向创建的文件名添加“日期戳”(有点)有关。
declare var1 varchar(25);
DECLARE STATEMENT TEXT;
select into var1 current_date -1;
STATEMENT := 'COPY (SELECT * from myTable) To ''E'C:\\Exports\\export_'||var1||'.csv' ''With CSV';
EXECUTE STATEMENT;
在这种情况下,var1
得到一个类似于 2013-12-16
的值,我需要将其添加到文件名中以获得 export_2012-12-16 .csv
我假设 '
放错了地方。我已经尝试了几种组合但没有成功,当然错误是 ERROR: syntax error at or near "C"
。
最佳答案
plpgsql 代码可以像这样工作:
...
DECLARE
var1 text;
BEGIN
var1 := to_char(current_date - 1, 'YYYY-MM-DD');
EXECUTE $$COPY (SELECT * from myTable)
TO E'C:\\Exports\\export_$$ || var1 || $$.csv' WITH CSV$$;
...
你的引语乱七八糟。使用 dollar-quoting简化。请注意,此处在 SO 上突出显示的语法具有误导性,因为它不理解美元引用。
DECLARE
只需要一次(虽然不是错误)。另外,BEGIN
丢失了。
to_char()
使日期的文本表示独立于语言环境。
关于sql - 使用自定义文件名路径复制 csv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20636947/