簡體   English   中英

如何通過 ssh 和 psql 從 bash 變量運行 SQL 命令?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM