OSS-DB試験勉強 - 黒本ch2 インストールと設定
PostgreSQL公式チュートリアル: Installation from Source Code
https://www.postgresql.org/docs/12/installation.html
環境を汚したくないのでコンテナで遊ぶ
ビルド環境絡み
build-essential
- 入れないと
configure: error: no acceptable C compiler found in $PATH
と怒られる
- 入れないと
libreadline6-dev
psql
でコマンドライン編集・ヒストリ機能を利用するのに必要- configureの
--without-readline
オプションで無効化可能
zlib1g-dev
pg_dump
,pg_restore
機能に必要- configureの
--without-zlib
オプションで無効化可能
configure のオプション
問題集で触れられていたもの
--prefix=DIRECTORY
- インストール場所指定
--bindir
等に使われる
--with-openssl
- 暗号化コネクション機能有効化
crypto
ライブラリ必須apt-get install libssl-dev
--enable-debug
--with-pgport=NUMBER
- サーバ/クライアントのデフォルトポート番号指定
- 未指定の場合5432
--with-krb5
- Kerberos5認証を行う場合に使用する
- PostgreSQL version 9.5で消えたみたい
- Kerberos5認証を行う場合に使用する
--with-perl
--with-python
変遷まとめ記事。ありがたい
https://qiita.com/nuko_yokohama/items/e2d479a1af0de6cc50a6
gmakeコマンドに関して
https://github.com/postgres/postgres/blob/master/GNUmakefile.in
make
ormake all
- ビルド
- べつにrootである必要なし
- ビルド
make check
- 正常動作検証
- 通らないとこういうエラーが出る:
pg_regress: initdb failed Examine /work/postgresql-12.1/src/test/regress/log/initdb.log for the reason. Command was: "initdb" -D "/work/postgresql-12.1/src/test/regress/./tmp_check/data" --no-clean --no-sync > "/work/postgresql-12.1/src/test/regress/log/initdb.log" 2>&1 make[1]: *** [check] Error 2
make install
- インストール(コピー)
--prefix
で指定の場所- デフォルトで
/usr/local/pgsql/bin
- インストール(コピー)
make distclean
- configureコマンドで間違ったオプションを指定してしまった場合に実行することが推奨されている
環境変数
https://www.postgresql.org/docs/current/libpq-envars.html
環境変数 | 対応するパラメータ |
---|---|
PGHOST | host |
PGHOSTADDR | hostaddr |
PGPORT | port |
PGDATABASE | dbname |
initdb
https://www.postgresql.org/docs/12/app-initdb.html
/usr/local/pgsql/bin/initdb
というexecutableがあるpg_ctl initdb
でも呼び出せる
- 新しいPostgreSQLデータベースクラスタを作成する
PostgreSQLデータベースクラスタとは
- 単一のサーバーにより管理されるデータベース群
initdbを実行すると、デフォルトで3つのデータベースができる
/# su postgres /$ initdb /$ psql
postgres=# \? ... \l[+] [PATTERN] list databases ... postgres=# \l \l List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges -----------+----------+----------+------------+------------+----------------------- postgres | postgres | UTF8 | en_US.utf8 | en_US.utf8 | template0 | postgres | UTF8 | en_US.utf8 | en_US.utf8 | =c/postgres + | | | | | postgres=CTc/postgres template1 | postgres | UTF8 | en_US.utf8 | en_US.utf8 | =c/postgres + | | | | | postgres=CTc/postgres (3 rows)
- template1は、データベース作成時にデフォルトで使用される雛形
- 必ず作成するテーブル等を定義しておくとよい
- PostgreSQL 9.0からはデフォルトでPL/pgSQL言語インストール
- cf. 昔は
createlang
コマンドが必要だった
- cf. 昔は
/$ createlang
Error: pg_wrapper: createlang was not found in /usr/lib/postgresql/12/bin
contribディレクトリ
https://www.postgresql.org/docs/12/contrib.html
- PostgreSQL本体に取り込まれていないモジュール
- 限られたユーザ向け
- 実験的すぎ
- contribution の略
- ユーザから寄贈された、の意
- 含めたい場合は、ソースコードからインストールする際
make all
の代わりに
make world
を使用する
postgresql.conf
#
始まりの行はコメント- サーバ再起動が必要なものの反映方法
pg_ctl stop
+pg_ctl start
- または
pg_ctl restart
- 再起動の必要ないものの反映方法
- SIGHUPを送る(1番)
- または
pg_ctl reload
接続・認証
https://www.postgresql.org/docs/12/runtime-config-connection.html
軒並みサーバ再起動が必要
黒本で触れられているもの
listen_addresses
(string)port
(integer)- TCPポート番号(5432)
max_connections
(integer)- 最大接続数(100)
- IPCパラメータの設定が必要なことも
superuser_reserved_connections
(integer)- スーパーユーザのために予約する接続数(3)
max_connections
が100、本パラメータが3なら、一般ユーザは97接続まで
- スーパーユーザのために予約する接続数(3)
リソース、WAL: Write Ahead Log
https://www.postgresql.org/docs/12/runtime-config-resource.html
https://www.postgresql.org/docs/12/runtime-config-wal.html
shared_buffers
(integer in MB)- デフォルト値は小さめ
- PostgreSQL 9.0だと
- 【補】PostgreSQL 12だと128MB
- スペックが低いH/Wでも動作するための配慮
- 実運用を考慮してサイズを決めよう
- 設定反映にサーバ再起動必要
- デフォルト値は小さめ
temp_buffers
(integer in MB)- データベースセッションが一時的に使用するメモリ
- ソートなど
- データベースセッションが一時的に使用するメモリ
maintenance_work_mem
(integer in MB)- 保守作業用メモリ
- VACUUM
- CREATE INDEX
- ALTER TABLE ADD FOREIGN KEY
- 等々
- 保守作業用メモリ
wal_buffers
(integer in MB)- ロク先行書き込み(トランザクションログ)用に共有メモリで確保される確保されるメモリサイズ
- 設定反映にサーバ再起動必要