ここから本文です

シェルスクリプトでDB接続テストを行いたいです。

fly********さん

2010/10/2019:13:17

シェルスクリプトでDB接続テストを行いたいです。

シェルスクリプトでDB接続テストを行いたいのですが、
インターネットや資料を見ても、実装の仕方が分かりません。
DBに接続というよりも、特定のDB名がサーバに存在するかどうかを調べたいです。


ネットで調べたところ、「pg_connect」が使えるのかと思い、以下のシェルを作成しました。

実装内容ですが
サーバに「testDB」DBが存在しなければ、サーバにtestDBを作成します。
サーバに「testDB」DBが存在すれば、特に何もしません(既に存在するDBである事をechoでお知らせするだけです)

*****************************************************
#! /bin/sh
$dbname = "testDB";
$user = "username";
$con=pg_connect "dbname=$dbname user=$user";
if [ !$con ];then {

echo 'testDBが存在しないため、データベースを新規作成します'
psql -a -f /Desktop/sql/create_db.sql DB名 -U ユーザ名
}
else {
echo 'testDBは既に存在しています'
}
fi
*****************************************************


もしpg_connectが使えないようであれば、「psql testDB」を使おうと思っていますが、
「psql testDB」でDBが存在しない時の返り値がなんなのかもよくわかっていません。


SQLはPostgreSQLを使っています。

シェルスクリプトは今月から始めたばかりの初心者なため、分からないところがたくさんあります。
ご教授いただけましたら、よろしくお願いいたします。

閲覧数:
3,482
回答数:
2

違反報告

ベストアンサーに選ばれた回答

k_s********さん

2010/10/2021:09:59

どのバージョンをお使いですか?
最近のPostgreSQLクライアントアプリケーションではpg_connectというものはありません。
(PHPの関数と混同されていませんか)

CUIでDB一覧を表示するコマンドは
psql -l
です。

$ psql -l
List of databases
Name | Owner | Encoding
-----------------+--------------+----------
test1db | hogehogeuser | UTF8
test2db | hogehogeuser | UTF8

$ psql -l -t|gawk '{print $1}'
としてあげると、格納しているdbの一覧が取り出せると思います。

もし、1番目の引数にdb名を指定し無かったら作るというのでしたら以下のシェルになると思います。
※psql等のパスは貴殿の環境によりお通しくだされ
--
#!/bin/sh
if [ -z "$(psql -l -t|gawk '{print $1}'|egrep "^$1$")" ];then
echo $1が存在しないため新規作成します
createdb $1
else
echo $1は存在しています
fi
---

ご参考まで。

この回答は投票によってベストアンサーに選ばれました!

ベストアンサー以外の回答

1〜1件/1件中

あわせて知りたい

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる