Postgresql,使用Copy函数将结果导出到XML文件

Postgresql,使用Copy函数将结果导出到XML文件,xml,postgresql,postgresql-copy,Xml,Postgresql,Postgresql Copy,我已经编写了一些输出XML结果的SQL函数。由于输出的大小很大,我需要将它们直接写入xml文件。为此,我使用复制函数,如下所示: COPY(SELECT generate_xml_file()) TO '/Users/TEMP/test.xml' 但问题是,生成的文件在每个标记的末尾都有\n个字符。我尝试使用以下选项来删除“\n”,但无效: COPY(SELECT generate_xml_file()) TO '/Users/TEMP/test.xml' WITH NULL AS '

我已经编写了一些输出XML结果的SQL函数。由于输出的大小很大,我需要将它们直接写入xml文件。为此,我使用复制函数,如下所示:

COPY(SELECT generate_xml_file()) TO '/Users/TEMP/test.xml'  
但问题是,生成的文件在每个标记的末尾都有\n个字符。我尝试使用以下选项来删除“\n”,但无效:

 COPY(SELECT generate_xml_file()) TO '/Users/TEMP/test.xml' WITH NULL AS ' '
Postgresql中是否提供了任何工具来完成此操作?

此\n用于新行,不为空。如果使用默认tsv模式-每条新行表示为\n以区分新行和新行之间的差异,例如:

t=# copy(select query_to_xml('select datname,null blah from pg_database limit 2',false,true,'')) to stdout;
<row xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">\n  <datname>postgres</datname>\n</row>\n\n<row xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">\n  <datname>t</datname>\n</row>\n\n
因此,简单的csv选项将拯救您,例如:

t=# copy(select query_to_xml('select datname,null blah from pg_database limit 2',false,true,'')) to stdout csv;
"<row xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"">
  <datname>postgres</datname>
</row>

<row xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"">
  <datname>t</datname>
</row>

"
复制到将用Unix样式的换行符“\n”终止每一行

等等

更新

复制到标准输出或文件并不重要:

t=# copy(select query_to_xml('select datname,null blah from pg_database limit 2',false,true,'')) to '/tmp/sp.xml' csv;
COPY 1
Time: 0.481 ms
t=# \! cat /tmp/sp.xml
"<row xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"">
  <datname>postgres</datname>
</row>

<row xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"">
  <datname>t</datname>
</row>

"

显示函数或更好的构建db FIDLE-我无法重现此问题-null为“”适用于mecopyselect XMLSERIALIZE内容xmlelementname测试,query_to_xml'select*from tb2',false,true,作为文本到'/Users/TEMP/test.xml',null为'',我正在使用XMLSERIALIZE执行一些字符串操作。输出也是“文本”类型。结果如下:\n 1\n 1\n\n\n\n 2\n\n\n\n 3\n 3\n\n\n\n\n 4\n 4\n\n\n\n\n\n 5\n\n\n\n\n但这不会将结果写入文件?我使用stdout来显示结果。更改为“/path/to/file”并将其保存在文件中,或者将psql重定向到具有正确格式的文件这就是我所做的,使用copyselect XMLSERIALIZE content xmlelementname test,查询到xml“select*from tb2”,false,true,作为文本到“/Users/TEMP/test.xml”。但问题是结果中有\n。我更新了答案,证明复制目标不会更改结果。有一种方法可以消除双引号。。。结果如何?此外,每个xml字符串周围都有双引号。那不可能是有效的,是吗?