3

ヘッダーに引用符を強制しようとしています。

Copy (
    SELECT *
    FROM "table"
)
TO <path> CSV HEADER FORCE QUOTE *;

これで、ヘッダーを取得し、ヘッダー以外はすべて引用符で囲みます。だから私は正反対をしたいです。

TO <path> CSV HEADER FORCE QUOTE HEADER;

TO <path> CSV FORCE QUOTE HEADER;

動作しませんでした。

これを管理する方法はありますか?

4

1 に答える 1

7

COPY少なくとも 9.2 以前の PostgreSQL のサポートでは、そのようなオプションは利用できません。既に見てきたように、ヘッダーは引用符で囲まれていません。つまり、ヘッダーは常に自動引用モードになっているため、区切り文字またはその他の特殊文字が含まれている場合にのみ引用されます。

\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 *);

生成:

First Value,Second value,"Third value, with comma"
"1","2","3"

使用中の CSV の奇妙で素晴らしい利点をすべて理解する、より柔軟な外部ツールを使用して CSV を変換するか、外部ツールを使用して直接生成する必要があります。

このような状況では、通常、perl の DBI と DBD::Pg または Python の psycopg2 を使用してデータベースにクエリを実行し、適切な CSV ライブラリを使用して目的の CSV 方言を出力する単純な Perl または Python スクリプトを作成します。\copyこのようなスクリプトは単純になる傾向があり、CSV を解析して書き換えるよりも一般的に効率的です。

于 2013-04-05T08:36:26.083 に答える