[英]How to run a SQL command from a bash variable via ssh and psql?
我確實想通過ssh postgres@hostname psql dbname -c SQL_COMMAND
運行存儲在 bash 變量中的 SQL 命令。
考慮到 SQL 命令中有字符串,運行它的正確方法是什么,所以它被正確地轉義了?
示例: SQL_COMMAND="SELECT 'aaa'"
我正在尋找一種處理轉義的解決方案,這樣我就可以輕松運行其他 SQL 命令而不必自己轉義它們。
在 shell 中這樣做是很尷尬的。 鑒於選擇,我會使用一種對元字符不太敏感的腳本語言。 殼只是痛苦。 我知道獲得可靠原始字符串的唯一方法是使用(a)像read
這樣的輸入函數; (b) 臨時文件; 或 (c) 帶有引用的此處文檔。
這就是我要做的,利用ssh
通過 stdin 的方式:
$ ssh hostname psql <<"__END__"
SELECT 'aaa!*#${notavar}' FROM "generate_series"(1,2);
__END__
?column?
------------------
aaa!*#${notavar}
aaa!*#${notavar}
(2 rows)
不幸的是,您不能輕松地將其包裝在$( ... )
以將其存儲在 shell 變量中。 它似乎可以工作,但某些元字符如!
會引起問題。
通過執行psql -c "$SQLCOMMAND"
似乎對我psql -c "$SQLCOMMAND"
% export SQLCOMMAND='select "generate_series"(1, 5, 1);'
% echo $SQLCOMMAND
select "generate_series"(1, 5, 1);
% psql -c "$SQLCOMMAND"
generate_series
-----------------
1
2
3
4
5
(5 rows)
或者
% export SQLCOMMAND="SELECT 'aaa' FROM \"generate_series\"(1,2);"
% echo $SQLCOMMAND
SELECT 'aaa' FROM "generate_series"(1,2);
% psql -c "$SQLCOMMAND"
?column?
----------
aaa
aaa
(2 rows)
如果您可以正確地將 SQL 語句放入變量中,那么雙引號psql
的-c
選項的參數似乎有效。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.