はじめに
QiitaでPostgreSQLのデータベースの名称をシェルスクリプトのリスト変数にセットする方法という記事を見つけたので、僕もやってみました。
検証環境
1
2
3
4
5
| $ 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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| #!/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)
例
1
2
3
4
5
6
7
8
9
| ...
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が格納されているサーバに対してスクリプトを実行
1
2
3
4
5
6
7
| $ ./db_list.sh 10.2.3.4 'scott' 'norton'
aaa
bbb
ccc
template0
template1
postgres
|