Postgresql
如果 SELECT 查詢沒有結果,Postgres 如何返回消息
如果結果為空,一直在嘗試解決如何返回消息。
我正在執行如下選擇語句:
select * from maxIDValue where max_value > 1000000 order by max_value desc;
我通過 psql 在 bash 腳本中執行它,但是結果將通過我正在工作的電子郵件發送出去。
我想知道的是,如果結果什麼都沒有返回,我是否可以得到它,所以至少輸入一條消息而不是(0 行),即使它只是一條消息,說沒有值或某種程度的東西。
我也通過 bash 嘗試過:注意:.sql 文件是上面的查詢
{ if [ "$( psql -h $SERVERNAME -U test -d Titan -tAf "/home/postgres/tools/testmaxresults.sql" )" = '1' ] then psql -h ${SERVERNAME} -U test -d Titan -f /home/postgres/tools/testmaxresults.sql >>${TMPFILE01} else echo "No Value Exists" >>${TMPFILE01} fi }
總結一下
我希望 bash 執行腳本,如果有數據,即結果,然後執行並報告(報告部分在電子郵件等方面工作)
但是選擇執行並且有0個結果然後列印/回顯“無值”
我想針對多個數據庫執行此查詢。我如何將它包含在 bash 腳本中,以便我可以針對每個數據庫執行它。
如果我執行它,它只報告最後一個數據庫,而不是兩者。
任何幫助表示讚賞。
一個簡單的 psql 解決方案是
:ROW_COUNT
在查詢後立即將 psql 變數重新註入到另一個查詢中,以在為零時返回“不存在值”文本。:ROW_COUNT
例子:
psql -At <<EOF select * from pg_class where false; -- sample query that returns nothing select case when :ROW_COUNT = 0 then 'The previous query returned nothing' end; EOF
第一個查詢將導致 :
ROW_COUNT
為非零且第二個查詢將不輸出任何內容,或者 :ROW_COUNT
為零且第二個查詢將輸出文本。psql 之外的另一個解決方案(比如由於某種原因您不能更改 SQL 腳本)是將結果重定向到專用文件,然後測試它是否為空,如果是,則將“No rows”文本放入其中。用bash:
tmpf=$(mktemp) psql -Atf script.sql > $tmpf if [[ ! -s $tmpf ]]; then echo >$tmpf "No rows"; fi cat $tmpf >> $main_output_file rm $tmpf