はじめに
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")
