PostgreSQLサーバの全データベース名を取得し配列に格納するシェルスクリプト
はじめに
QiitaでPostgreSQLのデータベースの名称をシェルスクリプトのリスト変数にセットする方法という記事を見つけたので、僕もやってみました。
検証環境
$ uname -moi
x86_64 MacBookPro11,4 Darwin
$ bash -version
GNU bash, バージョン 5.0.3(1)-release (x86_64-apple-darwin18.2.0)
準備
db_list.sh
#!/usr/bin/env bash
declare -r DB_HOST="${1}"
declare -r DB_USER="${2}"
declare -r DB_PASS="${3}"
declare -a DB_NAME_LIST=$(
PGPASSWORD="${DB_PASS}" psql \
--tuples-only \
--no-align \
--username "$DB_USER" -h "$DB_HOST" \
-c 'SELECT datname FROM pg_database'
)
# 動作確認
for DB_NAME in "${DB_NAME_LIST[@]}"; do
echo "$DB_NAME"
done
解説
psql -l
を使えば、DBの一覧は取得できるんですが、一部扱いにくい出力箇所があります。
( template0
/ template1
/ postgres
の3つの組み込みDB)
例
...
xxxxxxx | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 |
template0 | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
yyyyyyy | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 |
zzzzzzz | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 |
...
これに対応するためにカテゴリテーブルを直接見に行っています。
使い方
以下の3つのDBが格納されているサーバに対してスクリプトを実行
- aaa
- bbb
- ccc
$ ./db_list.sh 10.2.3.4 'scott' 'norton'
aaa
bbb
ccc
template0
template1
postgres
ディスカッション
コメント一覧
まだ、コメントがありません