🐘

Rasberry Pi5にPostgre SQLの環境を構築

に公開

Raspberry PiにPostgreSQLをインストールし、外部PCから接続して書き込みを行うための手順をまとめたガイドです。

1. システム更新とPostgreSQLインストール

# パッケージリストとシステムを最新化
sudo apt update
sudo apt upgrade -y

# PostgreSQLと関連ツールをインストール
sudo apt install postgresql postgresql-contrib -y

# サービスの稼働確認 (任意)
# active (exited)やactive (running)と表示されていれば稼働中
sudo systemctl status postgresql

2. データベースと専用ユーザーの作成

セキュリティのため、外部接続用の専用ユーザーとデータベースを作成します。

# postgresユーザーでpsqlにログイン
sudo -u postgres psql

psqlのプロンプト(postgres=#)で以下を実行します。

-- 1. 新しいユーザーを作成 (パスワードは強力なものに変更)
CREATE ROLE myuser WITH LOGIN PASSWORD 'your_strong_password';

-- 2. 新しいデータベースを作成
CREATE DATABASE mydb;

-- 3. データベースの全権限を作成したユーザーに付与
GRANT ALL PRIVILEGES ON DATABASE mydb TO myuser;

-- 4. psqlを終了
\q

3. 外部接続の許可設定

PostgreSQLが外部からの接続を受け付けるように設定ファイルを変更します。

3.1. postgresql.conf の編集

どのIPアドレスからの接続を待ち受けるかを設定します。

# エディタでファイルを開く (パスのXXはバージョンに合わせて変更)
sudo nano /etc/postgresql/XX/main/postgresql.conf

Ctrl+Wでファイル内のlisten_addressesを探し、以下のように変更します。

# 変更前
#listen_addresses = 'localhost'

# 変更後 (コメントを外し、値を '*' にする)
listen_addresses = '*'

3.2. pg_hba.conf の編集

どのユーザーがどのIPから接続できるかを設定します。

# エディタでファイルを開く (パスのXXはバージョンに合わせて変更)
sudo nano /etc/postgresql/XX/main/pg_hba.conf

ファイルの末尾に、以下の行を追記します。

# TYPE DATABASE USER ADDRESS METHOD
# 任意のリモートIPからmyuserがmydbへパスワード認証で接続することを許可
host mydb myuser 0.0.0.0/0 md5

注意: 0.0.0.0/0は全てのIPを許可します。セキュリティを高めるには、接続元IPを192.168.1.0/24のように限定してください。

3.3. PostgreSQLの再起動

設定を反映させるためにサービスを再起動します。

sudo systemctl restart postgresql

4. ポート開放の確認とファイアウォール設定

4.1. ポートの待ち受け状態を確認

5432番ポートが0.0.0.0で待ち受け状態になっているか確認します。

sudo ss -lntp | grep 5432

OKな例: LISTEN ... 0.0.0.0:5432 ... と表示される。
NGな例: LISTEN ... 127.0.0.1:5432 ... や何も表示されない場合。

4.2. ファイアウォール(ufw)の設定

ufwが有効な場合のみ、以下のコマンドでポートを開放します。
(ufw: command not foundと表示された場合は、この手順は不要です)

# ufwが有効か確認
sudo ufw status

# ufwが有効(active)な場合、ポート5432を許可
sudo ufw allow 5432/tcp
sudo ufw reload

5. テーブルへの書き込み権限付与

特定のテーブル(例: mytable)にmyuserが書き込みできるように権限を付与します。

# postgresユーザーで対象のデータベースに接続
sudo -u postgres psql -d mydb

psqlのプロンプト(mydb=#)で以下を実行します。

-- mytableにSELECT, INSERT, UPDATE, DELETE権限を付与
GRANT SELECT, INSERT, UPDATE, DELETE ON TABLE mytable TO myuser;

-- (参考) 権限の確認
\dp mytable

-- psqlを終了
\q

6. 外部PCからの接続

GUIツール(DBeaver, pgAdminなど)やコマンドラインから以下の情報で接続します。

  • ホスト (Host): Raspberry PiのIPアドレス (hostname -I で確認)
  • ポート (Port): 5432
  • データベース (Database): mydb
  • ユーザー (Username): myuser
  • パスワード (Password): 手順2で設定したパスワード

Discussion