PostgreSQL 10 の設定



●Postgresql 10のインストール

 参考URL:PostgreSQL 10 : インストール

 postgresqlバージョン10をインストールします。
 なお、どのバージョンがインストール可能か確認したい場合は、下記のように実行します。
# dnf module list postgresql
milter-manager_repos                                                                                399  B/s | 833  B     00:02    
milter-manager_repos-source                                                                         445  B/s | 833  B     00:01    
CentOS Stream 8 - AppStream
Name                      Stream                Profiles                          Summary                                           
postgresql                9.6                   client, server [d]                PostgreSQL server and client module               
postgresql                10 [d]                client, server [d]                PostgreSQL server and client module               
postgresql                12                    client, server [d]                PostgreSQL server and client module               
postgresql                13                    client, server [d]                PostgreSQL server and client module               

ヒント: [d]efault, [e]nabled, [x]disabled, [i]nstalled
 では、インストールします。
# dnf module -y install postgresql:10
# postgresql-setup --initdb
 * Initializing database in '/var/lib/pgsql/data'
 * Initialized, logs are in /var/lib/pgsql/initdb_postgresql.log
# systemctl enable --now postgresql
 デフォルト設定では、ローカルホストからのみ接続可能で、かつ、ローカル接続は [peer] 認証のみとなっています。
 認証方式の詳細は公式ドキュメントを参照ください。

 ローカルホストでをpostgresqlのリッスン状態を確認します。
# grep listen_addresses /var/lib/pgsql/data/postgresql.conf
#listen_addresses = 'localhost'		# what IP address(es) to listen on;
 認証方式を確認します。
# grep -v -E "^#|^$" /var/lib/pgsql/data/pg_hba.conf
local   all             all                                     peer
host    all             all             127.0.0.1/32            ident
host    all             all             ::1/128                 ident
local   replication     all                                     peer
host    replication     all             127.0.0.1/32            ident
host    replication     all             ::1/128                 ident
 peer認証の場合、任意の PostgreSQLユーザを追加して利用するには、同名のOSユーザも必要になります。
OSユーザの追加
# useradd redmine

PostgreSQL管理ユーザで、PostgreSQLユーザとデータベースの追加
# su - postgres
$ createuser redmine
$ createdb testdb -O redmine

確認
$ psql -c "select usename from pg_user;"
 usename  
----------
 postgres
 redmine
(2 行)

$ psql -l
                                         データベース一覧
   名前    |  所有者  | エンコーディング |  照合順序   | Ctype(変換演算子) |     アクセス権限      
-----------+----------+------------------+-------------+-------------------+-----------------------
 postgres  | postgres | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       | 
 template0 | postgres | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       | =c/postgres          +
           |          |                  |             |                   | postgres=CTc/postgres
 template1 | postgres | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       | =c/postgres          +
           |          |                  |             |                   | postgres=CTc/postgres
 testdb    | redmine  | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       | 
(4 行)

postgresユーザから抜けます。
$ exit
 新規追加したユーザ(redmine)で PostgreSQLを利用する場合の基本操作を記載します。
# su - redmine

テストDBに接続
$ psql testdb
psql (10.19)
"help" でヘルプを表示します。

ユーザロール一覧を表示
testdb=# \du
                                               ロール一覧
 ロール名 |                                     属性                                     | 所属グループ 
----------+------------------------------------------------------------------------------+--------------
 postgres | スーパーユーザ, ロール作成可, DB作成可, レプリケーション可, RLS のバイパス | {}
 redmine  |                                                                              | {}

データベース一覧を表示
testdb=# \l
                                         データベース一覧
   名前    |  所有者  | エンコーディング |  照合順序   | Ctype(変換演算子) |     アクセス権限      
-----------+----------+------------------+-------------+-------------------+-----------------------
 postgres  | postgres | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       | 
 template0 | postgres | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       | =c/postgres          +
           |          |                  |             |                   | postgres=CTc/postgres
 template1 | postgres | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       | =c/postgres          +
           |          |                  |             |                   | postgres=CTc/postgres
 testdb    | redmine  | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       | 
(4 行)

テストテーブルを作成
testdb=# create table test_table (no int, name text); 
CREATE TABLE

テーブル一覧を表示
testdb=# \dt
              リレーション一覧
 スキーマ |    名前    |    型    | 所有者  
----------+------------+----------+---------
 public   | test_table | テーブル | redmine
(1 行)

