Postgresql,使用 Copy 函数将结果导出到 XML 文件
Postgresql, using Copy function to export results to XML file
我写了一些 SQL 函数输出 XML 结果。由于输出大小很大,我需要将它们直接写入 xml 文件。为此,我使用 COPY 函数如下:
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>
"
https://www.postgresql.org/docs/current/static/sql-copy.html
COPY TO will terminate each row with a Unix-style newline (“\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>
"
我写了一些 SQL 函数输出 XML 结果。由于输出大小很大,我需要将它们直接写入 xml 文件。为此,我使用 COPY 函数如下:
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>
"
https://www.postgresql.org/docs/current/static/sql-copy.html
COPY TO will terminate each row with a Unix-style newline (“\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>
"