我在我正在使用的 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')"