Postgresql

如果 SELECT 查詢沒有結果,Postgres 如何返回消息

  • December 3, 2021

如果結果為空,一直在嘗試解決如何返回消息。

我正在執行如下選擇語句:

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

引用自:https://dba.stackexchange.com/questions/303487