【OCI】OCIが提供しているManagedのPostgreSQLを使ってみる

# はじめに

今までOracle Cloud Infrastructure（OCI）にはOracleDBやMySQLは
ありましたが、なぜか（？）PostgreSQLがありませんでした。
しかし、ついにリリースされたということで、PostgreSQLを軽く
触ってみたいと思います。

■参考
OCI Database with PostgreSQL
https://docs.oracle.com/en-us/iaas/Content/postgresql/home.htm

今回検証してみる環境はパブリックサブネットに作成した
Compute（Oracle Linux）からプライベートサブネットに立てた
PostgreSQLにアクセスするシンプルな構成となります。

■構成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/5ff91afa-3048-1956-8260-5a9ea244a6ba.png)

■事前準備
・アカウント
Compute, PostgreSQLが使用できるOCIアカウントを準備

・ネットワークの設定
VCN、サブネット（パブリック、プライベート）、インターネットゲートウェイ、
セキュリティリスト等を作成しておき、インターネットからSSH(Port 22)で
アクセスできるように準備しておきます。
またパブックサブネットにあるComputeからプライベートサブネットのPostgreSQLに
アクセスできるようにプラベートサブネット側のセキュリティリストに
Port 5432を設定しておきます。

ネットワークの作成方法についてはこちらを参考にします。
https://oracle-japan.github.io/ocitutorials/beginners/creating-vcn/

・Computeの作成
PostgreSQLにアクセスするためのCompute VMを作成します。
外部からアクセスできるようにパブリックサブネットに配置します。

Computeの作成方法についてはこちらを参考にします。
https://oracle-japan.github.io/ocitutorials/beginners/creating-compute-instance/

◆目次
1.PostgreSQLの作成
2.PostgreSQLに接続するための環境を設定
3.PostgreSQLへのアクセステスト

## 1.PostgreSQLの作成
それでは早速、PostgreSQLの作成をしていきます。

左上メニュー[Ξ]からデータベース → PostgreSQLの下にあるDBシステムを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/77a19eb8-dd6f-2631-b386-b67b21654328.png)

続いてPostgreSQLデータベースの作成を実行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/ac4d04d5-bb88-801c-f237-96a3348cde12.png)

新規データベースの作成を選択し、次へ進みます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/324028a5-8f32-4dc6-15c1-6e17689f45f5.png)

データベース名の入力とバージョンを選択し、下にスクロールします。
※バージョンは2024年1月29日時点で14しか選択できない状況です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/6d5206bd-6adc-1ea9-08a7-8a19fe931b29.png)

ノード数、Performance tier、シェイプを選択し、下にスクロールします。
ここでは以下のように選択しています。
ノード数: 1
Performance tier: 300 IOPS (※現時点では300 IOPSしか選択できません)
OCPU数: 4
シェイプ: PostgreSQL.VM.Standard.E4.Flex.4.64GB (OCPU 4／RAM 64GB)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/42041ccb-4a6c-5346-e988-938ce8a9ef4f.png)

予め作成しておいたVCNとプライベートサブネットを選択し、下にスクロールします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/edc47e67-3d46-3023-2d97-7524e181017d.png)

ユーザ名を入力し、パスワードオプションはInput passwordを選択し、
パスワードを入力してから下にスクロールします。
※OCI Vaultを選択すれば、パスワードはそちらで管理できますが、
今回はパスワード入力の方を使います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/84340e42-bf27-b247-6aff-4953d3753f02.png)

バックアップ、メンテナンスは今回は設定しないので
何もせずそのまま次へボタンを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/455b97ba-e862-d86a-1f27-8f311a3dac32.png)

最後に設定内容を確認したら送信ボタンを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/7222db7c-0adc-8f3c-03e3-5aef86b40bee.png)

PostgreSQLを作成してしばらく経つと以下のように
ACTIVEステータスとなりますので、名前のリンクをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/5314c063-51b8-8d83-edb2-941614fb82be.png)

この詳細ページに表示されているEndpoint、FQDNは後続の接続で
使用しますので、書き留めておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493138/bb83bbe9-8322-9992-bcd0-34992b4a321e.png)

以上でPostgreSQLの作成は終了です。

## 2.PostgreSQLに接続するための環境を設定
パブリックサブネット上に作成されているCompute内にPostgreSQLの
実行環境を作ります。
※今回はOCIとバージョンを合わせてPostgreSQL 14を使用します。

Oracle Linuxにsshでログインしたらrootで以下の作業を行います。

PostgreSQLのダウンロード
```
sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm
```

OS標準のモジュールを無効化
```
sudo dnf -qy module disable postgresql
```

PostgreSQLのインストール
```
sudo dnf install -y postgresql14-server
```

※今回はOCIのPostgreSQLに接続するだけなので
上記の作業だけとなります。

以上でPostgreSQLに接続するための環境を設定は終了です。

## 3.PostgreSQLへのアクセステスト
OCIに立てたPostgreSQLにアクセスしてみます。

Oracle Linuxからそのままpsqlで接続します。
psql -h [Endpoint or FQDN] -U postgres

※今回はEndpointで接続します。
```
psql -h 10.0.1.97 -U postgres
```

パスワードを入力して、接続が上手くいくと次のようになります。
```
[opc@postgre ~]$ psql -h 10.0.1.97 -U postgres
Password for user postgres: 
psql (14.10, server 14.9)
SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off)
Type "help" for help.

postgres=>
```

あとはデータベースを作成して、
```
create database testdb;
```

データベースを切替え、
```
\c testdb;
```

テーブルを作成し、
```
create table tbl(id int, name varchar(50));
```

データを登録します。
```
insert into tbl values(1, 'test01');
```

最後にSELECTしてみるとデータが表示されます。
```
testdb=> select * from tbl;
```
```
 id |  name  
----+--------
  1 | test01
(1 row)
```

以上でPostgreSQLへのアクセステストは終了です。

## おわり
以上、OCIに立てたManagedのPostgreSQLを簡単に使うことができました。