And*_*ndy 3 sql csv postgresql header quote
我尝试在标题上强制行情.
Copy (
SELECT *
FROM "table"
)
TO <path> CSV HEADER FORCE QUOTE *;
Run Code Online (Sandbox Code Playgroud)
有了这个,我得到标题,除了标题之外所有都在引号中.所以我想要完全相反.
TO <path> CSV HEADER FORCE QUOTE HEADER;
Run Code Online (Sandbox Code Playgroud)
和
TO <path> CSV FORCE QUOTE HEADER;
Run Code Online (Sandbox Code Playgroud)
不工作.
知道如何管理吗?
PostgreSQL的COPY支持中没有这样的选项,至少在9.2及更早版本中.正如您已经观察到的那样,标题没有引用 - 或者更确切地说,它们总是处于自动引用模式,因此只有在包含分隔符或其他特殊字符时才引用它们:
\copy (SELECT 1 AS "First Value", 2 AS "Second value", 3 AS "Third value, with comma") TO '/tmp/test.csv' WITH (FORMAT CSV, HEADER TRUE, FORCE_QUOTE *);
Run Code Online (Sandbox Code Playgroud)
生产:
First Value,Second value,"Third value, with comma"
"1","2","3"
Run Code Online (Sandbox Code Playgroud)
您需要通过一个更灵活的外部工具来转换CSV,该工具可以理解所使用的CSV的所有奇怪和美妙的好处,或者使用外部工具直接生成它.
在这种情况下,我通常编写一个简单的Perl或Python脚本,使用perl的DBI和DBD :: Pg或Python的psycopg2查询数据库,并使用适当的CSV库输出所需的CSV方言.这样的脚本往往很简单,它们通常比\copyCSV 更有效,然后解析和重写它.