尝试使用COPY函数将查询导出为CSV时,我遇到了一些问题。
如果TO
上未使用自定义文件名,则COPY运行正常并成功导出查询。
问题与在创建的文件名中添加“datestamp”(有点)有关。
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"
。
答案 0 :(得分:1)
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()
使日期的文本表示独立于语言环境。