PostgreSQL 14.5 on OpenBSD 7.2: インストール
Tags: postgres, database, server, install
Published: 2023-01-14 09:24:24

## はじめに

[OpenBSD](https://www.openbsd.org/) において [7.2](https://www.openbsd.org/72.html) のリリースに伴って [PostgreSQL](https://www.postgresql.org/) が [14.5](https://www.postgresql.org/docs/release/14.5/) にアップデートされました。

最新の OpenBSD に PostgreSQL をインストールする流れをご紹介します。

### 環境

- OS: OpenBSD 7.2
- データベース: PostgreSQL 14.5

### 概観

各ステップの詳細はこの後で記載します。

```console
$ doas pkg_add postgresql-server

$ doas su - _postgresql

$ # 下記 --locale の指定は必要に応じて行います
$ # スーパーユーザーすなわち下記 "postgres" のパスワードを聞かれます
$ initdb -D /var/postgresql/data -U postgres \
      -W -A scram-sha-256 -E UTF-8 --locale=xx_XX.UTF-8

$ exit

$ doas rcctl enable postgresql
$ doas rcctl start postgresql
```

## チュートリアル

手順ごとの説明を以下に記します。

### 1. PostgreSQL サーバーのインストール

[Ports](https://www.openbsd.org/faq/faq15.html) システムからパッケージを取得してインストールします:

```console
$ doas pkg_add postgresql-server
```

出力は以下の通りでした:

```console
quirks-6.42 signed on 2023-01-13T18:22:41Z
postgresql-server-14.5:postgresql-client-14.5: ok
useradd: Warning: home directory `/var/postgresql' doesn't exist, and -m was not specified
postgresql-server-14.5: ok
The following new rcscripts were installed: /etc/rc.d/postgresql
See rcctl(8) for details.
New and changed readme(s):
	/usr/local/share/doc/pkg-readmes/postgresql-server
```

### 2. データベースの初期環境構築

アクセス権限によるエラーを起こさないように、`_postgresql` ユーザーにスイッチします。こちらのユーザーは、上の手順で作成されています:

```console
$ doas su - _postgresql
```

[`init_db`](https://www.postgresql.org/docs/current/app-initdb.html) を実行します。データベース・クラスターが作成されます。
この時 `/var/postgresql` ディレクトリが自動でつくられます:

```console
$ initdb -D /var/postgresql/data -U postgres \
      -W -A scram-sha-256 -E UTF-8 --locale=xx_XX.UTF-8
```

上の `-U postgres` (`--user=...` と同じ) にはスーパーユーザーの名前をセットします。

出力は以下のように始まりました:

```console
The files belonging to this database system will be owned by user "_postgresql".
This user must also own the server process.

The database cluster will be initialized with locale "ja_JP.UTF-8".
initdb: could not find suitable text search configuration for locale "ja_JP.UTF-8"
The default text search configuration will be set to "simple".

Data page checksums are disabled.
```

ここで `-W` (`--pwprompt` と同じ) を指定した場合、パスワードをたずねられます。
`-W` と`-A scram-sha-256` (`--auth=...` と同じ) を指定するのは、セキュリティ保護のためです。

ご参考までに readme (`/usr/local/share/doc/pkg-readmes/postgresql-server`) の内容を引用します:

> It is strongly advised that you do not work with the postgres dba account
> other than creating more users and/or databases or for administrative tasks.
> Use the PostgreSQL permission system to make sure that a database is only
> accessed by programs/users that have the right to do so.

それから `--locale=...` ですが、こちらは必要に応じて指定します。en_US.UTF-8 で良い場合は、指定不要です。

さて、パスワードを入力しましょう:

```console
Enter new superuser password: 
Enter it again: 
```

以下が出力されました:

```console
creating directory /var/postgresql/data ... ok
creating subdirectories ... ok
selecting dynamic shared memory implementation ... posix
selecting default max_connections ... 20
selecting default shared_buffers ... 128MB
selecting default time zone ... Asia/Tokyo
creating configuration files ... ok
running bootstrap script ... ok
performing post-bootstrap initialization ... ok
syncing data to disk ... ok

Success. You can now start the database server using:

    pg_ctl -D /var/postgresql/data -l logfile start

```

やりました。成功です。`exit` を実行して `_postgersql` ユーザーセッションを終了しましょう:

```console
$ exit
```

### 3. PostgreSQL サーバーの起動

デーモンを有効化しましょう。そして起動します:

```console
$ doas rcctl enable postgresql
postgresql(ok)

$ doas rcctl start postgresql
postgresql(ok)
```

### 4. サーバーを使う

Postgresql サーバーのデーモンが有効になり、起動されました。RDBMS として使うことができるようになっています。クライアントからのリクエストを処理してくれます。

設定ファイルには `postgresql.conf` や `pg_hba.conf` などがありますが、これらは自動で生成されています。また [`psql`](https://www.postgresql.org/docs/current/static/app-psql.html) コマンドもインストールされています。

#### 設定ファイル

[サーバー周りの設定 (英語)](https://www.postgresql.org/docs/current/runtime-config.html) を行う時に使います。

#### `psql` コマンド

ターミナルから利用できる PostgreSQL 操作用のフロントエンドツールです。先ほどたずねられたパスワードを入力することで、サーバーに接続できます:

```console
$ psql -U postgres
Password for user postgres:
```

迎え入れられるでしょう :)

```sql
psql (14.5)
Type "help" for help.

postgres=#
```

## 参考

- [OpenBSD アップグレード 7.1 から 7.2 へ](https://obsd.solutions/ja/blog/2023/01/14/openbsd-upgrade-71-to-72/index.html)