OCI Database with PostgreSQLで拡張機能を利用するには

# はじめに

OCI Database with PostgreSQLはOracle Cloud上で利用できる PostgreSQL のフルマネージドな DBaaS になります。フルマネージドなDBaaSという事もあり、PostgreSQLで利用できる拡張機能は全て利用できるわけではありません。また、「デフォルトで利用できる拡張機能」と「管理者対応の拡張機能」があります。

- [PostgreSQLを使用したOCIデータベースでサポートされるPostgreSQL拡張機能](https://docs.oracle.com/ja-jp/iaas/Content/postgresql/extensions.htm)

「管理者対応の拡張機能」を利用したい場合には、管理者が拡張機能を利用できるようにしたうえで create extension を行う必要があります。難しい作業では全くありませんが、あまり紹介されていないのでここで簡単に紹介します。

未設定の時に create extension を行っても次のようにエラーが出てインストールできません。

```SQL:create extension
postgres=> create extension vector;
ERROR:  Extension : vector is not allowed
```

# OCI Database with PostgreSQLの設定

最初に書いたとおり、OCI Database with PostgreSQLはフルマネージドなDBaaSになります。データベースが稼働するインフラとなるOS部分へアクセスすることができないため、オンプレの場合だと postgresql.conf ファイルで実施しているような設定を別途行う必要があります。

OCI Database with PostgreSQLでは、基本的には左ペインの「構成」で設定を行うことが可能です(Amazon RDSのパラメータグループ／オプショングループのようなもの)。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2313926/d3adc001-61ae-e6cd-5de9-d3d198fca81a.png)

シェイプ（CPUのモデルや数）に応じてそれぞれデフォルトの「構成」があります。基本的にデフォルトの「構成」には拡張機能は入っていないため、そのデフォルト構成を元に「カスタム構成」を作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2313926/ebe40df2-b205-77a6-8088-c179f60163d1.png)

構成の作成時に、拡張機能を選択することが可能です。
今回は pgvector (vector) を追加してみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2313926/b6f41ac7-06ac-c868-59d8-d0f661c73f21.png)

作成した「カスタム構成」をインスタンスに紐づけます。
構成の紐づけを行う場合、内部的にはプロセス再起動が走るようで、数秒接続できないタイミングがあります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2313926/8900a85d-72d9-89ab-55e2-677a8b13dc25.png)

```SQL:カスタム構成紐づけ時の挙動(3秒程度接続がエラーになる)

 id |             dt
----+----------------------------
 37 | 2024-12-21 08:36:42.352618
(1 row)

Sat Dec 21 08:36:42 GMT 2024
psql: could not connect to server: Connection refused
        Is the server running on host "10.0.2.155" and accepting
        TCP/IP connections on port 5432?
Sat Dec 21 08:36:43 GMT 2024
psql: could not connect to server: Connection refused
        Is the server running on host "10.0.2.155" and accepting
        TCP/IP connections on port 5432?
Sat Dec 21 08:36:44 GMT 2024
psql: could not connect to server: Connection refused
        Is the server running on host "10.0.2.155" and accepting
        TCP/IP connections on port 5432?
Sat Dec 21 08:36:45 GMT 2024
 id |             dt
----+----------------------------
 38 | 2024-12-21 08:36:46.488404
(1 row)

Sat Dec 21 08:36:46 GMT 2024
```

紐づけ後に create extensionを実行することで、pgvectorをインストールすることができます。

```SQL:create extension
postgres=> create extension vector;
CREATE EXTENSION

postgres=> \dx
                             List of installed extensions
  Name   | Version |   Schema   |                     Description
---------+---------+------------+------------------------------------------------------
 plpgsql | 1.0     | pg_catalog | PL/pgSQL procedural language
 vector  | 0.7.2   | public     | vector data type and ivfflat and hnsw access methods
(2 rows)

```

# まとめ

OCI Database with PostgreSQLで拡張機能をインストールするための手順を整理してみました。OCI Database with PostgreSQLはまだGAして1年程度の新しいサービスですが、OCI上でフルマネージドなPostgreSQLを利用したい場合には管理しやすいサービスになりますので、ぜひ使ってみましょう。

#### おまけ

一度インストールした拡張機能は、その拡張機能が入っていない「構成」を適用しても引き続き利用できるようです。例えば、今回は vector を利用可能な「構成」をインスタンスに紐づけて create extension しましたが、インストールした後に vector が利用できない「構成」に変更しても引き続き vectorはインストールされており、利用可能でした。
仕様通りなのかはわかりませんが、何かの拍子に使えなくなるかもしれませんので利用するときには注意しておくと良いでしょう。