isOwO
@isOwO

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

Postgre のcsv出力でヘッダーを""で囲みたい

解決したいこと

postgresqlでcopy を使用してヘッダーをだぶるダブルクォーテーションで囲んで出力したい。

出力例)

.csv
"name","id","age"
"田中","01","20"
"高橋","02","22"

実行コードと結果

例1)

.sql
copy (select name as """name""" ,
      id as """id""",
      age as """age"""
      from meibo_table)
to 'C:/tmp/meibo.csv' with csv header force quote *;
.csv
"""name""","""id""","""age"""
"田中","01","20"
"高橋","02","22"

例2)

.sql
copy (select name as "name" ,
      id as "id",
      age as "age"
      from meibo_table)
to 'C:/tmp/meibo.csv' with csv header force quote *;
.csv
name,id,age
"田中","01","20"
"高橋","02","22"

例3)

.sql
copy (select name as """name" ,
      id as """id",
      age as """age"
      from meibo_table)
to 'C:/tmp/meibo.csv' with csv header force quote *;
.csv
"""name","""id","""age"
"田中","01","20"
"高橋","02","22"

自分で試したこと

""で囲むために色々試したがうまくいかないです。
例1のselect句を実行すると出力されるカラム名はクォーテーションで囲まれるがcopy文内に入れるとクォーテーションが増殖します。

  • "'name'"はシングルクォーテーションで囲まれる
  • ""name""はerror
    postgres 14?15?だった気がします。
0

1Answer

Comments

  1. @isOwO

    Questioner

    回答ありがとうございます。
    結果ですが
    '"name"' はsyntax errorになってしまう
    "\"name\"" は  不正なコマンド \" と表示されます。
    バックスラッシュではエスケープができないようです。

    Documents

    エスケープ文字には、16進表記用の文字、プラス記号、単一引用符、二重引用符、空白文字以外の任意の単一文字を使用することができます。
    識別子内にエスケープ文字をそのまま含めるためには、それを2つ記述してください。

    上記文言の通りにエスケープし"""name"""をselect 単体内の実行だと問題ないのですが
    copy文内だとうまくエスケープされないみたいです。

  2. 了解です
    お力に慣れず申し訳ないです。。。

Your answer might help someone💌