knowledgeのDBをPostgresqlに変更してみた

knowledgeは、デフォルトでは簡易DBを使用しています。
推奨はPostgresqlへの切り替えを推奨しているので、DBをPostgresqlに切り替えてみました。
knowledgeのマニュアルを見ながらやってみたけれど、何回か躓いたので、備忘録として。

knowledgeのインストール(CentOS7.3)については、↓で書いています。
http://qiita.com/htakeda/items/defd0ee58615bb46b96f

## 1. Postgresqlのインストール
せっかくだから、最新のPostgresをインストールしてみます。

リポジトリと、postgresqlのパッケージのインストール。

```
# wget https://download.postgresql.org/pub/repos/yum/9.6/redhat/rhel-7-x86_64/pgdg-centos96-9.6-3.noarch.rpm
# rpm -ivh pgdg-centos96-9.6-3.noarch.rpm
# yum install postgresql96 postgresql96-server postgresql96-devel postgresql96-libs
```

## 2. DBの初期化と各種設定ファイルの変更

・DBの初期化

```
/usr/pgsql-9.6/bin/postgresql96-setup initdb
```

```
# cd /var/lib/pgsql/9.6/data/
```

・変更箇所のみ抜粋
アクセス権のIPアドレスは、任意のIPアドレスに変更。

``` /var/lib/pgsql/9.6/data/postgresql.conf
listen_addresses = '*'                  # what IP address(es) to listen on;
log_line_prefix = '<%t %u %d>'                  # special values:
```

``` /var/lib/pgsql/9.6/data/pg_hba.conf
# "local" is for Unix domain socket connections only
#local   all             all                                     peer
local   all             all                                     trust
# IPv4 local connections:
host    all             all             127.0.0.1/32            ident
host    all             all             192.168.0.0/16          password
# IPv6 local connections:
host    all             all             ::1/128                 ident
```

## 3. 起動とユーザ作成

・DBの起動

```
systemctl start postgresql-9.6
```

・自動起動設定

```
systemctl enable postgresql-9.6
```

・ユーザ作成

```
su - postgres
$ createuser knowuser -d -l -P
```

- ユーザ名：knowuser
- データベース作成権限：-d
- ログイン許可：-l
- パスワード設定：-P


・DB作成

```
$ createdb knowledge -U knowuser
```

- DB名：knowledge
- 接続ユーザ：knowuser

**※ テーブルは作成しません。**

・確認

```
$ psql -l
$ exit
```

・DBにアクセスできるか確認。

```
# psql -h 192.168.XXX.XXX -U knowuser -d knowledge
```

## 4. DB切り替え準備

JDBCのダウンロード

https://jdbc.postgresql.org/download.html

jarファイルをwgetで取得します。

```
cd /usr/share/java
wget https://jdbc.postgresql.org/download/postgresql-42.1.3.jar
```

/etc/profileファイルの内容を変更します(postgresqlの設定追加)

```
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.141-1.b16.el7_3.x86_64
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/jre/lib:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar:/usr/share/java/postgresql-42.1.3.jar
export CATALINA_HOME=/usr/local/tomcat

export KNOWLEDGE_HOME=/home/tomcat/.knowledge
export JAVA_OPTS="-Dfile.encoding=UTF-8 \
  -Dnet.sf.ehcache.skipUpdateCheck=true \
  -XX:+UseConcMarkSweepGC \
  -XX:+CMSClassUnloadingEnabled \
  -XX:+UseParNewGC \
  -XX:MaxPermSize=128m \
  -Xms512m -Xmx512m"
```

一旦rebootして、自動起動の確認を行う。
自動起動しない場合は、``/etc/profile``の反映とtomcatの再起動を行う。

```
# source /etc/profile
# /usr/local/tomcat/bin/shutdown.sh
# /usr/local/tomcat/bin/startup.sh
```

## 5. 切り替え作業
1. tomcatの起動後、ブラウザからknowledgeを開きます。
2. 管理者権限でログインし、「システム設定」を開きます。
3. 「データ管理」-「データベースの接続先変更」を開きます。
4. 各設定を埋めていきます。

```
URL：jdbc:postgresql://192.168.xxx.xxx:5432/knowledge
   ※ knowledgeはDB名

user: knowuser(DBにログインするユーザ)
password: xxxxxxxx(DBのパスワード)
schema: public
max connection:0
auto commit: false
```

5.「組み込みDBで保存していたデータをカスタム設定のDBにコピー」をクリックします。

少しだけ時間がかかるけれども、保存されます。

DBの切り替え完了。