テストテーブルにテストデータを挿入
testdb=> insert into test_table (no,name) values (01,'Rocky'); 
INSERT 0 1

確認
testdb=> select * from test_table; 
 no | name  
----+-------
  1 | Rocky
(1 行)

テストテーブルを削除
testdb=> drop table test_table;
DROP TABLE

testdb=> \dt
リレーションが見つかりませんでした。

exit する
testdb=> \q 

テストデータベースを削除
$ dropdb testdb
$ psql -l
                                         データベース一覧
   名前    |  所有者  | エンコーディング |  照合順序   | Ctype(変換演算子) |     アクセス権限      
-----------+----------+------------------+-------------+-------------------+-----------------------
 postgres  | postgres | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       | 
 template0 | postgres | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       | =c/postgres          +
           |          |                  |             |                   | postgres=CTc/postgres
 template1 | postgres | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       | =c/postgres          +
           |          |                  |             |                   | postgres=CTc/postgres
(3 行)


●データベース活動状況の監視

 参考URL:第28章 データベース活動状況の監視

 psコマンドを利用した確認方法
$ ps aux | grep ^postgres
postgres    1498  0.0  0.1 244760 12440 ?        Ss    7月22   1:52 /usr/bin/postmaster -D /var/lib/pgsql/data
postgres    1641  0.0  0.0  99676  2132 ?        Ss    7月22   0:00 postgres: logger process   
postgres    1802  0.0  0.0 244872  3816 ?        Ss    7月22   0:00 postgres: checkpointer process   
postgres    1803  0.0  0.0 244760  2164 ?        Ss    7月22   0:03 postgres: writer process   
postgres    1804  0.0  0.0 244760  2932 ?        Ss    7月22   0:03 postgres: wal writer process   
postgres    1805  0.0  0.0 245316  5256 ?        Ss    7月22   0:08 postgres: autovacuum launcher process   
postgres    1806  0.0  0.0  99972  2368 ?        Ss    7月22   1:03 postgres: stats collector process   
postgres    1807  0.0  0.0 245044  2928 ?        Ss    7月22   0:00 postgres: bgworker: logical replication launcher   
postgres 1265760  0.0  0.2 247832 17424 ?        Ss   09:30   0:00 postgres: redmine redmine 127.0.0.1(57582) idle
 活動状況は、idle(つまり、クライアントからのコマンド待ち状態)、idle in transaction(BEGINブロックの内側でのクライアントの待ち状態)、または、SELECTのようなコマンド種類名のいずれかとなります。また、そのサーバプロセスが他のセッションによって保持されたロックを待っている状態の場合は、waitingが追加されます。
 プロセスをブロックしている場合、pg_locksシステムビューを確認することで、どのプロセスがどのプロセスをブロックしているのか判別できます。
 統計情報収集のための設定は、postgresql.conf内で設定される設定パラメータによって制御されます。

 track_activitiesパラメータにより、すべてのサーバプロセスで現在実行されているコマンドを監視することができます。
 track_countsパラメータは、テーブルおよびインデックスアクセスに関する統計情報を収集するかどうか制御します。
 track_functionsパラメータは、ユーザ定義関数の使用状況を追跡するかどうかを指定できます。
 track_io_timingパラメータは、ブロック読み取りおよび書き込み回数の監視するかどうかを指定できます。

 システムの現在の状態を表示(統計情報の表示)するために、いくつかの定義済みのビューが存在します。

ビュー名 説明
pg_stat_activity サーバ当たり1行の形式で、状態や現在の問い合わせ等のプロセスの現在の活動状況に関連した情報を表示します。 詳細についてはpg_stat_activityを参照してください。
pg_stat_replication AL送信プロセス毎に1行の形式で、送信サーバが接続したスタンバイサーバへのレプリケーションに関する統計情報を表示します。 詳細についてはpg_stat_replicationを参照して下さい。
pg_stat_wal_receiver 1行の形式で、受信サーバが接続したサーバからWALレシーバに関する統計情報を表示します。 詳細についてはpg_stat_wal_receiverを参照してください。
pg_stat_subscription 1つのサブスクリプションにつき少なくとも1行の形式で、サブスクリプションワーカに関する情報を表示します。 詳細についてはpg_stat_subscriptionを参照してください。
pg_stat_ssl 接続(通常およびレプリケーション)あたり1行の形式で、接続に使われるSSLの情報を表示します。 詳しくはpg_stat_sslを参照して下さい。
pg_stat_progress_vacuum VACUUMを実行している(自動バキュームワーカプロセスを含んだ)それぞれのバックエンドごとに1行の形で、現在の進捗を示します。 28.4.1を参照してください。
動的統計情報ビュー

