
クエリを実行して終了コードを確認して、データベースが初期化されていることを確認します。終了コードが0の場合、データベースクエリは承認され、データベースを初期化する必要があることを意味します。
pg_isready
Postgresのバージョンが9.3より前だから利用できなかったので、次のコードを開発しました。
while (( $(su -l postgres -c "psql -d db_name -c 'select count(1) from table_name' > /dev/null 2>&1") != 0 ))
do
echo "waiting for database to initialise"
sleep 10
done
$(su -l postgres -c "psql -d db_name -c 'select count(1) from table_name' > /dev/null 2>&1"
単独で実行すると終了コード0が返されますが、ループで使用するとエラーメッセージが表示されます。
((: != 0 : syntax error: operand expected (error token is "!= 0 ")
答え1
戻り値を直接使用できる必要があります。
while ! cmd
do
...
done