この記事の目的
この記事では、
postgresの設定に必要な情報を簡単にまとめること
を目的としています。
Docker image のpostgresを利用しています。
このイメージでは、以下のパスにDBのデータがまとめられています。
/var/lib/postgresql/dataにpostgres
//参考(環境構築には、以下のコマンドを実行しました。) docker run -d -v $(pwd):/var/lib/postgresql/data postgres
本題
★postgresの特徴
postgresは、追記型アーキテクチャを採用しています。
削除するときは、物理削除せず、削除フラグを立てるだけ。
更新するときは、更新フラグを立て、更新した情報を新しく追加する。
といったイメージです。
そのため、Insert,Delete処理は速く、Update処理が遅いという性質があります。
…あります(´▽`)
postgresは、libpqプロトコルを使ってクライアント-サーバー通信を行います。
||libpqは、C言語によるアプリケーションプログラマ用のPostgreSQLインタフェースです。 libpqは、クライアントプログラムからPostgreSQLのバックエンドサーバに問い合わせを渡し、その結果を受け取るためのライブラリ関数の集合です。
postgresは、マルチプロセスモデルを採用しています。
1つのDB接続に対し、1つのプロセスを作成し、通信を行います。
そのため、接続/切断が頻繁に発生するアプリケーションを開発する場合は、
poolingの設定が必要になってきます。
npgsqlを使えば、デフォルトでコネクションプールを100個利用する設定になっています。
※↓”その他”のDBMSとの比較をまとめた表があったので、リンク張っておきます。
https://www.pgecons.org/wp-content/uploads/PGECons/2015/WG2/14_Appendix_01_Architecture.pdf
★初期DBについて
postgrsインストールしたらいつも勝手にできているけど、無視してしまっていた子達…
postgresを起動して初めに作られている初期データベースがこれです。
Template0は読み込み専用のテンプレートです。
Template1のもととなるテンプレートとして利用されます。
Template1は、今後作成するすべてのデータベースのもとになるテンプレートです。
今後作るデータベースに共通する設定があれば、Template1に設定しておくらしいです。
…らしいです(´▽`)
★ディレクトリ構成
全体像と、代表的なディレクトリを把握しておきます。
//データベース"クラスタ"全体の情報が入ったディレクトリ↓ /var/lib/postgresql/data ├── PG_VERSION //postgresのバージョンが記載されている ├── base [error opening dir] //データベースの情報 ├── global [error opening dir] //クラスタ全体にかかわる設定(権限、ユーザーなど) ├── pg_commit_ts [error opening dir] ├── pg_dynshmem [error opening dir] ├── log[error opening dir] //ログ ├── pg_hba.conf ├── pg_ident.conf ├── pg_logical [error opening dir] ├── pg_multixact [error opening dir] ├── pg_notify [error opening dir] ├── pg_replslot [error opening dir] ├── pg_serial [error opening dir] ├── pg_snapshots [error opening dir] ├── pg_stat [error opening dir] ├── pg_stat_tmp [error opening dir] ├── pg_subtrans [error opening dir] ├── pg_tblspc [error opening dir] ├── pg_twophase [error opening dir] ├── pg_wal [error opening dir] //WALログ ├── pg_xact [error opening dir] ├── postgresql.auto.conf ├── postgresql.conf ├── postmaster.opts └── postmaster.pid
★postgrsql.confの設定確認
psqlのSHOWコマンドを使うことで、今動いているpostgresで有効な設定を確認できます。
※内容はpostgresql.confの内容と同じです。
configファイルを見ればいいという話もありますが、圧倒的に見やすいと思います。
Filterもかけられるので検索はこれが便利そうです。
「設定なしでデフォルト値」みたいな設定も、このコマンドを使えば、何がデフォルト値かわかるところも便利だと思います。
★ログの設定
開発時にいつもお世話になるログ出力の設定についてです。
自分の場合ログはいつもファイルに出力することが多いです。
ということで、ファイルに出力する設定を中心にまとめていきます。
参考)
www.postgresql.jp
設定項目名 | デフォルト値 | 変更後 | 簡単な説明 |
log_directory | 'log' | その時々… | 出力ディレクトリ名 |
log_filename | 'postgresql-%Y-%m-%d_%H%M%S.log' | そのまま | ファイル名規則 |
logging_collector | off | on | ログファイル作るかどうかの設定 |
log_min_messages | warning | そのまま | |
log_min_error_statement | Error | そのまま | エラーの原因となったSQLの詳細を表示 |
log_connections | Off | ON | コネクション接続時のログ |
log_disconnections | Off | ON | コネクション切断時のログ |
log_duration | Off | ON | SQL実行時間 |
log_statement | none | ALL | 構文エラーを持つ文以外のSQL |
log_line_prefix | 空文字 | '%m [%p] %a %u %p %c %v ' | 各ログ行の先頭に出力する字列 |
Log_line_prefixでセッションIDを設定したときの例↓
接続されてから切断されるまでトレースができた(∩´∀`)∩ワーイ
※この例では、log_connectionsとlog_disconnectionsをOnにしています。
★log_min_error_statementの設定
エラーの原因となったSQLの詳細ということでしたが、よくわからなかったので、
設定を色々変えて「SELECT * FROM hogehoge;」を実行してみました。
結果として、デフォルト設定のErrorのままでよいということになりました。
実験結果↓
Errorの場合(デフォルト)と、それより上の設定の場合
faitalの場合
panicの場合
出力なし。
★npgsqlを用いた接続文字列
接続文字列の設定もいつもよく忘れるので、メモしておきます。
www.npgsql.org
//最小設定の接続文字列例 //portはだいたい5432なので、省略 Host=localhost;Username=postgres;Password=password;Database=sample_db