我尝试使用COPY函数将查询导出到CSV时遇到一些问题。
如果不使用TO
上的自定义文件名,则COPY运行正常并成功导出查询。
这个问题与添加一个“datestamp”(类似于)创build的文件名有关。
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$$; ...
你的报价纠结了。 使用美元报价来简化。 请注意,这里的语法突出显示是误导性的,因为它不理解美元引用。
DECLARE
只需要一次(虽然不是一个错误)。 另外, BEGIN
失踪了。
并且to_char()
使独立于语言环境的日期的文本表示。