ビュー名 説明
pg_stat_archiver WALアーカイバプロセスの活動状況に関する統計情報を1行のみで表示します 詳細については pg_stat_archiverを参照してください。
pg_stat_bgwriter バックグラウンドライタプロセスの活動状況に関する統計情報を1行のみで表示します。 詳細についてはpg_stat_bgwriterを参照してください。
pg_stat_database データベース当たり1行の形で、データベース全体の情報を表示します。 詳細についてはpg_stat_databaseを参照してください。
pg_stat_database_conflicts データベース毎に1行の形式で、スタンバイサーバにおける復旧との競合のためにキャンセルされた問い合わせについてのデータベース全体の統計情報を表示します。 詳細についてはpg_stat_database_conflictsを参照して下さい。
pg_stat_all_tables 現在のデータベースの各テーブルごとに1行の形で、特定のテーブルへのアクセスに関する統計情報を示します。 詳細についてはpg_stat_all_tablesを参照してください。
pg_stat_sys_tables システムテーブルのみが表示される点を除き、pg_stat_all_tablesと同じです。
pg_stat_user_tables ユーザテーブルのみが表示される点を除き、pg_stat_all_tablesと同じです。
pg_stat_xact_all_tables pg_stat_all_tablesと似ていますが、現在のトランザクションにて実施された処理結果をカウントします。(数値が見える時点では、これらの数値はpg_stat_all_tablesと関連するビューに含まれていません。) このビューでは、有効行数、無効行数、およびバキュームやアナライズの活動は表示しません。
pg_stat_xact_sys_tables システムテーブルのみが表示される点を除き、pg_stat_xact_all_tablesと同じです。
pg_stat_xact_user_tables ユーザテーブルのみが表示される点を除き、pg_stat_xact_all_tablesと同じです。
pg_stat_all_indexes 現在のデータベースのインデックスごとに1行の形で、特定のインデックスへのアクセスに関する統計情報を示します。 詳細についてはpg_stat_all_indexesを参照してください。
pg_stat_sys_indexes システムテーブルのインデックスのみが表示される点を除き、pg_stat_all_indexesと同じです。
pg_stat_user_indexes ユーザテーブルのインデックスのみが表示される点を除き、pg_stat_all_indexesと同じです。
pg_statio_all_tables 現在のデータベース内のテーブルごとに1行の形で、特定のテーブルに対するI/Oに関する統計情報を示します。 詳細についてはpg_statio_all_tablesを参照してください。
pg_statio_sys_tables システムテーブルのみが表示される点を除き、pg_statio_all_tablesと同じです。
pg_statio_user_tables ユーザテーブルのみが表示される点を除き、pg_statio_all_tablesと同じです。
pg_statio_all_indexes 現在のデータベース内のインデックスごとに1行の形で、特定のインデックスに対するI/Oに関する統計情報を示します。 詳細についてはpg_statio_all_indexesを示します。
pg_statio_sys_indexes システムテーブルのインデックスのみが表示される点を除き、pg_statio_all_indexes と同じです。
pg_statio_user_indexes ユーザテーブルのインデックスのみが表示される点を除き、pg_statio_all_indexesと同じです。
pg_statio_all_sequences 現在のデータベース内のシーケンスごとに1行の形で、特定のシーケンスに対するI/Oに関する統計情報を示します。 詳細についてはpg_statio_all_sequencesを参照してください。
pg_statio_sys_sequences システムシーケンスのみが表示される点を除き、pg_statio_all_sequencesと同じです (現時点では、システムシーケンスは定義されていませんので、このビューは常に空です)。
pg_statio_user_sequences ユーザシーケンスのみが表示される点を除き、pg_statio_all_sequencesと同じです。
pg_stat_user_functions 追跡された関数ごとに1行の形で、関数の実行に関する統計情報を示します。 詳細についてはpg_stat_user_functionsを参照してください。
pg_stat_xact_user_functions pg_stat_user_functionsと似ていますが、現在のトランザクション中に呼び出されたものだけをカウントします。 (数値が見える時点では、これらの数値はpg_stat_user_functionsに含まれていません。)
収集済み統計情報ビュー