使用しているbashスクリプトの最後にいくつかのコードを追加しました。ここに示すコードは、csvを私のpostgresテーブルにコピーし、test_tableのヘッダー列から角括弧、引用符、二重引用符を削除するように設計されています。
#copy csv to table
psql -U postgres -d ebay_sold -c "COPY test_table (item_number,title,url,price) FROM '/home/perl_experiments/xmlcsv.txt' (DELIMITER('|'))"
#Remove brackets, then double qotes, then single quotes from title column
psql -U postgres -d ebay_sold -c "UPDATE test_table SET title = regexp_replace(title, '[()]', '', 'g')"
psql -U postgres -d ebay_sold -c "UPDATE test_table SET title = regexp_replace(title, '"', '', 'g')"
psql -U postgres -d ebay_sold -c "UPDATE test_table SET title = regexp_replace(title, '''', '', 'g')"
Postgresテーブルにコピーすると正常に動作します。角かっこ、二重引用符、および一重引用符の削除は、postgresで手動で適用したときに期待どおりに機能します。ただし、bashスクリプトを実行すると、次の結果が表示されます。
line 27: syntax error: unterminated quoted string
私が受けているエラーは行に関連しています
psql -U postgres -d ebay_sold -c "UPDATE test_table SET title = regexp_replace(title, '"', '', 'g')"
私が言ったように、このコマンドはpostgresにログインしている間に手動で実行するとうまくいきます。 bashでスクリプトを実行するときにこのエラーが発生する理由を知っている人はいますか?
ベストアンサー1
あなたのライン:
psql -U postgres -d ebay_sold -c "UPDATE test_table SET title = regexp_replace(title, '"', '', 'g')"
問題です。二重引用符で囲まれた文字列を開きまし"UPDATE
たが、思ったより早く閉じて、次のコマンドをSQLとして実行しようとしました。
UPDATE test_table SET title = regexp_replace(title, '
これは明らかに無効です。バックスラッシュを使用して二重引用符をエスケープする必要があります。
psql -U postgres -d ebay_sold -c "UPDATE test_table SET title = regexp_replace(title, '\"', '', 'g')"