Raspberry Pi Zero 2 W にPostgreSQLをインストールしてpgAdmin4の接続先設定まで

## はじめに
Raspberry Pi Zero2 W に PostgreSQL をインストールし、データベースとスキーマ、テーブルを作成するところまでを備忘として残したものです。
使用したのは32bit版のRaspberry Pi OS で、通常通りMicroSD（32GB）に書き込んで使用しています。扱うデータ量もそう多くない想定なので、外付けSSDは使用していません。

## 目次
手順としては、下記を順に実行して完成です。
1. [PostgreSQL のインストール](#1-postgresql-のインストール)
2. [PostgreSQL ユーザーの作成](#2-postgresql-ユーザーの作成)
3. [データベースの作成](#3-データベースの作成)
4. [認証設定](#4-認証設定)
5. [pgAdminの設定](#5-pgadminの設定)

## 1. PostgreSQL のインストール
まず、最新のパッケージリストを更新し、PostgreSQL をインストールします。

```bash
sudo apt update
sudo apt-get install postgresql
```

インストールが完了したら、postgresユーザーが作成され、psqlコマンドが使用できるようになります。まずはLinuxユーザーのほうのパスワードを設定しておきます。
```bash
sudo passwd postgres
```


## 2. PostgreSQL ユーザーの作成
Linux上で既に使用しているユーザー（名）をPostgreSQLでもそのまま使用したい場合でも、同じユーザ名で作成しておく必要があります。
パスワードも同時に設定しておく。
`-P オプションを指定することで、コマンド実行時にパスワードの入力が求められます。`
```bash
su - postgres
createuser -P ユーザー名
```
※PostgreSQLでは、基本的にすべて小文字で設定してしまうのが良いです。大文字を使用する場合、毎回ダブルコーテーションで括る必要があるため面倒です。

## 3. データベースの作成
postgresユーザーのまま実行します。
```bash
createdb データベース名
```

作成したデータベースに接続します。
```bash
psql データベース名
```

無事に接続できれば、コンソール上でSQLを実行することができます。
```sql
-- 登録済みのユーザ
SELECT rolname from pg_roles;
-- postgresユーザの（DB）パスワード設定
ALTER USER postgres WITH PASSWORD '新しいパスワード';
```

## 4. 認証設定
このままだと、PostgreSQL上でのユーザーとLinux上でのユーザー名が一致していないとデータベースに接続することができないうえ、pgAdminをインストールしたクライアントからの接続を受けることができないため、設定ファイルを編集します。
postgresユーザー、または管理者権限で編集を行います。


`/etc/postgresql/15/main/pg_hba.conf`
「"local" is for Unix domain socket connections only」のMETHODをmd5に変更する。
```conf
# DO NOT DISABLE!
# If you change this first entry you will need to make sure that the
# database superuser can access the database using some other method.
# Noninteractive access to all databases is required during automatic
# maintenance (custom daily cronjobs, replication, and similar tasks).
#
# Database administrative login by Unix domain socket
local   all             postgres                                peer

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     md5
```

同じファイルに対して、ADDRESS 「192.168.0.0/24」の行を追加します。（md5で）

```conf
# IPv4 local connections:
host    all             all             127.0.0.1/32            scram-sha-256
host    all             all             192.168.0.0/24          md5
```
この設定により、すべてのローカルネットワークからの接続を受け付けるようになります。
セキュリティ上問題がある場合は具体的にIPアドレスを絞るなど、検討が必要になるが自宅でなんとなく使えればいいかなくらいの感覚なら、このまま設定するのがよいかと。


`/etc/postgresql/15/main/postgresql.conf`
アクセス自体の許可を設定します。
「listen_addresses」の値を変更します。

```conf
#------------------------------------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
#------------------------------------------------------------------------------

# - Connection Settings -

listen_addresses = '*'		# what IP address(es) to listen on;
```


すべての変更を保存したら再起動します。
```shell
sudo service postgresql restart
```

## 5. pgAdminの設定
pgAdminをインストールしましょう。（手順は割愛）

インストール後、pgAdminにてサーバーの追加を行います。
[オブジェクトエクスプローラ] にて、サーバアイコンを右クリックし、[サーバーの登録] をクリックする。
```
・ホスト名/アドレス：ラズパイのIPアドレス
・管理用データベース：上手順で作成した"データベース名"
・パスワード：設定する
・パスワードを保存：チェックする（面倒なので）
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2064950/8ced387d-1f12-38ea-203b-72056df3bf4d.png)


##
接続できてしまえば、スキーマの追加やテーブルの追加は、GUIで直感的に（...）できます。
接続するユーザーとデータベースの組み合わせには気を付けましょう。（忘れてCREATEしようとして権限がない、と怒られがち）


インストールの手順は、下記サイト様が非常に参考になりました。
https://raspi.taneyats.com/entry/install-postgresql


以上です。