コマンドラインでpsqlコマンドでSQLを実行する時に、SQLに「'(シングルクォーテーション)」が含まれている場合の対処方法
コマンドラインでpsqlコマンドを実行する場合、
psql -U postgres -c '(シングルクォーテーション)実行するSQL'(シングルクォーテーション) DB名
とする。
この場合、「実行するSQL」の中に「'(シングルクォーテーション)」が入っている時は、どうしたよいか。
例えば、実行するSQLを「copy テーブル名 to '(シングルクォーテーション)出力先'(シングルクォーテーション) データベース名」とした場合、「出力先」を囲む「'(シングルクォーテーション)」は、そのまま書いてよいだろうか。
《エラーになるコマンド例》
psql -U postgres -c 'copy nobuneko_table1 to '/home/nobuneko/tmp/test1.txt'' nobuneko_database
ERROR: syntax error at or near "/" at character 23
LINE 1: copy nobuneko_table1 to /home/nobuneko/tmp/test1.txt
そのまま「'(シングルクォーテーション)」を書くのでは、エラーになるようだった。
'(シングルクォーテーション)のエスケープ文字などがあるのだろうか、と考えて試したが、うまくいかず、さて、どうしようか、と思って適当に試していたら、あっさりと解決した。
《成功するコマンド例》
psql -U postgres -c "copy nobuneko_table1 to '/home/nobuneko/tmp/test1.txt'" nobuneko_database
「実行するSQL」を「'(シングルクォーテーション)」ではなく、「"(ダブルクォーテーション)」で囲めばよかったようだ。
簡単なことだったが、知らないと、これだけ悩んでしまう...。
※上記は、PostgreSQL 8.1で試した場合の例。