はじめに
centos7で、pgadmin4 を利用してpostgresqlを参照しているが、毎回手動でサーバを登録するのが面倒なので、省力化する方法を考えてみました。
調べてみると
pgadmin4 のデータファイルは、centos7にインストールした場合、/var/lib/pgadmin/pgadmin4.db というファイルで管理されており、sqlite3 というRDBのようです。
※ pgadmin4 は yum でインストールしました
テーブル構造
# sqlite3 /var/lib/pgadmin/pgadmin4.db
でDBにログインできます。
ログイン後は、
.schema
コマンドで、テーブルの内容が出力されます。
いくつかテーブルがあるようですが、関係するテーブルは、
- server_group
- user
- server
の3つのようです。
それぞれのテーブルは以下のような情報が格納されているようです。
1. server_group
カラム名 | 内容 |
---|---|
id | シーケンス値 |
user_id | userテーブルのidカラムの値 |
name | 名称 |
2. user
カラム名 | 内容 |
---|---|
id | シーケンス値 |
pgadminにログインするときのID | |
password | |
active | |
confirmed_at | |
materpass_check |
今回は、上記2テーブルについては、すでに登録されているものを使用しますので、最後のserverテーブルにinsertすべき値について考えてみます。
3. server
カラム名 | 内容 | insertした値(空白の個所は無視) |
---|---|---|
id | シーケンス値 | serverテーブルのidの最大値+1 |
user_id | userテーブルのIDカラムの値 | userテーブルから取得した値 |
servergroup_id | servergroupテーブルのIDカラムの値 | servergroupテーブルから取得した値 |
name | 表示される名称 | 任意の値 |
host | アクセス先DBのホスト名 | アクセス先DBのIPアドレス(xxx.yyy.zzz.aaa) |
port | アクセス先DBのポート番号 | 通常は5432 |
maintenance_db | postgrers | |
username | アクセス先DBのユーザ名 | 同左 |
password | パスワード(暗号化方式等は不明) | |
role | ||
ssl_mode | 'prefer' | |
comment | ||
discovery_id | ||
hostaddr | ||
db_res | ||
passfile | ||
sslcert | '/.postgresql/postgresql.crt' | |
sslkey | '/.postgresql/postgresql.key' | |
sslrootcert | ||
sslcrl | ||
sslcompression | ||
bgcolor | ||
fgcolor | ||
service | ||
use_ssl_tunnel | ||
tunnel_host | ||
tunnel_port | 22 | |
tunnel_username | ||
tunnel_authentication | ||
tunnel_identity_file | ||
connect_timeout | ||
tunnel_password |
アクセス方法
sqlを作成して、sqlite3コマンドで実行する方法もありますが、javaのプログラムからアクセスすることにしました。
jdbcドライバは、mavenの場合は以下のようになります。
<dependency>
<groupId>org.xerial</groupId>
<artifactId>sqlite-jdbc</artifactId>
<version>3.30.1</version>
</dependency>
Connectionの取得は下記のようになります。DriverManager.registerDriver()は不要のようです。
DriverManager.getConnection("jdbc:sqlite:/var/lib/pgadmin/pgadmin4.db")