macのlocalにPostgreSQLを導入する


はじめに

PostgreSQL利用歴1週間の初心者です。
これまで勉強した内容を記事として整理することで、
知識を定着させることを目的としています。
内容については資料を読んで書いておりますが、
間違いがあればご指摘いただけると助かります。

目次

環境
概要(一刻も早くインストールしたい方は飛ばしてOK!)
インストール手順
運用上の注意
参考資料

環境

MacOS: BigSur 11.4
PostgresSQL: 13.3

概要

仕組みを知っておくと、エラーが出た時に役立つと思います。
PostgreSQLとはオブジェクト指向のRDBMSの1つです。

RDBMS [IT用語辞典](https://e-words.jp/w/RDBMS.html)

オープンソースであり、無償で使用・配布できます。
例えば、ECサイトの場合は登録ユーザ情報や購買履歴などをテーブルとして管理しているでしょう。

テーブル: 登録ユーザ情報  テーブル: 購買履歴

構成は下図のようになると思います。

postgreSQL postmaster

postmaster は、PostgreSQL のマルチユーザデータベースサーバです。
クライアントアプリケーションがデータベースに接続するためには、稼働している postmaster に (ネットワークを介して、またはローカルで) 接続する必要があります。
その後、postmaster は接続を操作するために別のサーバプロセス ("postgres") を開始します。
また、postmaster は、サーバプロセス間の管理も行います。
(中略)
1つのデータベースクラスタのデータは、必ず1つの postmaster によって管理されています。
データベースクラスタとは、同じファイルシステムの場所に格納されているデータベースの集まりのことです。

postmaster(PostgreSQLのマルチユーザDBサーバー)はpostgresの廃止予定の別名

version postmaster説明 postgres説明
12.4 https://www.postgresql.jp/document/12/html/app-postmaster.html https://www.postgresql.jp/document/12/html/app-postgres.html
7.3.4 https://www.postgresql.jp/document/7.3/reference/app-postmaster.html https://www.postgresql.jp/document/7.3/reference/app-postgres.html

ちょっとよくわからなかった  
マルチユーザDBがシングルユーザDBになっただけ?どんなプロセス動いてるの?
ソースを追いかけないといけないのかな...

インストール手順

1.Homebrewを使用してインストール

(Homebrewを使用してpostgresSQLをインストール)
% brew install postgresql

(とりあえずインストールできたか確認)
% postgres --version

2.DBの設定

(DBの符号化方式をUTF-8として作成)
% initdb /usr/local/var/postgres -E utf8

initdbコマンドはPostgreSQLサーバーアプリケーションのコマンドで、DBクラスタを新しく作成します。
ここで発生しそうなエラーは2つあります。
①すでにDBクラスタが存在している→既存のDBクラスタを削除して、再度initdbを実行
②そのユーザに作成権限がない(chownコマンドで確認)→rootで作成し、ユーザに権限を付与

3.PostgreSQLサーバーの起動

% postgres -D /usr/local/var/postgres

または
(PostgreSQLサーバーアプリケーションを使用; DBサーバーが稼働しているホスト上で実行)
$ pg_ctl -D /usr/local/pgsql/data

または
(Homebrewを使ってサービスを開始)
% brew services start postgresql

毎回データ領域(今回の場合は/usr/local/var/postgres) と入力するのが面倒な場合は、
以下のように環境変数PGDATAに登録すれば良い。

4.あとは自由にDBを操作してください
例えば...

(DB一覧を取得)
% psql -l

(新しいDBの作成)
% createdb 新しいDBの名前

(DBに接続)
% psql 接続したいDBの名前

(DBに接続したあと、ユーザの一覧を表示)
=# select * from pg_user;

ちなみに、ユーザ一覧のところに書いてある" =# "は管理ユーザでDBに接続、
” => ”は一般ユーザでDBに接続していることを表現しています。

5.最後はプロセスを終了して終わりましょう
プロセスを終了しておかないと、次回使うときに「そのプロセスは使用されているから無理」というエラーが出ます。

(PostgreSQLサーバーアプリケーションを使用; DBサーバーが稼働しているホスト上で実行)
$ pg_ctl -D /usr/local/pgsql/data stop

または
(Homebrewを使ってサービスを停止)
% brew services stop postgresql

運用上の注意

自分の環境で遊ぶだけだと意識しないのが”セキュリティ”関連の項目になります。
DBには必要なデータや顧客情報が保存されているので、不正に改ざん・削除されては業務どころか、顧客にも被害が発生します。

DBを扱うユーザが複数いる場合は特に、”最小権限の原則”を守る必要があります。
いかなる権限も与えない、閲覧権限だけ、閲覧・編集権限など細かく設定し、誤操作や内部不正の機会を与えないことが大切です。適切なアクセス制御をしましょう。(自戒)
(後の記事で書いた方がいい → 未来の自分よろしく  タスク ポイー)

参考資料

PostgreSQL12.4文書 [第2章SQL言語 2.2.概念](https://www.postgresql.jp/document/12/html/tutorial-concepts.html)

PostgreSQL7.2.3リファレンスマニュアル [postmaster](https://www.postgresql.jp/document/7.2/reference/app-postmaster.html)

PostgreSQL/PostgreSQLのユーザ一覧情報を参照する方法 (https://db.just4fun.biz/?PostgreSQL/PostgreSQL%E3%81%AE%E3%83%A6%E3%83%BC%E3%82%B6%E4%B8%80%E8%A6%A7%E6%83%85%E5%A0%B1%E3%82%92%E5%8F%82%E7%85%A7%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95)

Trademark Policy(https://www.postgresql.org/about/policies/trademarks/)