🐕

新卒3年目DBエンジニアが教えるDB基礎講座(Postgres編第1回:Postgres導入と初期設定編)

2023/04/24に公開

初めに


某メガベンチャーでDBAを新卒から3年やっているYoujieです。
後々本を出そうと思っていますが、基本的に自社で研修資料として使おっかなーというレベルで書いています。
主に対象はLinuxはちょっとわかるけど、Postgresわかんないなという方やSQLは欠けるけどDBのinternal的な部分まで知らないよという方向けに書いています。
全何回かは不明ですが、ある程度のボリュームになろうかと思います。
internalな部分から運用管理の目線からDBをどう見るかであったり、ちょいとレベルの高いSQLも書いていく予定です。
まずはこのページで準備していきましょー

インストール


まずがPostgreSQLがなきゃ始まらないので初めて行きましょう
PostgreSQLのverはPostgreSQL14を使用します。
注意事項にも書いた通りLinuxの基本を説明は省略します。

sudo apt update
sudo apt upgrade

--ここでPostgreSQLとその追加モジュールだったり、ユーティリティを入れていきます。
ユーティリティの一例としてpg_dumpがあげられます。
sudo apt install postgresql postgresql-contrib

--起動確認
sudo systemctl status postgresql

起動確認後はActiveであることを確認してください。

PostgreSQLはインストールすると下記のようにpostgresというユーザーができており、postgresグループに所属しているとわかります。

初期設定


では続いて初期設定として簡単に設定ファイルを触っていきます。
PostgreSQLの設定ファイルは簡単に以下の3個になります。

1.postgresql.conf:
postgresql.confは、PostgreSQLデータベースの主要な設定ファイルです。このファイルには、接続設定、メモリ使用量、バックアップ、ログ、およびその他の重要な設定が含まれています。

2.pg_hba.conf
pg_hba.confは、ホストベースの認証設定ファイルです。このファイルでは、クライアントがデータベースにアクセスするための認証方法や、どのユーザーがどのデータベースに接続できるかを制御します。

3.pg_ident.conf:
pg_ident.confは、ユーザー名マッピングの設定ファイルです。このファイルでは、システムユーザーとデータベースユーザーの関連付けを定義し、認証プロセスで使用されます。これにより、特定のシステムユーザーが特定のデータベースユーザーとして認証されるように制御できます。

私も基本的に各設定ファイルの場所はあまり覚えていません。
その代わりloacteコマンドで代用しています。findでもOKです。

出てきた結果をCtrl+クリックでその設定ファイルが開きます。

postgresql.conf

listen_address - 接続される際のIPを記載
shared_buffer_memory - PostgreSQL全体で試用する共有メモリキャッシュであり、データの蓄積が進んだ際の応答性能に影響します。OSの25%程度を指定するのがベターと言われています。

pg_hba.conf
下記のように同セグメントからの接続をすべて受け付けるようにします。

pg_hba.confの書き方は以下のようになります。

  • host: 接続タイプ。ここでは、TCP / IPネットワーク経由の接続を許可することを示します。
  • all: データベース名。この場合、すべてのデータベースに対して接続を許可することを示します。
    セキュリティ上アクセスさせたくないDBはここで制御します。
  • all: 接続を許可するロール名。複数指定する場合はカンマ(,)で区切って記述
    ある部署の人間からしかアクセスさせないなどの制限をつけるにはここで制御します。
  • 192.168.56.0/24: クライアントのIPアドレスを表すネットワークアドレスとサブネットマスク。同セグメントからの接続を全部受けるようにします。
  • md5: 認証方式。この場合、md5ハッシュを使用してパスワードを認証することを示します。基本的にこれかldapのどちらかになるのかなと思います。

起動確認

起動確認を行う前に設定ファイルの変更後は設定ファイルの再読み込みもしくはサービス再起動を行う必要があります。
ここは変更するパラメータによりますのでご自身でお調べください

では接続確認を行った後にデータベースを作成して、簡単に権限をつけておきます。
権限周りの解説は別で行います。

--PstgresDBに接続します。
psql

--DBの一覧確認
\l

--現在時刻の確認
SELECT now();

--ユーザー作成
postgres=# CREATE USER 'YourName' WITH PASSWORD 'YourPassword';
CREATE ROLE
postgres=# GRANT ALL PRIVILEGES ON DATABASE postgres_lecture TO YourName;
GRANT

--exit
\q

では続いて先ほどつくったユーザーでログインしてみましょう。
エラーが出てしまうと思います。

postgres@postgres01:~$ psql -U yuu -d postgres_lecture
psql: error: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: FATAL:  Peer authentication failed for user "yuu"

なぜでしょうか??
エラーに出ているPeer認証は、PostgreSQLが動作しているオペレーティングシステムのユーザーと同じ名前のPostgreSQLユーザーに対してのみ接続を許可する方式です。
そのためpg_hba.confで設定をする必要があります。
以下のように変更後サービス再起動を行ってください。

では改めて接続確認をしていきましょう。

postgres@postgres01:~$ psql -U yuu -d postgres_lecture
Password for user yuu: 
psql (14.7 (Ubuntu 14.7-0ubuntu0.22.04.1))
Type "help" for help.

postgres_lecture=> 

では第1回は以上です。
ありがとうございましたー

次回予告

PostgreSQLのinternal、つまり内部構造に迫っていきます。
おったのしみにー!バイバーイ

参考リンク
https://www.javadrive.jp/postgresql/connect/index5.html

Discussion