💬

Postgresに入門してみる

2023/04/08に公開

背景

今までMysqlしか使ってこなかったので、勉強のためにpostgresについて、調べてまとめてみる。
10分くらいで読める内容にする。

Postgresのアーキテクチャ

クエリ実行時の流れ

クライアントとマスタプロセスの通信

  1. クライアントがpostgresに対して接続要求する
  2. postgres側で許可しているクライアントかチェックする
  3. 必要な場合はpostgresからクライアントに対して認証を要求する
  4. クライアントが認証情報を送る
  5. postgresがクライアント用にバックグラウンドプロセスを立ち上げる
  6. 以降は立ち上げたバックグラウンドプロセスとクライアントは通信する

クエリ実行

  1. 構文解析
  2. テーブル、カラム存在確認
  3. SQLの書き換え(内部的な)
  4. 実行計画作成
  5. クエリ実行

レプリケーション

ストリーミングレプリケーション

WAL(WriteAheadLogging)で行われる。
プライマリで作成されたWALをセカンダリで実行することでプリマリとセカンダリで同じ状態を作り出す。
レプリケーション構成としてはプライマリ1台に対してセカンダリをN台構築できる。
それぞれのスタンバイごとに同期レプリケーションか非同期レプリケーションにするかを設定できる。
プライマリとセカンダリでpostgresのバージョンが異なるとレプリケーションできないらしい。
レプリケーションはクラスタ単位でされる。

論理レプリケーション

ストリーミングレプリケーションと同様にWALを転送するが、論理レプリケーションの場合はWALをデコードしてスタンバイに送る。
レプリケーションはDB単位、テーブル単位で設定可能。
プライマリとセカンダリでpostgresのバージョンが異なる場合でもレプリケーションできる。
なので、異なるバージョンでレプリケーションしなきゃいけない場合は論理レプリケーションとるしかないか。
DDLはレプリケーションできない制約がある。

感想

postgresについて、かなり簡単に調べてみたが、Mysqlとの大きな差が分かるほどは深くは調べられてないので、今後も継続して勉強していこうと思う。

Discussion