<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Pgpool-II &#8211; SRA OSS Tech Blog</title>
	<atom:link href="https://www.sraoss.co.jp/tech-blog/tag/pgpool-ii/feed/index.xml" rel="self" type="application/rss+xml" />
	<link>https://www.sraoss.co.jp/tech-blog/</link>
	<description>OSS専門の技術ブログ。PostgreSQL、Zabbixを中心に10種類以上のOSSの解説、アップデート情報、運用ヒントを提供。</description>
	<lastBuildDate>Mon, 09 Nov 2026 03:56:02 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1.3</generator>

<image>
	<url>https://www.sraoss.co.jp/tech-blog/wp-content/uploads/2018/07/blog-icon-150x150.png</url>
	<title>Pgpool-II &#8211; SRA OSS Tech Blog</title>
	<link>https://www.sraoss.co.jp/tech-blog/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>FOSSASIA PGDay 2026 参加レポート</title>
		<link>https://www.sraoss.co.jp/tech-blog/event_reports/fossasia-pgday-2026/</link>
		
		<dc:creator><![CDATA[長田 悠吾 (Yugo Nagata)]]></dc:creator>
		<pubDate>Wed, 01 Apr 2026 03:11:54 +0000</pubDate>
				<category><![CDATA[イベントレポート]]></category>
		<category><![CDATA[FOSSASIA]]></category>
		<category><![CDATA[pg_ivm]]></category>
		<category><![CDATA[PGDay]]></category>
		<category><![CDATA[Pgpool-II]]></category>
		<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[イベント]]></category>
		<category><![CDATA[参加レポート]]></category>
		<guid isPermaLink="false">https://www.sraoss.co.jp/tech-blog/?p=20394</guid>

					<description><![CDATA[2026年3月9日〜10日にタイ・バンコクで開催された FOSSASIA Summit 2026 に参加し、併設の FOSSASIA PGDay 2026 で発表しましたので、その内容を報告いたします。 はじめに 202 ...]]></description>
										<content:encoded><![CDATA[<p>2026年3月9日〜10日にタイ・バンコクで開催された <a href="https://eventyay.com/e/88882f3e" target="_blank" rel="noopener">FOSSASIA Summit 2026</a> に参加し、併設の <a href="https://eventyay.com/e/b85fd0f2" target="_blank" rel="noopener">FOSSASIA PGDay 2026</a> で発表しましたので、その内容を報告いたします。</p>
<p><span id="more-20394"></span></p>
<h3>はじめに</h3>
<p>2026年3月、アジア最大級の FOSS カンファレンスである FOSSASIA Summit 2026 が開催され、その併設イベントとして PostgreSQL PGDay が開催されました。<br />
PGDay は PostgreSQL に特化した 1 日カンファレンスで、世界各地から PostgreSQL 開発者・ユーザが集まる技術イベントです。<br />
SRA OSS では昨年も FOSSASIA PGDay に参加しましたが、今年は参加に加え、2名がスピーカーとして登壇しました。本記事では、FOSSASIA および PGDay の概要とともに、SRA OSS からの発表内容を中心にご紹介します。</p>
<h3>FOSSASIA Summit および PostgreSQL PGDay について</h3>
<p>FOSSASIA Summit は、オープンソースソフトウェアやオープンテクノロジーをテーマとした国際カンファレンスです。<br />
ソフトウェア開発だけでなく、OS、クラウド、データベース、AI、セキュリティなど、幅広い分野のセッションが用意され、アジア圏を中心に世界各国から参加者が集まります。</p>
<p>その中で開催される PostgreSQL PGDay は、PostgreSQL の開発や運用、拡張、エコシステムに焦点を当てたイベントです。PostgreSQL の内部構造、性能チューニング、高可用性、運用、セキュリティなど、実運用に直結するテーマが幅広く扱われました。</p>
<p><a href="https://www.sraoss.co.jp/tech-blog/wp-content/uploads/2026/04/fossasia-pgday-2026_2.png"><img fetchpriority="high" decoding="async" class="aligncenter size-full wp-image-20414" src="https://www.sraoss.co.jp/tech-blog/wp-content/uploads/2026/04/fossasia-pgday-2026_2.png" alt="" width="1011" height="689" /></a></p>
<h3>SRA OSS からの発表</h3>
<h4>Pgpool-II による PostgreSQL 高可用性と性能最適化</h4>
<p>基盤技術グループのプリンシパルエンジニア でPgpool-II 開発者でもある彭 博（ペン ボ）からは、「Pgpool-II: An Introduction to High-Availability and Performance Optimization for PostgreSQL」と題し、PostgreSQL 高可用性構成における課題と、それを解決する <a href="https://pgpool.net/">Pgpool-II</a> の役割について紹介しました。</p>
<p>PostgreSQL にはストリーミングレプリケーションなどの仕組みがありますが、自動フェイルオーバー／フェイルバックは標準では提供されておらず、読み書きの振り分けやロードバランシングはアプリケーション側で実装が必要といった課題があります。Pgpool-II はクライアントと PostgreSQL の間に配置されるミドルウェア で、アプリケーションを大きく変更することなく「自動フェイルオーバー」や「クエリのロードバランシング」といった機能を提供することで、これらの課題を解決します。また、「コネクションプーリング」「インメモリクエリキャッシュ」といったパフォーマンス向上機能も提供しています。</p>
<p>さらに、Pgpool-II 自体が単一障害点になることを避けるための「Watchdog 機能」についても解説されました。Watchdog 機能により「複数のPgpool-II ノード間での死活監視」「リーダー選出」「Virtual IP の自動切替」「スプリットブレイン防止」といった仕組みが提供され、Pgpool-II 自体も冗長化可能であることが紹介されました。</p>
<p><a href="https://www.sraoss.co.jp/tech-blog/wp-content/uploads/2026/04/fossasia-pgday-2026_3.png"><img decoding="async" class="aligncenter size-full wp-image-20416" src="https://www.sraoss.co.jp/tech-blog/wp-content/uploads/2026/04/fossasia-pgday-2026_3.png" alt="" width="893" height="526" /></a></p>
<h4>pg_ivm: 高速なマテリアライズドビュー更新</h4>
<p>技術開発室の主席研究員でPostgreSQLコントリビュータでもある長田悠吾（ながたゆうご）からは、「pg_ivm: Extension for Fast Materialized View Maintenance and Recent Improvements」というタイトルで、自身が開発するPostgreSQL 拡張モジュールである <a href="https://github.com/sraoss/pg_ivm">pg_ivm</a> について発表しました。</p>
<p>pg_ivm は増分ビューメンテナンス（Incremental View Maintenance, IVM） という、高速なマテリアライズドビューの更新を実現する機能を提供する拡張です。通常のマテリアライズドビューでは、元テーブルが更新された後には REFRESH MATERIALIZED VIEW によりビュー全体を再計算する必要がありますが、IVM では更新された差分のみを計算してビューに適用することで、更新コストを大きく削減します。</p>
<p>具体的には、この拡張モジュールにより、テーブル更新時に自動かつ高速に更新されるIMMV（Incrementally Maintainable Materialized View）と呼ばれるビューを作成できます。テーブル更新時のオーバーヘッドなどいくつかの考慮点はありますが、これを用いることで、ビューの更新が通常の REFRESH と比べて数百倍高速となるケースも示されました。</p>
<p>また、最近の改善として外部結合ビューへの対応が追加されたほか、将来の機能改善として、（テーブル更新時に自動で行うのではなく）手動によるビューの増分更新や、パーティションテーブル、論理レプリケーションへの対応などが検討されていることも紹介されました。</p>
<p><a href="https://www.sraoss.co.jp/tech-blog/wp-content/uploads/2026/04/fossasia-pgday-2026_3.png"><img decoding="async" class="aligncenter size-full wp-image-20423" src="https://www.sraoss.co.jp/tech-blog/wp-content/uploads/2026/04/fossasia-pgday-2026_4.png" alt="" width="987" height="636" /></a></p>
<h3>その他の発表</h3>
<p>PGDay では、SRA OSS の発表以外にも、PostgreSQL の現在と将来に関わる多様なセッションが行われました。</p>
<p>基調講演では、PostgreSQL の30年の歴史や、PostgreSQL コミュニティとその貢献方法についての紹介が行われました。PostgreSQL の開発や内部構造に関係する発表としては、PostgreSQL 18 新機能解説や、データベースのメタ情報を格納するシステムカタログを深掘りするセッション、近年のインデックスの改善について解説するセッションがありました。</p>
<p>また、Pgpool-II や pg_ivm 以外にも、クエリ実行を外部の Apache DataFusion クエリエンジンで行える拡張モジュール <a href="https://github.com/darthunix/pg_fusion" target="_blank" rel="noopener">pg_fusion</a> や、LIKE/ILIKE を用いた文字列のマッチングを高速化するためのインデックス <a href="https://github.com/CrystallineCore/Biscuit" target="_blank" rel="noopener">Biscuit</a> といったツールを紹介するセッションもあり、PostgreSQL エコシステムの広がりを感じられるプログラムとなっていました。</p>
<h3>おわりに</h3>
<p>今年の FOSSASIA PGDay も、PostgreSQL の進化とコミュニティの活発さを改めて実感できるイベントでした。SRA OSS としても、PostgreSQL および Pgpool-II や pg_ivm といったツールの開発と情報発信を通じて、引き続き PostgreSQL コミュニティの発展に貢献していきます。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Pgpool-II 4.7 の紹介</title>
		<link>https://www.sraoss.co.jp/tech-blog/pgpool/pgpool-4-7/</link>
		
		<dc:creator><![CDATA[越野 太基 (Taiki Koshino)]]></dc:creator>
		<pubDate>Wed, 25 Mar 2026 01:12:44 +0000</pubDate>
				<category><![CDATA[Pgpool-II]]></category>
		<category><![CDATA[OSS]]></category>
		<category><![CDATA[Pgpool-II 4.6]]></category>
		<category><![CDATA[Pgpool-II 4.7]]></category>
		<guid isPermaLink="false">https://www.sraoss.co.jp/tech-blog/?p=19057</guid>

					<description><![CDATA[2025 年 12 月 23 日、Pgpool-II の新しいメジャーバージョン 4.7 がリリースされました。 Pgpool-II 4.7 では、クライアント情報表示機能や、Watchdog と heartbeat r ...]]></description>
										<content:encoded><![CDATA[<p>2025 年 12 月 23 日、Pgpool-II の新しいメジャーバージョン 4.7 がリリースされました。</p>
<p>Pgpool-II 4.7 では、クライアント情報表示機能や、Watchdog と heartbeat receiver のセキュリティ強化、オンラインリカバリの機能が強化されました。また、フロントエンド/バックエンドプロトコルバージョン 3.2 サポートの追加、PostgreSQL 18 への対応も行われました。</p>
<p>Pgpool-II 4.7 の新機能及び変更点は Pgpool-II 公式ドキュメントの以下のページに記載されています。</p>
<p><a href="https://www.pgpool.net/docs/47/ja/html/release-4-7-0.html" target="_blank" rel="noopener">Pgpool-II 4.7 リリースノート</a></p>
<p>本記事では、これらの新機能について詳しく紹介します。</p>
<p><span id="more-19057"></span></p>
<h3>クライアント情報を表示するための pcp_proc_info, show pool_pools の機能強化</h3>
<p>4.6 までは Pgpool-II 経由で PostgreSQL に接続した場合、PostgreSQL 側からは各クライアントの接続情報を確認することができず、Pgpool-II のネットワークアドレスとポート番号のみしかわかりませんでした。<br />
そのため障害が起きてもどのクライアント接続で障害が発生しているのかを調査することが困難でした。</p>
<p>4.7 からは <a href="https://www.pgpool.net/docs/latest/ja/html/pcp-proc-info.html" target="_blank" rel="noopener">pcp_proc_info</a>, <a href="https://www.pgpool.net/docs/latest/ja/html/sql-show-pool-pools.html" target="_blank" rel="noopener">show pool_pools</a> コマンドで Pgpool-II 経由で接続しているクライアントのホスト名、ポート番号、最後に実行した SQL を参照できるようになりました。</p>
<p><span class="PRODUCTNAME">Pgpool-II</span> の子プロセス情報を表示する <a href="https://www.pgpool.net/docs/latest/ja/html/pcp-proc-info.html" target="_blank" rel="noopener">pcp_proc_info</a> コマンドでは client_host(ホスト名), client_port(ポート番号), statement(最後に実行した SQL) が追加されました。</p>
<p>これにより PostgreSQL からでも Pgpool-II 経由で接続しているクライアントの接続情報や最後に実行したクエリ情報を参照できるようになり障害時などに障害が起きているクライアント接続を調査することが容易になりました。</p>
<pre>sraoss@server1:~/setuptest$ pcp_proc_info -p 50001 --verbose
Database : test
Username : sraoss
Start time : 2026-01-08 12:15:18 (0:15 before process restarting)
Client connection count : 1
Major : 3
Minor : 0
Backend connection time : 2026-01-08 12:15:18
Client connection time : 2026-01-08 12:15:18
Client idle duration : 0
Client disconnection time : 2026-01-08 12:16:38
Pool Counter : 1
Backend PID : 20250
Connected : 0
PID : 20195
Backend ID : 0
Status : Wait for connection
Load balance node : 0
client_host : 127.0.0.1
client_port : 54726
statement : SELECT 1;</pre>
<p><span class="PRODUCTNAME">Pgpool-II</span> のコネクションプールの状態を表示する <a href="https://www.pgpool.net/docs/latest/ja/html/sql-show-pool-pools.html" target="_blank" rel="noopener">show pool_pools</a> コマンドにも、client_host(ホスト名), client_port(ポート番号), statement(最後に実行した SQL) が追加されました。</p>
<p>これらの変更で子プロセスやコネクションプーリングの情報とあわせてクライアント情報を参照できるようになりました。</p>
<pre class="PROGRAMLISTING">test=# show pool_pools;
 pool_pid |                      start_time                      | client_connection_count | pool_id | backend_id | database | username | backend_connection_time | client_connection_time | client_disconnection_time | client_idle_duration | majorversion | minorversion | pool_counter | pool_backendpid | pool_connected |       status        | load_balance_node |  client_host  | client_port |  statement  
----------+------------------------------------------------------+-------------------------+---------+------------+----------+----------+-------------------------+------------------------+---------------------------+----------------------+--------------+--------------+--------------+-----------------+----------------+---------------------+-------------------+---------------+-------------+-------------
[snip]
 1336537  | 2025-06-24 10:53:35                                  | 0                       | 0       | 0          | test     |  sraoss  | 2025-06-24 10:55:58     | 2025-06-24 10:55:59    |                           | 0                    | 3            | 0            | 1            | 1336703         | 1              | Idle                | 0                 | 192.168.10.11 | 39216       | 
 1336537  | 2025-06-24 10:53:35                                  | 0                       | 0       | 1          | test     |  sraoss  | 2025-06-24 10:55:58     | 2025-06-24 10:55:59    |                           | 0                    | 3            | 0            | 1            | 1336704         | 1              | Idle                | 1                 | 192.168.10.11 | 39216       | select 1;
 1336537  | 2025-06-24 10:53:35                                  | 0                       | 1       | 0          |          |          |                         |                        |                           | 0                    | 0            | 0            | 0            | 0               | 0              | Idle                | 0                 | 192.168.10.11 | 39216       | 
 1336537  | 2025-06-24 10:53:35                                  | 0                       | 1       | 1          |          |          |                         |                        |                           | 0                    | 0            | 0            | 0            | 0               | 0              | Idle                | 0                 | 192.168.10.11 | 39216       | select 1;</pre>
<h3>pgpool_adm_pcp_proc_info 関数の追加</h3>
<p>pgpool_adm エクステンションに、Pgpool-II の子プロセスの情報を表示する <a href="https://www.pgpool.net/docs/latest/ja/html/pgpool-adm-pcp-proc-info.html" target="_blank" rel="noopener">pgool_adm_pcp_proc_info</a> 関数が追加されました。 pgpool_adm エクステンションは Pgpool-II 経由でも、あるいは直接 PostgreSQL から呼び出せる関数群です。</p>
<p><a href="https://www.pgpool.net/docs/latest/ja/html/pgpool-adm-pcp-proc-info.html" target="_blank" rel="noopener">pgool_adm_pcp_proc_info</a> で表示される情報は pcp_proc_info コマンドと同様ですが、pgpool_adm エクステンションの関数であるため 、PostgreSQL クライアントからでも呼び出せます。</p>
<p>pgpool_adm を使うメリットは、SQLが使用でき WHERE 句で条件を指定して表示内容を絞り込むことができることです。(pcp コマンドの場合は、出力結果を整形するために OS のコマンドを併用する必要があります。)</p>
<p>導入には以下コマンドで各サーバーで pgpool_adm をインストールしてください。</p>
<pre class="PROGRAMLISTING"># 各サーバーで以下を実行してインストール 
$ psql test
test=# CREATE EXTENSION pgpool_adm;</pre>
<p>その後 Pgpool-II や PostgreSQL のクライアント上で <a href="https://www.pgpool.net/docs/latest/ja/html/pgpool-adm-pcp-proc-info.html" target="_blank" rel="noopener">pgpool_adm_pcp_proc_info</a> を実行します。<br />
connected 列は接続状況を表示(0=接続なし, 1=接続中) しており、今回の例のように WHERE 句に &#8220;connected = 1&#8221; を指定することで接続中の情報に絞ることもできます。</p>
<pre class="PROGRAMLISTING">test=# select * from pcp_proc_info(host =&gt; '', port =&gt; 11001, username =&gt; 'sraoss', password =&gt; 'sraoss') where connected = '1';
-[ RECORD 1 ]-------------+----------------------------------------------------------------------------------------------------------------------------
database                  | test
username                  | sraoss
start_time                | 2026-01-08 10:56:08
client_connection_count   | 0
major                     | 3
minor                     | 0
backend_connection_time   | 2026-01-08 10:58:37
client_connection_time    | 2026-01-08 10:58:37
client_idle_duration      | 0
client_disconnection_time | 
pool_counter              | 1
backend_pid               | 14750
connected                 | 1
pid                       | 14585
backend_id                | 0
status                    | Execute command
load_balance_node         | 1
client_host               | 127.0.0.1
client_port               | 59120
statement                 | select * from pcp_proc_info(host =&gt; '', port =&gt; 11001, username =&gt; 'sraoss', password =&gt; 'sraoss') where connected = '1';</pre>
<p>また pg_stat_activity と組み合わせてより詳細な情報を表示することも可能です。<br />
以下の SQL では <a href="https://www.pgpool.net/docs/latest/ja/html/pgpool-adm-pcp-proc-info.html" target="_blank" rel="noopener">pgpool_adm_pcp_proc_info</a> とpg_stat_activity を結合して <a href="https://www.pgpool.net/docs/latest/ja/html/pgpool-adm-pcp-proc-info.html" target="_blank" rel="noopener">pgool_adm_pcp_proc_info</a> では取得できない state を pg_stat_activity をから取得しています。<br />
他にも wait_event など pg_stat_activity にしかない情報も同時に取得するなど要件に応じてクライアント情報を取得できます。</p>
<pre>test=# SELECT p.username, p.database, p.client_port, s.state, s.wait_event, s.query,
              p.pid as pgpool_pid, s.pid as backend_pid
              FROM pcp_proc_info(host =&gt; '', port =&gt; 11001,
                                 username =&gt; 'sraoss', password =&gt; 'sraoss') AS p
              JOIN pg_stat_activity AS s ON s.pid::text = p.backend_pid;
-[ RECORD 1 ]-------------+----------------------------------------------------------------------------------------------------------------------------
username                  | sraoss
 database                 |  test
 client_host              | 192.168.100.101
client_port               | 50001
state                     | active  
query                     | select 1;
pgpool_pid                | 21467
backend_pid               | 21500</pre>
<h3>ライフチェックログの改善</h3>
<p>ライフチェックが開始したとき Watchdog は ライフチェックが開始したことを知らせるログを出力します。<br />
4.6 までは正常に開始したタイミングでしかログが出力されないため、正常に動作しているかを確認するために開始ログが出るまでログを監視する必要があり、またライフチェックが正常に開始していない状況に気づくのが困難でした。</p>
<pre>LOG:  watchdog: lifecheck started</pre>
<p>4.7 からはライフチェックが開始されるまで定期的にライフチェックが開始していない警告を出力するようになり、ライフチェック開始までログファイルを監視する必要がなくなりました。<br />
間隔は wd_interval × 10 秒です。</p>
<pre><i>WARNING:  watchdog: lifecheck has not started yet</i></pre>
<h3>Watchdog と heartbeat receiver のセキュリティ強化</h3>
<p>Watchdog と heartbeat receiver が受け付けるアドレスを制限することができるようになりました。</p>
<p>4.6 まではいずれのプロセスも、ホストが持つすべてのネットワークアドレスへの接続を受け付けていました。</p>
<pre>tcp        0      0 <b>0.0.0.0:9000</b>            0.0.0.0:*     LISTEN   3583037/pgpool: watchdog
Tcp6       0      0 <b>:::9000                 </b>:::*          LISTEN   3583037/pgpool: watchdog
Udp        0      0 <b>0.0.0.0:9694</b>            0.0.0.0:*              3583050/pgpool: heartbeat receiver
udp        0      0 <b>0.0.0.0:9694</b>            0.0.0.0:*              3583044/pgpool: heartbeat receiver
udp6       0      0 <b>:::9694                 </b>:::*                   3583044/pgpool: heartbeat receiver
udp6       0      0 <b>:::9694                 </b>:::*                   3583050/pgpool: heartbeat receiver</pre>
<p>4.7 からはセキュリティ上の点から <a href="https://www.pgpool.net/docs/latest/ja/html/runtime-watchdog-config.html#GUC-HOSTNAME" target="_blank" rel="noopener">hostname</a>, <a href="https://www.pgpool.net/docs/latest/ja/html/runtime-watchdog-config.html#GUC-HEARTBEAT-HOSTNAME" target="_blank" rel="noopener">heartbeat_hostname</a> で指定したネットワークアドレスへのみ接続を受け付けるようになりました。</p>
<pre># pgpool.conf 設定例
hostname0 = '192.168.100.50'
wd_port0 = 9000
heartbeat_hostname0 = '192.168.100.101'
heartbeat_port0 = 9694
hostname1 = '192.168.100.60'
wd_port0 = 9000
heartbeat_hostname1 = '192.168.100.102'
heartbeat_port1 = 9694
hostname2 = '192.168.100.70'
wd_port0 = 9000
heartbeat_hostname2 = '192.168.100.103'
heartbeat_port2 = 9694</pre>
<pre>tcp        0      0 <b>192.168.100.50:</b><b>9000</b><b>    </b>0.0.0.0:*     LISTEN      41636/pgpool: watchdog
tcp        0      0 <b>192.168.100.50:</b><b>9000</b><b>    </b>0.0.0.0:*     LISTEN      41638/pgpool: watchdog
udp        0      0 <b>192.168.100.101:9694 </b>  0.0.0.0:*                 41649/pgpool: heartbeat receiver
udp        0      0 <b>192.168.100.101:9694</b>   0.0.0.0:*                 41650/pgpool: heartbeat receiver</pre>
<p>もし他ノードから <a href="https://www.pgpool.net/docs/latest/ja/html/runtime-watchdog-config.html#GUC-HOSTNAME" target="_blank" rel="noopener">hostname</a>, <a href="https://www.pgpool.net/docs/latest/ja/html/runtime-watchdog-config.html#GUC-HEARTBEAT-HOSTNAME" target="_blank" rel="noopener">heartbeat_hostname</a> で指定したネットワークアドレス以外へ heartbeat を送る設定とすると以下メッセージのように lifecheck に失敗します。<br />
4.7 へ移行する場合は <a href="https://www.pgpool.net/docs/latest/ja/html/runtime-watchdog-config.html#GUC-HOSTNAME" target="_blank" rel="noopener">hostname</a>, <a href="https://www.pgpool.net/docs/latest/ja/html/runtime-watchdog-config.html#GUC-HEARTBEAT-HOSTNAME" target="_blank" rel="noopener">heartbeat_hostname</a> で watchdog と heartbeat で LISTEN するソケットを設定し、他ノードから heartbeat を送るソケットを <a href="https://www.pgpool.net/docs/latest/ja/html/runtime-watchdog-config.html#GUC-HOSTNAME" target="_blank" rel="noopener">hostname</a>, <a href="https://www.pgpool.net/docs/latest/ja/html/runtime-watchdog-config.html#GUC-HEARTBEAT-HOSTNAME" target="_blank" rel="noopener">heatbeat_hostname</a> で指定したネットワークアドレスとしてください。</p>
<pre>WARNING:  watchdog: lifecheck has not started yet</pre>
<p>また 4.7. 1 ではさらに Watchdog と heartbeat それぞれについて LISTEN するソケットを個別で指定できるようになりました。<br />
これによりノード外部から見えるアドレスと、ノード内部から認識されるアドレスが異なる可能性があるコンテナ環境や、ポートフォワーディングを設定している場合でも、より柔軟に設定できるようになりました。<br />
Watchdog については <a href="https://www.pgpool.net/docs/latest/ja/html/runtime-watchdog-config.html#GUC-WD-LISTEN-ADDRESS" target="_blank" rel="noopener">wd_listen_address</a> によってネットワークアドレスを、<a href="https://www.pgpool.net/docs/latest/ja/html/runtime-watchdog-config.html#GUC-WD-LISTEN-PORT" target="_blank" rel="noopener">wd_listen_port</a> によってポートも指定することができます。<br />
heartbeat についてはそれぞれ <a href="https://www.pgpool.net/docs/latest/ja/html/runtime-watchdog-config.html#GUC-WD-HEARTBEAT-LISTEN-ADDRESSES" target="_blank" rel="noopener">wd_heartbeat_listen_addresses</a>, <a href="https://www.pgpool.net/docs/latest/ja/html/runtime-watchdog-config.html#GUC-WD-HEARTBEAT-LISTEN-PORT" target="_blank" rel="noopener">wd_heartbeat_listen_port</a> によって指定できます。<br />
これらのパラメータが設定されているとき <a href="https://www.pgpool.net/docs/latest/ja/html/runtime-watchdog-config.html#GUC-HOSTNAME" target="_blank" rel="noopener">hostname</a>, <a href="https://www.pgpool.net/docs/latest/ja/html/runtime-watchdog-config.html#GUC-HEARTBEAT-HOSTNAME" target="_blank" rel="noopener">heartbeat_hostname</a>, <a href="https://www.pgpool.net/docs/latest/ja/html/runtime-watchdog-config.html#GUC-WD-PORT" target="_blank" rel="noopener">wd_port</a>, <a href="https://www.pgpool.net/docs/latest/ja/html/runtime-watchdog-config.html#GUC-HEARTBEAT-PORT" target="_blank" rel="noopener">heartbeat_port</a> のローカルの設定は上書きされてソケットが作成されます。</p>
<pre># pgpool.conf 設定例
hostname0 = '192.168.100.50'
wd_port0 = 9000
heartbeat_hostname0 = '192.168.100.101'
heartbeat_port0 = 9694
wd_listen_address = 192.168.100.100
wd_listen_port = 50000
wd_heartbeat_listen_addresses = 102.168.100.110
wd_heartbeat_listen_port = 51000</pre>
<pre>tcp        0      0 <b>192.168.100.100:50000    </b>0.0.0.0:*     LISTEN      41636/pgpool: watchdog
udp        0      0 <b>192.168.100.110:51000 </b>   0.0.0.0:*                 41649/pgpool: heartbeat receiver
udp        0      0 <b>192.168.100.110:51000</b>    0.0.0.0:*                 41650/pgpool: heartbeat receiver</pre>
<p>これらのパラメータが導入された背景は、Docker 環境を代表とした TCP 転送ルールを設けているインターフェース間で通信をする際に LISTEN するソケットを転送ルールに合わせて設定したいケースに対応するためです。<br />
例えばノード 0 が IP:192.168.0.0, ポート番号:10000 のソケットに接続しようとし、TCP 転送ルールによってノード 1 の IP:192.168.100.100,ポート番号:20000 のソケットにリダイレクトされる環境の場合、ノード 1 側でリダイレクト後のネットワークアドレス、ポート番号(今回の例では IP:192.168.100.100, ポート番号:20000)に設定することで TCP 転送ルールがある場合でも通信が可能となりました。</p>
<h3>オンラインリカバリに使用するデータベースを指定する recovery_database パラメータの追加</h3>
<p>オンラインリカバリとは障害が発生して切り離されてしまった PostgreSQL ノードをプライマリに再同期して復帰する処理を各ノードを停止することなく行うことができる機能です。</p>
<p>以前はオンラインリカバリに template1 データベースを使用するようにしていましたが、今回追加された <a href="https://www.pgpool.net/docs/latest/ja/html/runtime-online-recovery.html#GUC-RECOVERY-DATABASE" target="_blank" rel="noopener">recovery_databse</a> パラメータにオンラインリカバリに使用するデータベースを指定することができるようになりました。</p>
<pre>#pgpool.conf の recovery_database を指定
recovery_database = 'postgres'</pre>
<p>デフォルト値は postgres になっています。<br />
4.6 以前から移行をする際には <a href="https://www.pgpool.net/docs/latest/ja/html/runtime-online-recovery.html#GUC-RECOVERY-DATABASE" target="_blank" rel="noopener">recovery_database</a> に指定したデータベースで下記コマンドを実施してオンラインリカバリに必要な関数をインストールしておく必要があります。</p>
<pre class="PROGRAMLISTING">psql postgres -c "CREATE EXTENSION pgpool_recovery"</pre>
<h3><tt class="FILENAME">.pcppass</tt>ファイルからの読み取りに失敗時の挙動改善</h3>
<p>.pcppass ファイルは pcp コマンドを実行したときに読み込まれるパスワードファイルです。</p>
<p>4.6 までは pcp コマンド実行時に .pcppass ファイルが未作成かパスワードファイルの権限設定が不適切の場合、エラーで終了していました。<br />
また -d, &#8211;debug オプションがないとデバッグ情報が出力されず失敗の原因も特定できませんでした。</p>
<pre>FATAL:  authentication failed for user "sraoss"
DETAIL:  username and/or password does not match</pre>
<p>失敗後は .pcppass ファイルを適切な権限で作成するか、パスワード入力を受け付けるオプションである -W オプションをつけて pcp コマンドを再実行する必要がありました。</p>
<pre>pcp_node_info -p 9898 -W
Password:</pre>
<p>4.7 からはエラーを出力して終了するのではなく、クライアントのコマンドプロンプトにフォールバックして引き続きパスワードを入力することができるようになりました。</p>
<p>また WARNING による警告が -d, &#8211;debug オプションなく出力される仕様に変更され、読み取りができなかった原因もメッセージから特定することができます。</p>
<pre class="PROGRAMLISTING">WARNING: password file ~/.pcppass is not a plain file
WARNING: password file ~/.pcppass has group or world access; permissions should be u=rw (0600) or less</pre>
<h3>フロントエンド / バックエンドプロトコルバージョン 3.2 サポートの追加</h3>
<p>PostgreSQL 18 ではプロトコルバージョン 3.2 に対応し、可変長のキャンセルキーが用いることができるようになりました。<br />
この変更に合わせ、Pgpool-II でもプロトコルバージョン 3.2 を利用できるように改善がされました。</p>
<p>max_protocol_version や PGMAXPROTOCOLVERSION を用いた以下のようなコマンドで 3.2 プロトコルを使用して PostgreSQL のフロントエンドとバックエンドを接続することができます。<br />
バージョンには 3.2 だけでなく PostgreSQL 18 のデフォルトのプロトコルバージョンである 3.0 を指定することもできます。</p>
<pre class="PROGRAMLISTING"># max_protocol_version オプションで 3.0 バージョンで接続
psql "host=localhost dbname=test user=sraoss max_protocol_version=3.0 port=11000"

# 環境変数 PGMAXPROTOCOLVERSION に 3.2 を指定して接続
PGMAXPROTOCOLVERSION="3.2" psql -p 11000 test</pre>
<p>新規接続時は指定したプロトコルバージョンで接続を確立しますが、コネクションプーリングのキャッシュがある場合は既存のキャッシュに保存されたのプロトコルバージョンを用いて接続を行うため確立済みの接続間でバージョンが異なることによるエラーの心配もありません。</p>
<h3>PostgreSQL 18 の SQL パーサの導入</h3>
<p>Pgpool-II ではメジャーリリースするたびに、PostgreSQL の最新パーサを移植しています。今回のリリースでは PostgreSQL 18 の新しいパーサを取り込みました。</p>
<p>Pgpool-II の負荷分散機能では、SQL を解析して参照か更新かを判別し、どのノードに振り分けるかを決めています。そのため、PostgreSQL の新バージョンでの SQL の変更に対応するには、SQL パーサを移植する必要があります。</p>
<p>PostgreSQL 18 での SQL のおもな変更点は以下のとおりです。</p>
<ul>
<li>生成列を仮想列として使用可能に</li>
<li>DML クエリの RETURNING にOLD/NEWのサポートを追加</li>
<li>各種制約の追加(例: WITHOUT OVERLAPS、ENFORCED/NOT ENFORCED)</li>
</ul>
<p>Pgpool-II 4.7 では上記の変更点に対応しています。</p>
<h3>logdir パラメータ名を work_dir へ変更</h3>
<p><tt>4.6 までは Pgpool-II の起動状態を記述する </tt><tt class="LITERAL">pgpool_status や memq_lock_file といった管理</tt>ファイルを logdir に指定するディレクトリに保存していました。<br />
しかし logdir というパラメータ名はログ関連のファイルを格納するディレクトリの設定パラメータと誤解されやすい問題がありました。</p>
<p>4.7 からはパラメータ名が <a href="https://www.pgpool.net/docs/47/ja/html/runtime-misc.html#GUC-WORK-DIR" target="_blank" rel="noopener">work_dir</a> へ変更となりました。</p>
<p>logdir のパラメータ自体も引き続き利用することができ、logdir に指定した値が <a href="https://www.pgpool.net/docs/47/ja/html/runtime-misc.html#GUC-WORK-DIR" target="_blank" rel="noopener">work_dir</a> の設定値へと再設定され Pgpool-II の終了時に以下ワーニングが表示されます。</p>
<pre>2026-01-08 11:50:48.193: main pid 18667: WARNING: logdir is changed to work_dir
2026-01-08 11:50:48.193: main pid 18667: DETAIL: if logdir is specified, the value will be set to work_dir</pre>
<h3>Slony モードの廃止</h3>
<p class="PROGRAMLISTING"><a href="https://www.pgpool.net/docs/latest/ja/html/runtime-config-running-mode.html#GUC-BACKEND-CLUSTERING-MODE" target="_blank" rel="noopener">backend_clustering_mode</a> で指定することができていた Slony モードが廃止されました。</p>
<p class="PROGRAMLISTING">データのレプリケーションを Slony-I が行うクラスタリングモードの一つでしたが、Slony-I は 3 年前からリリースが停止しています。<br />
現在は Slony モードについて積極的に利用するユーザーが見られず、廃止のアナウンスに異議がなかったため 4.7 からは廃止となりました。</p>
<h3>Pgpool-II の libpcp ライブラリの名称を libpgpoolpcp に変更</h3>
<p class="PROGRAMLISTING">4.7.1 のマイナリリースにて Pgpool-II のライブラリである libpcp の名称を libpgpoolpcp に変更されました。<br />
背景として、RHEL の libpcp ライブラリと Pgpool-II の libpcp ライブラリがコンフリクトする問題があったためです。</p>
<h2>おわりに</h2>
<p>今回は、Pgpool-II 4.7 の新機能について紹介しました。</p>
<p>Pgpool-II 4.7 では、より実用的で便利な機能が数多く追加・改善されています。PostgreSQL の高可用性構成や負荷分散の実現を検討されている方にとって、Pgpool-II は有力な選択肢です。ぜひこの機会に Pgpool-II の導入をご検討ください。</p>
<div>
<a href="https://www.sraoss.co.jp/prod_serv/support/pgsql-mainte/?utm_source=sraoss-techblog&utm_medium=referral&utm_campaign=under-article-pgsql" rel="noopener" style="color:initial;" target="_blank" class="no-ext"></p>
<div style="background-color:#DAEFF6; padding:20px; border-radius:8px; text-align:center;">
SRA OSSでは、PostgreSQL/Pgpool-II のサポートを提供しております。<br />
詳しくは<strong style="color:#2581c4;">弊社ホームページ</strong>をご覧ください。
</div>
<p></a>
</div>

]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>SRA OSS による PostgreSQL 開発への貢献（2025年）</title>
		<link>https://www.sraoss.co.jp/tech-blog/pgsql/postgresql_contributions_2025/</link>
		
		<dc:creator><![CDATA[長田 悠吾 (Yugo Nagata)]]></dc:creator>
		<pubDate>Thu, 12 Mar 2026 04:00:23 +0000</pubDate>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[Committer]]></category>
		<category><![CDATA[Contributor]]></category>
		<category><![CDATA[pg_ivm]]></category>
		<category><![CDATA[Pgpool-II]]></category>
		<category><![CDATA[オープンソースソフトウェア]]></category>
		<category><![CDATA[貢献]]></category>
		<guid isPermaLink="false">https://www.sraoss.co.jp/tech-blog/?p=19937</guid>

					<description><![CDATA[はじめに PostgreSQL は、世界中の開発者や企業が協力することで発展してきたコミュニティベースのオープンソース RDBMSです。SRA OSS は、1996年の PostgreSQL 初版リリースの直後からコミュ ...]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">はじめに</h2>



<p class="wp-block-paragraph">PostgreSQL は、世界中の開発者や企業が協力することで発展してきたコミュニティベースのオープンソース RDBMSです。SRA OSS は、1996年の PostgreSQL 初版リリースの直後からコミュニティの一員として、PostgreSQL 本体の開発、周辺ツールの開発、コミュニティ運営、ドキュメント翻訳など、多岐にわたって活動を続けてきました。本記事では、2025 年における SRA OSS メンバーのPostgreSQL 本体および関連ツールの開発への貢献内容を紹介します。</p>
<p><span id="more-19937"></span></p>



<h2 class="wp-block-heading">SRA OSS 在籍の PostgreSQL Contributors</h2>



<p class="wp-block-paragraph">PostgreSQL コミュニティでは、コード、ドキュメント、議論、コミュニティ活動などを通じ、継続的に貢献している個人を「<a href="https://www.postgresql.org/community/contributors/" target="_blank" rel="noopener">PostgreSQL Contributor</a>」として認定しています。</p>



<p class="wp-block-paragraph">現在、SRA OSS には以下5名の PostgreSQL Contributor が在籍しています。なかでも顧問の石井 達夫と取締役の藤井 雅雄は、特に多大な影響を与えてきた Major Contributor として認定されています。また、この２人は PostgreSQL 本体コードへのコミット権限を持つコミッタ（Committer）でもあります。</p>



<ul class="wp-block-list">
<li>Major Contributors（かつ、Committer）
<ul class="wp-block-list">
<li>石井 達夫（顧問）</li>



<li>藤井 雅雄 （取締役）</li>
</ul>
</li>



<li>Contributors
<ul class="wp-block-list">
<li>長田 悠吾</li>



<li>鳥越 淳</li>



<li>高塚 遥</li>
</ul>
</li>
</ul>



<h2 class="wp-block-heading">2025年の PostgreSQL 開発への貢献</h2>



<p class="wp-block-paragraph">以下では、PostgreSQL コミュニティの Major Contributor かつコミッタである Robert Haas 氏のブログ記事「 <a href="https://rhaas.blogspot.com/2026/01/who-contributed-to-postgresql.html" target="_blank" rel="noopener">Who Contributed to PostgreSQL Development in 2025?</a>」で公開されている解析データを基に、SRA OSS メンバーが行った具体的な PostgreSQL 開発への貢献を紹介します。</p>



<p class="wp-block-paragraph">なお、公開されているオリジナルデータでは、パッチの作者情報は git のコミットログから自動的に決定されていますが、本記事では、Robert Haas 氏の確認の上で、コミットログをもとに一部のコミットの作者情報を修正したデータを使用しています。</p>



<h3 class="wp-block-heading">PostgreSQL にコミットされたパッチ</h3>



<p class="wp-block-paragraph">PostgreSQL の開発は、提案されたパッチについてコミュニティで議論・レビューが行われ、その後コミットされることで進められます。</p>



<p class="wp-block-paragraph">2025年にコミットされたパッチのうち、SRA OSS メンバーが主要作者（中心的にコードを書いた者）として関わったものは以下のとおりです。</p>



<figure class="wp-block-table is-style-regular has-small-font-size">
<table>
<thead>
<tr>
<th class="has-text-align-center" data-align="center">主要作者</th>
<th class="has-text-align-center" data-align="center">追加行数</th>
<th class="has-text-align-center" data-align="center">コミット数</th>
<th>主な内容</th>
</tr>
</thead>
<tbody>
<tr>
<td class="has-text-align-center" data-align="center">長田悠吾</td>
<td class="has-text-align-center" data-align="center">671</td>
<td class="has-text-align-center" data-align="center">24</td>
<td>MERGE 文の同時更新処理まわりの不具合修正、psql の leakproof 情報出力およびタブ補完改善、pgbench のパイプラインモード関連の不具合修正、ENUM 作成時のエラーメッセージ改善、vacuumdb の不具合改善</td>
</tr>
<tr>
<td class="has-text-align-center" data-align="center">藤井雅雄</td>
<td class="has-text-align-center" data-align="center">623</td>
<td class="has-text-align-center" data-align="center">50</td>
<td>論理レプリケーションおよび pgoutput の改善とドキュメント整備、レプリケーション関連の不具合修正、psql / pg_dump / pg_restore / pgbench などツール類の改善・不具合修正</td>
</tr>
<tr>
<td class="has-text-align-center" data-align="center">石井達夫</td>
<td class="has-text-align-center" data-align="center">243</td>
<td class="has-text-align-center" data-align="center">8</td>
<td>IGNORE NULLS を伴うウィンドウ集約関数処理の不具合修正、文字列処理用 API の改良</td>
</tr>
<tr>
<td class="has-text-align-center" data-align="center">高塚遥</td>
<td class="has-text-align-center" data-align="center">216</td>
<td class="has-text-align-center" data-align="center">1</td>
<td>ALTER DEFAULT PRIVILEGES に large objects のデフォルト権限設定を追加</td>
</tr>
<tr>
<td class="has-text-align-center" data-align="center">鳥越淳</td>
<td class="has-text-align-center" data-align="center">70</td>
<td class="has-text-align-center" data-align="center">6</td>
<td>スタンバイ接続拒否時のエラーメッセージ改善、psql タブ補完改善、pg_log_backend_memory_contexts() や pg_aios ビューの改善</td>
</tr>
<tr>
<td class="has-text-align-center" data-align="center">三和陽菜</td>
<td class="has-text-align-center" data-align="center">2</td>
<td class="has-text-align-center" data-align="center">1</td>
<td>psql の PREPARE 文に対するタブ補完を改善</td>
</tr>
</tbody>
</table>
</figure>



<div class="wp-block-group"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<p class="wp-block-paragraph">なお、パッチによって複数人の共同作業により作成されたものがありますが、その場合で、主要作者でないコミットについては上表の数字に含まれていません。</p>
</div></div>



<h3 class="wp-block-heading">メーリングリスト（pgsql-hackers）における議論</h3>



<p class="wp-block-paragraph">PostgreSQL 開発は、主に pgsql-hackers と呼ばれるメーリングリストでの議論を通じて進められます。このメーリングリストの中で、機能改善やバグ修正の提案、パッチの投稿、レビューなど、開発に関するやりとりが日々が行われています。</p>



<p class="wp-block-paragraph">2025年にSRA OSSメンバーが pgsql-hackers に投稿はした議論数は以下のとおりです。</p>



<figure class="wp-block-table has-small-font-size">
<table>
<thead>
<tr>
<th class="has-text-align-center" data-align="center">氏名</th>
<th class="has-text-align-center" data-align="center">投稿数</th>
</tr>
</thead>
<tbody>
<tr>
<td class="has-text-align-center" data-align="center">藤井 雅雄</td>
<td class="has-text-align-center" data-align="center">495</td>
</tr>
<tr>
<td class="has-text-align-center" data-align="center">長田 悠吾</td>
<td class="has-text-align-center" data-align="center">274</td>
</tr>
<tr>
<td class="has-text-align-center" data-align="center">石井 達夫</td>
<td class="has-text-align-center" data-align="center">148</td>
</tr>
<tr>
<td class="has-text-align-center" data-align="center">鳥越 淳</td>
<td class="has-text-align-center" data-align="center">80</td>
</tr>
<tr>
<td class="has-text-align-center" data-align="center">高塚 遥</td>
<td class="has-text-align-center" data-align="center">2</td>
</tr>
<tr>
<td class="has-text-align-center" data-align="center">三和 陽菜</td>
<td class="has-text-align-center" data-align="center">2</td>
</tr>
</tbody>
</table>
</figure>



<h3 class="wp-block-heading">コミッタの活動</h3>



<p class="wp-block-paragraph">コミッタはパッチをPostgreSQL コードに反映する権限を持っていますが、その際には自分が書いていないパッチについても、その適用可否を慎重に判断して、品質を確保したうえでコミットするという、重要な役割をもっています。</p>



<p class="wp-block-paragraph">以下は、SRA OSS に在籍するコミッタによる、自分が主要作者でないパッチのコミット実績を集計したものです。</p>



<figure class="wp-block-table has-small-font-size">
<table>
<thead>
<tr>
<th class="has-text-align-center" data-align="center">氏名</th>
<th class="has-text-align-center" data-align="center">コミットした行数</th>
<th class="has-text-align-center" data-align="center">コミット数</th>
</tr>
</thead>
<tbody>
<tr>
<td class="has-text-align-center" data-align="center">藤井 雅雄</td>
<td class="has-text-align-center" data-align="center">1688</td>
<td class="has-text-align-center" data-align="center">60</td>
</tr>
<tr>
<td class="has-text-align-center" data-align="center">石井 達夫</td>
<td class="has-text-align-center" data-align="center">1112</td>
<td class="has-text-align-center" data-align="center">3</td>
</tr>
</tbody>
</table>
</figure>



<h2 class="wp-block-heading">サードパーティーツールの開発</h2>



<p class="wp-block-paragraph">SRA OSS は PostgreSQL 本体だけでなく、関連ツールや拡張モジュールの開発にも取り組むことで、周辺エコシステムの発展に貢献しています。ここでは、SRA OSS が中心開発者として携わる <a href="https://www.pgpool.net/" target="_blank" rel="noopener">Pgpool-II </a>と <a href="https://github.com/sraoss/pg_ivm/" target="_blank" rel="noopener">pg_ivm </a>の活動について紹介します。</p>



<h3 class="wp-block-heading">Pgpool-II</h3>



<p class="wp-block-paragraph">Pgpool-IIはPostgeSQL 用のクラスタ管理ツールであり、2025年は 2 回のメジャーリリースと複数のマイナーリリースが行われました。</p>



<ul class="wp-block-list">
<li>Pgpool-II 4.6.0 (2025/02/28)
<ul class="wp-block-list">
<li>ログ管理とクエリキャッシュ操作のPCPコマンド追加、など</li>
</ul>
</li>



<li>Pgpool-II 4.7.0 (2025/12/23)
<ul class="wp-block-list">
<li>フロントエンド/バックエンドプロトコルバージョン3.2サポート</li>



<li>watchdogとheartbeat receiverのセキュリティ強化、など</li>
</ul>
</li>



<li>そのほか、不具合修正を含む計６回のマイナーリリース</li>
</ul>



<h3 class="wp-block-heading">pg_ivm</h3>



<p class="wp-block-paragraph">pg_ivm は、マテリアライズドビューの増分メンテナンス機能（Incremental View Maintenance）をPostgreSQL に提供する拡張モジュールです。2025年には以下のリリースが行われました。</p>



<ul class="wp-block-list">
<li>v1.10（2025/03/11）：不具合修正</li>



<li>v1.11（2025/05/26）：不具合修正</li>



<li>v1.12（2025/09/04）：PostgreSQL 18 対応</li>



<li>v1.13（2025/10/20）：外部結合ビューに対応</li>
</ul>



<h2 class="wp-block-heading">まとめ</h2>



<p class="wp-block-paragraph">2025 年における SRA OSS のPostgreSQL 本体および関連ツールの開発への貢献を紹介しました。ここで紹介したもの以外にも、日本PostgreSQLユーザ会（JPUG）の運営、ドキュメントの日本語翻訳、ビルドファーム提供など、多面的な活動を通して PostgreSQL コミュニティに貢献しています。</p>



<p class="wp-block-paragraph">こうした活動を通して、SRA OSS は今後も PostgreSQL とそのエコシステムの発展に貢献し続けていきます。</p>



<p class="wp-block-paragraph"><div>
<a href="https://www.sraoss.co.jp/prod_serv/support/pgsql-mainte/?utm_source=sraoss-techblog&utm_medium=referral&utm_campaign=under-article-pgsql" rel="noopener" style="color:initial;" target="_blank" class="no-ext"></p>
<div style="background-color:#DAEFF6; padding:20px; border-radius:8px; text-align:center;">
SRA OSSでは、PostgreSQL/Pgpool-II のサポートを提供しております。<br />
詳しくは<strong style="color:#2581c4;">弊社ホームページ</strong>をご覧ください。
</div>
<p></a>
</div>
</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>多機能ミドルウェア「Pgpool-II」セミナー【3/24 開催】</title>
		<link>https://www.sraoss.co.jp/tech-blog/info/seminar_20260324/</link>
		
		<dc:creator><![CDATA[sraoss]]></dc:creator>
		<pubDate>Tue, 10 Mar 2026 05:50:40 +0000</pubDate>
				<category><![CDATA[おしらせ]]></category>
		<category><![CDATA[Pgpool-II]]></category>
		<category><![CDATA[イベント]]></category>
		<category><![CDATA[サードパーティーソフトウェア]]></category>
		<guid isPermaLink="false">https://www.sraoss.co.jp/tech-blog/?p=20183</guid>

					<description><![CDATA[&#8211; PostgreSQLの可用性・性能・運用性を“もう一段”引き上げたい方へ &#8211; PostgreSQLをより強化したい方に向けて、20年以上進化を続ける 多機能ミドルウェア「Pgpool-II」の ...]]></description>
										<content:encoded><![CDATA[<div style="font-family: 'Helvetica Neue', Arial, 'Hiragino Kaku Gothic ProN', 'Hiragino Sans', Meiryo, sans-serif; color: #333; line-height: 1.8; max-width: 800px; margin: 0 auto; padding: 10px;">
<div style="text-align: center; margin-bottom: 25px;">
<p style="color: #000; font-size: 1.15rem; margin-bottom: 15px; font-weight: bold; text-align: left;">&#8211; PostgreSQLの可用性・性能・運用性を“もう一段”引き上げたい方へ &#8211;</p>
<p style="font-size: 1.05rem; font-weight: normal; color: #000; line-height: 1.4; text-align: left;">PostgreSQLをより強化したい方に向けて、20年以上進化を続ける<br />
多機能ミドルウェア「Pgpool-II」の全容をぎゅっと詰め込んだウェビナーを開催します！</p>
</div>
<div style="margin-bottom: 20px; text-align: center;">
<p><a href="https://www.sraoss.co.jp/event_seminar/detail/2026_0324/?utm_source=techblog&amp;utm_medium=email&amp;utm_campaign=pgpool0324" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="alignnone" style="width: 100%; height: auto; border-radius: 12px; box-shadow: 0 4px 15px rgba(0,0,0,0.1); max-width: 750px;" src="https://www.sraoss.co.jp/tech-blog/wp-content/uploads/2026/03/Pgpool-II-seminar_banner_fix_20260324.png" alt="Pgpool-IIセミナー 3/24開催" width="1280" height="720" /></a></p>
</div>
<div style="text-align: center; margin-bottom: 35px; width: 100%; display: flex; justify-content: center;"><a style="background: #fff; color: #0056b3; border: 2px solid #0056b3; text-decoration: none; padding: 12px 35px; border-radius: 50px; font-weight: bold; display: inline-block; box-shadow: 0 2px 5px rgba(0,0,0,0.05); margin: 0 auto;" href="https://www.sraoss.co.jp/event_seminar/detail/2026_0324/?utm_source=techblog&amp;utm_medium=email&amp;utm_campaign=pgpool0324" target="_blank" rel="noopener"> セミナーの内容を見てみる </a></div>
<p><span id="more-20183"></span></p>
<hr style="border: 0; border-top: 1px solid #eee; margin: 40px 0;" />
<h3 style="font-size: 1.2rem; border-left: 5px solid #0056b3; padding-left: 12px; margin-bottom: 20px; color: #000;">開催概要</h3>
<table style="width: 100%; border-collapse: collapse; margin-bottom: 40px; border: 1px solid #ddd; color: #000;">
<tbody>
<tr style="border-bottom: 1px solid #ddd;">
<th style="text-align: left; padding: 15px; background: #fafafa; width: 20%; border-right: 1px solid #ddd; color: #000;">タイトル</th>
<td style="padding: 15px; font-weight: normal; color: #000; font-size: 1rem;">PostgreSQLを止めない：Pgpool-IIで実現する高可用・高性能 PostgreSQL運用 <span style="font-size: 1rem;">～ Pgpool-II開発者が語る最新動向 ～</span></td>
</tr>
<tr style="border-bottom: 1px solid #ddd;">
<th style="text-align: left; padding: 15px; background: #fafafa; border-right: 1px solid #ddd; color: #000;">日時</th>
<td style="padding: 15px; color: #000;">2026 年 3 月 24 日（火） 14:00 ～ 15:20</td>
</tr>
<tr style="border-bottom: 1px solid #ddd;">
<th style="text-align: left; padding: 15px; background: #fafafa; border-right: 1px solid #ddd; color: #000;">視聴方法</th>
<td style="padding: 15px; color: #000;">Zoom Webinar によるライブ配信</td>
</tr>
<tr style="border-bottom: 1px solid #ddd;">
<th style="text-align: left; padding: 15px; background: #fafafa; border-right: 1px solid #ddd; color: #000;">費用</th>
<td style="padding: 15px; color: #000;">無料（事前登録制）</td>
</tr>
<tr style="border-bottom: 1px solid #ddd;">
<th style="text-align: left; padding: 15px; background: #fafafa; border-right: 1px solid #ddd; color: #000;">主催</th>
<td style="padding: 15px; color: #000;">株式会社SRA OSS</td>
</tr>
</tbody>
</table>
<div style="background: #fdfaf5; border: 1px solid #f3e5d0; border-radius: 8px; padding: 25px; margin-bottom: 40px;">
<h3 style="margin-top: 0; color: #d35400; font-size: 1.2rem;">★ ここがポイント</h3>
<ul style="list-style: none; padding: 0; margin: 0;">
<li style="margin-bottom: 10px;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Pgpool-IIを活用した可用性・クラスタ構成の“具体像”がつかめます</li>
<li style="margin-bottom: 10px;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> オンプレ／クラウドの事例から、構成のヒントを得られます</li>
<li style="margin-bottom: 10px;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Pgpool-II 4.7の新機能＆コミュニティ動向をまとめてキャッチできます</li>
<li style="margin-bottom: 10px;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 疑問に思ったことは ”すぐ聞ける”Live Q&amp;Aを実施</li>
<li style="margin-bottom: 0;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> セミナーにご参加＆アンケート回答いただいた方には、講演資料をプレゼント</li>
</ul>
</div>
<div style="margin-bottom: 40px; padding: 0 10px;">
<p>PostgreSQLは、信頼性と拡張性に優れたオープンソースのRDBMSとして広く活用されていますが、標準機能だけでは運用上の課題に直面することがあります。</p>
<p>そこで、PostgreSQLの可用性と運用性を補完するために生まれたツールがPgpool-IIです。<br />
Pgpool-IIは、PostgreSQLに冗長化・負荷分散・フェイルオーバーを提供する多機能ミドルウェアです。<br />
2003年に公開されてから、20年以上にわたり改善を重ねながら進化し、現在ではミッションクリティカルなシステムにも採用されるソフトウェアへと成長しました。</p>
<p>本セミナーでは、<strong>「Pgpool-IIがなぜ必要なのか」「どのような構成で効果を発揮するのか」「オンプレ／クラウドでどう活用できるのか」</strong>を、事例とともに解説します。<br />
ぜひライブでご覧ください！</p>
</div>
<h3 style="font-size: 1.2rem; border-left: 5px solid #0056b3; padding-left: 12px; margin-bottom: 25px;">プログラム</h3>
<div style="margin-bottom: 40px; background: #fff; border: 1px solid #eee; padding: 20px; border-radius: 8px;">
<h4 style="margin: 0 0 15px 0; color: #0047BB; font-size: 1.1rem;">Pgpool-IIの歩みと進化 ー 基本機能から最新ユースケースまで</h4>
<div style="display: flex; gap: 20px; align-items: flex-start; margin-bottom: 15px;">
<div style="width: 100px; height: 100px; flex-shrink: 0; background: #fff; border-radius: 50%; border: 1px solid #eee; display: flex; align-items: center; justify-content: center; overflow: hidden; padding: 2px;"><img decoding="async" style="width: 100%; height: 100%; object-fit: cover; object-position: center top; border-radius: 50%;" src="https://www.sraoss.co.jp/tech-blog/wp-content/uploads/2023/08/pen_2-213x300.jpg" alt="彭 博 様" /></div>
<div style="font-size: 0.95rem; line-height: 1.6;">
<p>Pgpool-IIはオンプレ用途に限らず、クラウド上での運用やマネージドサービスと組み合わせることで、多様なユースケースで活用できます。それらの代表的なケースと導入メリットを解説します。</p>
<p>また近年は、遠隔地での性能改善など、従来構成では顕在化しにくかった新たな要望も増えています。こうしたユーザニーズに対し、Pgpool-IIがどのように機能強化や改善の取り組みを進めているのか、今後の方向性についてもご紹介します。</p>
<p style="margin-top: 10px; color: #666;">講師：株式会社SRA OSS 彭 博（Pgpool-II開発者／コミュニティリーダー）</p>
</div>
</div>
</div>
<div style="margin-bottom: 40px; background: #fff; border: 1px solid #eee; padding: 20px; border-radius: 8px;">
<h4 style="margin: 0 0 15px 0; color: #0047BB; font-size: 1.1rem;">Pgpool-II 4.7 新機能解説</h4>
<div style="display: flex; gap: 20px; align-items: flex-start; margin-bottom: 15px;">
<div style="width: 100px; height: 100px; flex-shrink: 0; background: #fff; border-radius: 50%; border: 1px solid #eee; display: flex; align-items: center; justify-content: center; overflow: hidden; padding: 2px;"><img decoding="async" style="width: 100%; height: 100%; object-fit: cover; object-position: center top; border-radius: 50%;" src="https://www.sraoss.co.jp/tech-blog/wp-content/uploads/2025/06/6104221bfe5d36c6654d592df84bc603-218x300.jpg" alt="越野 太基 様" /></div>
<div style="font-size: 0.95rem; line-height: 1.6;">
<p>2025年12月にリリースされたPgpool-II 4.7では、性能向上や構成の柔軟性を高めるための改善が複数盛り込まれています。本セッションでは、4.7の主要な追加・改善点を整理しながら解説します。</p>
<p style="margin-top: 10px; color: #666;">講師：株式会社SRA OSS 越野 太基（Pgpool-II開発者）</p>
</div>
</div>
</div>
<div style="padding-left: 20px; border-left: 3px solid #eee; margin-bottom: 40px; font-size: 0.95rem;">
<ul>
<li>Pgpool-II活用を支えるSRA OSSのサービスご紹介</li>
<li>Live Q&amp;A　⇒ セミナー中にいただいたご質問に対して、講師よりまとめ・補足を行います。</li>
</ul>
</div>
<p>PostgreSQLを運用中、またはPostgreSQLの情報を収集中の方がお近くにいらっしゃいましたら、ぜひお声がけいただき、皆さまにご参加いただけますと幸いです。よろしくお願いいたします。</p>
<div style="text-align: center; background: #f8f9fa; padding: 25px 20px; border-radius: 12px; margin-top: 50px; border: 1px solid #eee;">
<p style="margin-bottom: 20px; font-weight: bold; font-size: 1.35rem; color: #000;">▼ セミナー申込はこちら</p>
<p><a style="background: #e67e22; color: #fff !important; text-decoration: none; padding: 22px 60px; font-size: 1.45rem; font-weight: bold; border-radius: 5px; display: inline-block; box-shadow: 0 4px 10px rgba(0,0,0,0.1); margin: 0 auto;" href="https://info.sraoss.co.jp/seminar/registration/20260324" target="_blank" rel="noopener">無料で申し込む</a></p>
<p style="margin-top: 30px; font-size: 0.85rem; color: #666;">お問い合わせ：株式会社SRA OSS セミナー担当<br />
E-mail: pub@sraoss.co.jp<br />
<a href="https://www.sraoss.co.jp/" target="_blank" rel="noopener">https://www.sraoss.co.jp/</a></p>
</div>
</div>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Pgpool‑II コネクションプーリング機能の紹介</title>
		<link>https://www.sraoss.co.jp/tech-blog/pgpool/pgpool-connection-pooling/</link>
		
		<dc:creator><![CDATA[彭 博 (Bo Peng)]]></dc:creator>
		<pubDate>Fri, 01 Aug 2025 04:51:53 +0000</pubDate>
				<category><![CDATA[Pgpool-II]]></category>
		<category><![CDATA[Connection Pooling]]></category>
		<category><![CDATA[OSS]]></category>
		<guid isPermaLink="false">https://www.sraoss.co.jp/tech-blog/?p=18063</guid>

					<description><![CDATA[Pgpool-II は、PostgreSQL 専用のクラスタ管理ツールであり、コネクションプーリング、負荷分散、自動フェイルオーバーといった重要な機能を提供することで、PostgreSQL の高可用性と性能向上を実現しま ...]]></description>
										<content:encoded><![CDATA[<p><a href="https://pgpool.net/" target="_blank" rel="noopener">Pgpool-II</a> は、<a href="https://www.postgresql.org/" target="_blank" rel="noopener">PostgreSQL</a> 専用のクラスタ管理ツールであり、コネクションプーリング、負荷分散、自動フェイルオーバーといった重要な機能を提供することで、PostgreSQL の高可用性と性能向上を実現します。</p>
<p>本記事では、性能向上やサーバリソースの効率的な活用に役立つ<a href="https://www.pgpool.net/docs/latest/ja/html/runtime-config-connection-pooling.html" target="_blank" rel="noopener">コネクションプーリング</a>の仕組みについて解説します。あわせて、運用時に押さえておくべき設定のポイントについても紹介します。</p>
<p><span id="more-18063"></span></p>
<h2>コネクションプーリングとは</h2>
<p>データベースへの接続には、ネットワークのハンドシェイクや認証といった初期処理が伴います。そのため、リクエストのたびに接続してすぐに切断するような動作を繰り返すと、システム全体に大きなオーバーヘッドが発生してしまいます。</p>
<p>そこで効果を発揮するのが、コネクションプーリングという仕組みです。この機能では、一度確立したデータベース接続をキャッシュしておき、次回のリクエスト時に再利用することで、接続処理の無駄を省きます。これにより、システム全体のパフォーマンスが向上し、リソースを無駄なく効率的に活用できるようになります。</p>
<h2>Pgpool‑II コネクションプーリングの仕組み</h2>
<p>Pgpool-II は、ユーザ名・データベース名・プロトコルバージョンなどの接続プロパティが同一であるリクエストに対して、すでに確立された接続を再利用する仕組みを持っています。これにより、毎回の接続処理にかかるコストを削減し、全体の処理効率を高めることができます。</p>
<p>以下は、Pgpool-II コネクションプーリングの基本的な動作の流れです。</p>
<ol>
<li>起動時に、Pgpool-II の親プロセスは <a href="https://www.pgpool.net/docs/latest/ja/html/runtime-config-connection.html#GUC-NUM-INIT-CHILDREN" target="_blank" rel="noopener">num_init_children</a> で指定された数の子プロセスをあらかじめフォークします。各子プロセスは <a href="https://www.pgpool.net/docs/latest/ja/html/runtime-config-connection-pooling.html#GUC-MAX-POOL" target="_blank" rel="noopener">max_pool</a> の設定値まで接続をキャッシュします。</li>
<li>Pgpool-II はクライアントからの接続要求を待ち受けます。</li>
<li>いずれかの Pgpool-II の子プロセスが、クライアントからの接続要求を受け取ります。</li>
<li>その子プロセスは、保持している接続内に、接続情報 (データベース/ユーザ) の一致するものがあるかどうかを探します。見つかったら再利用します。</li>
<li>見つからなければ、子プロセスは新たに PostgreSQL サーバへ接続し、それをプールに登録します。<br />
プールに空きスロットがない場合は、最も古い接続を切断し、そのスロットを再利用します。</li>
<li>クライアントがセッション終了要求を送るまで、クエリ処理を行います。</li>
<li>クライアントが接続を終了します。Pgpool-II はクライアントへの接続をクローズしますが、PostgreSQL への接続を保持します。</li>
</ol>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-18065" src="https://www.sraoss.co.jp/tech-blog/wp-content/uploads/2025/07/connection-pooling.png" alt="" width="2186" height="1678" srcset="https://www.sraoss.co.jp/tech-blog/wp-content/uploads/2025/07/connection-pooling.png 2186w, https://www.sraoss.co.jp/tech-blog/wp-content/uploads/2025/07/connection-pooling-300x230.png 300w, https://www.sraoss.co.jp/tech-blog/wp-content/uploads/2025/07/connection-pooling-1024x786.png 1024w, https://www.sraoss.co.jp/tech-blog/wp-content/uploads/2025/07/connection-pooling-768x590.png 768w, https://www.sraoss.co.jp/tech-blog/wp-content/uploads/2025/07/connection-pooling-1536x1179.png 1536w, https://www.sraoss.co.jp/tech-blog/wp-content/uploads/2025/07/connection-pooling-2048x1572.png 2048w, https://www.sraoss.co.jp/tech-blog/wp-content/uploads/2025/07/connection-pooling-279x214.png 279w, https://www.sraoss.co.jp/tech-blog/wp-content/uploads/2025/07/connection-pooling-282x216.png 282w" sizes="auto, (max-width: 2186px) 100vw, 2186px" /></p>
<p>&nbsp;</p>
<h2>主な設定パラメータ</h2>
<p>以下は、コネクションプーリングに関連する設定項目です。</p>
<table>
<thead>
<tr>
<th><strong>パラメータ名</strong></th>
<th><strong>説明</strong></th>
<th><strong>デフォルト値</strong></th>
</tr>
</thead>
<tbody>
<tr>
<th nowrap="nowrap"><strong>connection_cache</strong></th>
<td style="font-size: 85%;">接続のキャッシュを有効にするかどうか</td>
<td style="font-size: 85%;">on (有効)</td>
</tr>
<tr>
<th nowrap="nowrap"><strong>max_pool</strong></th>
<td style="font-size: 85%;">各子プロセスがキャッシュできる接続の最大数</td>
<td style="font-size: 85%;">4</td>
</tr>
<tr>
<th nowrap="nowrap"><strong>connection_life_time</strong></th>
<td style="font-size: 85%;">キャッシュされた接続を切断するまで時間 (秒)</td>
<td style="font-size: 85%;">0 (無期限)</td>
</tr>
<tr>
<th nowrap="nowrap"><strong>child_life_time</strong></th>
<td style="font-size: 85%;">アイドル状態が続いた子プロセスを強制終了するまでの時間 (秒)</td>
<td style="font-size: 85%;">300 秒</td>
</tr>
<tr>
<th nowrap="nowrap"><strong>child_max_connections</strong></th>
<td style="font-size: 85%;">一つの子プロセスが処理できるクライアント接続数の上限。上限に達したらプロセスが終了し、新プロセスが生成される</td>
<td style="font-size: 85%;">0 (無制限)</td>
</tr>
</tbody>
</table>
<p>PostgreSQL では、接続ごとにプロセスが生成されますが、接続が切断されない限り、そのプロセスが使用するメモリは解放されません。Pgpool-II のコネクションプーリングを使用している場合、クライアントが切断しても PostgreSQL 側の接続は保持され続けるため、そのプロセスが使用するメモリも解放されません。</p>
<p>そのため、もし DB サーバのメモリ使用量が徐々に増加していく事象が発生している場合、Pgpool-II のコネクションプーリングが影響している可能性があります。このような事象やメモリリークのリスクを防ぐために、<a href="https://www.pgpool.net/docs/latest/ja/html/runtime-config-connection-pooling.html#GUC-CHILD-LIFE-TIME" target="_blank" rel="noopener">child_life_time</a> を設定することが推奨されています。ただし、Pgpool-II の子プロセスがアイドル状態になる時間が <a href="https://www.pgpool.net/docs/latest/ja/html/runtime-config-connection-pooling.html#GUC-CHILD-LIFE-TIME" target="_blank" rel="noopener">child_life_time</a> より短い場合、PostgreSQL への接続を終了する機会が得られません。そのため、<a href="https://www.pgpool.net/docs/latest/ja/html/runtime-config-connection-pooling.html#GUC-CHILD-MAX-CONNECTIONS" target="_blank" rel="noopener">child_max_connections</a> も併せて設定しておくことで、一定回数の接続処理後に子プロセスを終了させ、より確実に接続とメモリを解放することができます。</p>
<h2>設定上の注意点</h2>
<p>Pgpool-II は、各 PostgreSQL サーバに対して以下の数の接続を確立する可能性があります。</p>
<pre>num_init_children × max_pool</pre>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-18066" src="https://www.sraoss.co.jp/tech-blog/wp-content/uploads/2025/07/connections-scaled.png" alt="" width="2560" height="1216" srcset="https://www.sraoss.co.jp/tech-blog/wp-content/uploads/2025/07/connections-scaled.png 2560w, https://www.sraoss.co.jp/tech-blog/wp-content/uploads/2025/07/connections-300x143.png 300w, https://www.sraoss.co.jp/tech-blog/wp-content/uploads/2025/07/connections-1024x486.png 1024w, https://www.sraoss.co.jp/tech-blog/wp-content/uploads/2025/07/connections-768x365.png 768w, https://www.sraoss.co.jp/tech-blog/wp-content/uploads/2025/07/connections-1536x730.png 1536w, https://www.sraoss.co.jp/tech-blog/wp-content/uploads/2025/07/connections-2048x973.png 2048w, https://www.sraoss.co.jp/tech-blog/wp-content/uploads/2025/07/connections-304x144.png 304w, https://www.sraoss.co.jp/tech-blog/wp-content/uploads/2025/07/connections-282x134.png 282w" sizes="auto, (max-width: 2560px) 100vw, 2560px" /></p>
<p>そのため、PostgreSQL 側の <a href="https://www.postgresql.org/docs/current/runtime-config-connection.html#GUC-MAX-CONNECTIONS" target="_blank" rel="noopener">max_connections</a> 設定と照らし合わせて、Pgpool-II の接続数を適切に設定する必要があります。</p>
<p>まず、PostgreSQL にはスーパーユーザ用の接続枠が <a href="https://www.postgresql.org/docs/current/runtime-config-connection.html#GUC-SUPERUSER-RESERVED-CONNECTIONS" target="_blank" rel="noopener">superuser_reserved_connections</a> によって確保されており、これは通常ユーザの接続には使用できません。したがって、Pgpool-II からの接続数は、この予約分を除いた枠内に収まるように調整する必要があります。</p>
<p>また、Pgpool-II はクエリキャンセルを行う際に、既存の接続とは別に新たな接続を PostgreSQL に確立するため、この追加分も接続数として考慮する必要があります。</p>
<p>さらに、Pgpool-II の Watchdog 機能を利用している場合、リーダー切り替えのタイミングで旧リーダーの接続が残ったまま、新しいリーダーが接続を開始するケースもあります。このような状況では一時的に接続数が増加し、PostgreSQL 側の制限を超えてしまうリスクがあります。</p>
<p>これらを踏まえると、Pgpool-II の接続数が PostgreSQL の接続数上限に収まるように、以下の条件を満たすように設計する必要があります。</p>
<ul>
<li>クエリキャンセルを考慮しない場合</li>
</ul>
<pre>max_pool × num_init_children × 2 ≤ max_connections − superuser_reserved_connections</pre>
<ul>
<li>クエリキャンセルを考慮する場合</li>
</ul>
<pre>max_pool × num_init_children × 2 × 2 ≤ max_connections − superuser_reserved_connections</pre>
<h2>終わりに</h2>
<p>今回は Pgpool-II の<a href="https://www.pgpool.net/docs/latest/ja/html/runtime-config-connection-pooling.html" target="_blank" rel="noopener">コネクションプーリング</a>機能について紹介しました。この機能を活用することで、PostgreSQL の接続効率を高め、リソースの最適化が期待できます。Pgpool-II を導入する際は、ぜひコネクションプーリング機能の活用をご検討ください。</p>
<p><div>
<a href="https://www.sraoss.co.jp/prod_serv/support/pgsql-mainte/?utm_source=sraoss-techblog&utm_medium=referral&utm_campaign=under-article-pgsql" rel="noopener" style="color:initial;" target="_blank" class="no-ext"></p>
<div style="background-color:#DAEFF6; padding:20px; border-radius:8px; text-align:center;">
SRA OSSでは、PostgreSQL/Pgpool-II のサポートを提供しております。<br />
詳しくは<strong style="color:#2581c4;">弊社ホームページ</strong>をご覧ください。
</div>
<p></a>
</div>
</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Pgpool-II 4.6 の紹介</title>
		<link>https://www.sraoss.co.jp/tech-blog/pgpool/pgpool-4-6/</link>
		
		<dc:creator><![CDATA[越野 太基 (Taiki Koshino)]]></dc:creator>
		<pubDate>Mon, 23 Jun 2025 05:00:22 +0000</pubDate>
				<category><![CDATA[Pgpool-II]]></category>
		<category><![CDATA[OSS]]></category>
		<category><![CDATA[Pgpoo-ll 4.6]]></category>
		<guid isPermaLink="false">https://www.sraoss.co.jp/tech-blog/?p=17518</guid>

					<description><![CDATA[2025 年 2 月 28 日、Pgpool-II の新しいメジャーバージョン 4.6 がリリースされました。 Pgpool-II 4.6 では、ロギングコレクター、クエリキャッシュの機能強化がされました。また、バックエ ...]]></description>
										<content:encoded><![CDATA[<p>2025 年 2 月 28 日、Pgpool-II の新しいメジャーバージョン 4.6 がリリースされました。</p>
<p>Pgpool-II 4.6 では、ロギングコレクター、クエリキャッシュの機能強化がされました。また、バックエンドからのメッセージのログ機能の搭載、PostgreSQL 17 への対応、Watchdog の IPv6 への対応も行われました。</p>
<p>Pgpool-II 4.6 の新機能及び変更点は Pgpool-II 公式ドキュメントの以下のページに記載されています。</p>
<p><a href="https://www.pgpool.net/docs/46/ja/html/release-4-6-0.html" target="_blank" rel="noopener">Pgpool-II 4.6 リリースノート</a></p>
<p>本記事では、これらの新機能について詳しく紹介します。</p>
<p><span id="more-17518"></span></p>
<h3>ログのローテーションを指示する新しい PCP コマンド</h3>
<p>Pgpool-II には、PostgreSQL のロギングコレクター(logging_collector) と同様のログ収集機能が備わっています。</p>
<p>ロギングコレクターを使ってログを収集する場合、これまではロギングコレクターにシグナルを送ることでしかログのローテーションを行えませんでしたが、pcp_log_rotate コマンドを使用することで Pgpool-II のログファイルを簡単にローテーションできるようになりました。</p>
<p>動作確認のための設定例は以下の通りです。</p>
<pre><code>(pgpool.conf 設定例)
log_destination = 'stderr' 
logging_collector = on 
log_directory = '/var/log/pgpool_log' 
log_filename = 'pgpool-%Y-%m-%d_%H%M%S.log'</code></pre>
<p><code>log_directory</code> で指定したディレクトリを確認すると、現時点でのログが出力されていることが確認できます。</p>
<pre><code>[root@server1 ~]# ls -l /var/log/pgpool_log/
合計 4
-rw-------. 1 postgres postgres 193 6月 9 16:21 pgpool-2025-06-09_162145.log</code></pre>
<p>その後、 <code>pcp_log_rotate</code> を実行することで新しいログファイルへとローテートされていることが確認できます。</p>
<pre><code>[root@server1 ~]# pcp_log_rotate -h 192.168.100.50  -p 9898 -U pgpool -W
Password:
pcp_log_rotate -- Command Successful

[root@server1 ~]# ls -l /var/log/pgpool_log/
合計 8
-rw-------. 1 postgres postgres 284 6月 9 16:21 pgpool-2025-06-09_162145.log
-rw-------. 1 postgres postgres 193 6月 9 16:21 pgpool-2025-06-09_162159.log</code></pre>
<p>また <code>-s scope</code> オプションによってコマンドの与える影響範囲を指定することができます。サポートされているコマンドスコープは以下です。(デフォルトは <code>local</code>)</p>
<ul>
<li><code>c, cluster</code> : クラスタを構成するすべての Pgpool-II のログファイルをローテーションします。</li>
<li><code>l, local</code> : ローカル Pgpool-II のログファイルをローテーションします。</li>
</ul>
<h3>リロードによる logging_collector 関連のパラメータの変更</h3>
<p><a href="https://www.pgpool.net/docs/46/ja/html/runtime-config-logging.html#GUC-LOGGING-COLLECTOR" target="_blank" rel="noopener">logging_collector</a> 関連の以下の設定パラメータの変更が、Pgpool-II のリロードで反映されるようになりました。これにより <code>logging_collector</code> の設定の反映のために Pgpool-II の再起動の必要がなくなりました。</p>
<ul>
<li><code>log_truncate_on_rotation</code></li>
<li><code>log_directory</code></li>
<li><code>log_filename</code></li>
<li><code>log_rotation_age</code></li>
<li><code>log_rotation_size</code></li>
<li><code>log_file_mode</code></li>
</ul>
<p>リロードで設定が反映されるかの動作確認として <code>log_filename</code> の値を変更したうえで <code>pcp_log_rotate</code> コマンドを実行してログファイルの名前が変更されて出力されるかを確認します。</p>
<p>まず、pgpool.conf を以下の設定に変更し、 Pgpool-II をリロードします。</p>
<pre><code>[root@server1 ~]# vi /etc/pgpool-II/pgpool.conf
#log_filename = 'pgpool-%Y-%m-%d_%H%M%S.log'
log_filename = 'pgpool-%a.log'

[root@server1 ~]# systemctl reload pgpool.service</code></pre>
<p>その後 <code>pcp_rotate_log</code> コマンドを実行すると出力されるログファイルの名前が変更されていることが確認できます。</p>
<pre><code>[root@server1 ~]# ls -l /var/log/pgpool_log/
合計 8
-rw-------. 1 postgres postgres 284  6月 12 09:51 pgpool-2025-06-12_095140.log
-rw-------. 1 postgres postgres 193  6月 12 09:51 pgpool-2025-06-12_095142.log

[root@server1 ~]# pcp_log_rotate -U pgpool -W -h 192.168.100.50
Password:
pcp_log_rotate -- Command Successful
[root@server1 ~]# ls -l /var/log/pgpool_log/
合計 12
-rw-------. 1 postgres postgres 284  6月 12 09:51 pgpool-2025-06-12_095140.log
-rw-------. 1 postgres postgres 411  6月 12 09:52 pgpool-2025-06-12_095142.log
-rw-------. 1 postgres postgres 361  6月 12 09:52 pgpool-Thu.log</code></pre>
<h3>クエリキャッシュの強制的な作成</h3>
<p><a href="https://www.pgpool.net/docs/latest/ja/html/runtime-in-memory-query-cache.html" target="_blank" rel="noopener">クエリキャッシュ</a>は <code>SELECT</code> クエリの実行結果を共有メモリに保存し、同じクエリ(パラメータ、データベース、ユーザ含む)が実行されたら、結果を再利用する機能です。PostgreSQL にアクセスせず、ディスクアクセスもないので極めて高速に問い合わせ結果を返すことができます。</p>
<p>Pgpool-II では、クエリキャッシュは通常自動的に作成されますが、安全性の観点から、immutable でない関数を含むクエリ (たとえば <code>SELECT now();</code>) はキャッシュされない仕様になっています。</p>
<p>以下の実行例では、クエリを実行するたびに結果が変化していることがわかります。</p>
<pre><code>postgres=&gt; SELECT now();
now
-------------------------------
2025-06-12 17:10:27.241885+09
(1 行)

postgres=&gt; SELECT now();
now
-------------------------------
2025-06-12 17:10:29.156295+09
(1 行)</code></pre>
<p>また、ログからも毎回 PostgreSQL にアクセスしていることが確認できます。</p>
<pre><code>2025-06-12 17:10:27.241: psql pid 2628: LOG: DB node id: 1 backend pid: 2644 statement: SELECT now();
2025-06-12 17:10:29.155: psql pid 2628: LOG: DB node id: 1 backend pid: 2644 statement: SELECT now();</code></pre>
<p>それでも、内容を理解したうえでキャッシュを行いたいユースケースが存在することから、今回のリリースではクエリキャッシュを強制的に作成する機能が追加されました。クエリの先頭に <code>/*FORCE QUERY CACHE*/</code> を付けて実行することで、クエリキャッシュを強制的に作成できるようになります。</p>
<p>以下のようにクエリを実行することで、キャッシュされた時点のタイムスタンプが返されていることが確認できます。このキャッシュは Pgpool-II を再起動するまで保持されます。</p>
<pre><code>postgres=&gt; /*FORCE QUERY CACHE*/SELECT now();
now
------------------------------
2025-06-12 17:14:47.297804+09
(1 行)

postgres=&gt; /*FORCE QUERY CACHE*/SELECT now();
now
------------------------------
2025-06-12 17:14:47.297804+09
(1 行)</code></pre>
<p>さらに、ログにもキャッシュが利用されていることが記録されています。</p>
<pre><code>2025-06-12 17:14:47.297: psql pid 2621: LOG: DB node id: 0 backend pid: 2901 statement: /*FORCE QUERY CACHE*/SELECT now(); 
2025-06-12 17:14:50.138: psql pid 2621: LOG: fetch from memory cache 
2025-06-12 17:14:50.138: psql pid 2621: DETAIL: query result fetched from cache. statement: /*FORCE QUERY CACHE*/SELECT now();</code></pre>
<p>また <code>/*NO QUERY CACHE*/</code> を冒頭に付記して宣言しても、 宣言したクエリキャッシュを削除することは出来ません。 <code>/*NO QUERY CACHE*/</code> はキャッシュエントリが作成されないようにするだけなためです。</p>
<p>Pgpool-II を再起動することなく作成したクエリを削除する場合は、後述する <code>PGPOOL SET CACHE DELETE</code> コマンドか、<code>pcp_invalidate_query_cache</code> コマンドを使用する必要があります。</p>
<h3>新しい PGPOOL SET CACHE DELETE コマンド</h3>
<p class="SYNOPSIS">登録されているクエリキャッシュを削除する <a href="https://www.pgpool.net/docs/46/ja/html/sql-pgpool-set-cache.html" target="_blank" rel="noopener"><code>PGPOOL SET CACHE DELETE</code></a> コマンドが追加されました。引数としてクエリの文字列を渡すことによってクエリキャッシュを指定して削除することができます。</p>
<pre><code>postgres=&gt; /*FORCE QUERY CACHE*/SELECT now();
              now
-------------------------------
 2025-06-12 09:58:49.983346+09
(1 行)

postgres=&gt; PGPOOL SET CACHE DELETE '/*FORCE QUERY CACHE*/SELECT now();';
NOTICE:  query cache deleted. query: "/*FORCE QUERY CACHE*/SELECT now();"
SET
postgres=&gt; /*FORCE QUERY CACHE*/SELECT now();
              now
-------------------------------
 2025-06-12 09:59:32.998492+09
(1 行)</code></pre>
<p>引数に記述するクエリキャッシュはクエリ文字列は、末尾の<tt>「;」</tt>も含めて以前のクエリと完全に一致していなければならず、一致しない場合は以下エラーとなります。</p>
<pre><code>postgres=&gt; PGPOOL SET CACHE DELETE '/*FORCE QUERY CACHE*/SELECT now()'; -- 末尾の ';' が不足
NOTICE: query cache does not exist for query: "/*FORCE QUERY CACHE*/SELECT now()" -- クエリキャッシュが存在しないエラーとなる
SET</code></pre>
<h3>クエリキャッシュを削除する新しい PCP コマンド</h3>
<p>すべてのクエリキャッシュを削除する PCP コマンド、<a href="https://www.pgpool.net/docs/46/ja/html/pcp-invalidate-query-cache.html" target="_blank" rel="noopener"><code>pcp_invalidate_query_cache</code></a> が追加されました。</p>
<p>今までは、クエリキャッシュの削除は Pgpool-II の再起動が必要でしたが、このコマンドを実行することによって Pgpool-II を再起動することなくクエリキャッシュを削除することができます。</p>
<p>「<code>/*FORCE QUERY CACHE*/</code>」で 「<code>SELECT now();</code>」 クエリをキャッシュします。</p>
<pre><code>postgres=&gt; /*FORCE QUERY CACHE*/SELECT now();
now
-------------------------------
2025-06-09 13:50:37.066191+09
(1 行)</code></pre>
<p>その後、<tt> </tt><tt class="COMMAND"> <code>pcp_invalidate_query_cache</code> を実行すると、</tt>クエリキャッシュを削除することができます。</p>
<pre><code>[postgres@server1 ~]$ pcp_invalidate_query_cache -h 192.168.100.50 -p 9898 -U pgpool -W
Password:
pcp_invalidate_query_cache -- Command Successful

postgres=&gt; /*FORCE QUERY CACHE*/SELECT now(); -- クエリキャッシュが削除されているため再作成となる
now
-------------------------------
2025-06-09 13:50:56.561619+09
(1 行)</code></pre>
<h3>新しい設定パラメータ log_backend_messages</h3>
<p>バックエンドからのメッセージログを出力する <a href="https://www.pgpool.net/docs/46/ja/html/runtime-config-logging.html#GUC-LOG-BACKEND-MESSAGES" target="_blank" rel="noopener"><code>log_backend_messages</code></a> パラメータが追加されました。<code>terse</code> または <code>verbose</code> に設定されている場合、バックエンドからのメッセージをログ出力します。</p>
<p>以下が受け取るメッセージ例です。</p>
<pre class="PROGRAMLISTING"><code>2025-06-09 14:00:57.494: psql pid 7579: LOG: last ParameterStatus message from backend 0 repeated 13 times</code></pre>
<p><tt class="LITERAL"><code>terse</code> </tt>では、同じ種類のメッセージが同じバックエンドから送られてくると、その回数を記録し、次に異なる種類のメッセージが送られてきた時に繰り返し回数を報告します。そのため、繰り返している最中にセッションに対応するプロセスが強制終了すると、その分のログが出力されません。この場合でもすべてのログを出力するには、 <tt class="LITERAL"><code>verbose</code></tt> オプションを使用します。<br />
<code></code></p>
<p><code>verbose</code> に設定したときのログ出力例は以下です。同一内容のメッセージであっても送られてくるたびに出力するためプロセスの強制終了によるログの損失は避けられますが、大量のメッセージがバックエンドから送られてくる場合は注意が必要です。</p>
<pre><code>2025-06-09 13:58:16.390: child pid 7263: LOG: ParameterStatus message from backend 0
2025-06-09 13:58:16.390: child pid 7263: LOG: ParameterStatus message from backend 0
2025-06-09 13:58:16.390: child pid 7263: LOG: ParameterStatus message from backend 0</code></pre>
<h3>PostgreSQL 17 の SQL パーサの導入</h3>
<p>Pgpool-II ではメジャーリリースするたびに、PostgreSQL の最新パーサを移植しています。今回のリリースでは PostgreSQL 17 の新しいパーサを取り込みました。</p>
<p>Pgpool-II の負荷分散機能では、SQL を解析して参照か更新かを判別し、どのノードに振り分けるかを決めています。そのため、PostgreSQL の新バージョンでの SQL の変更に対応するには、SQL パーサを移植する必要があります。</p>
<p>PostgreSQL 17 での SQL のおもな変更点は以下のとおりです。</p>
<ul>
<li><code>MERGE</code> への <code>NOT MATCHED BY SOURCE</code> と <code>RETURNING</code> 句の追加</li>
<li><code>COPY</code> オプションの <code>ON_ERROR ignore</code> と <code>LOG_VERBOSITY</code> の追加</li>
<li><code>COPY FROM</code> オプションの <code>FORCE_NOT_NULLとFORCE_NULL</code> で「*」 を使用した全列を指定できる機能の追加</li>
<li><code>EXPLAIN</code> への <code>SERIALIZE</code> と <code>MEMORY</code> オプションの追加</li>
<li><code>ALTER TABLE</code> で <code>SET STATISTICS DEFAULT</code> を用いて、デフォルトの統計上情報ターゲットとする列の指定できる機能の追加</li>
<li><code>ALTER TABLE</code> での列の生成式を変更する機能の追加</li>
<li><code>ALTER TABLE</code> で <code>.. SET ACCESS METHOD</code> のデフォルトを指定できる機能の追加</li>
<li>イベントトリガでログインイベントと <code>REINDEX</code>  を扱う機能の追加</li>
</ul>
<p>Pgpool-II 4.6 では上記の変更点に対応しています。</p>
<h3>Watchdog の hostname と heartbeat_hostname パラメータの IPv6 対応</h3>
<p>これまで、IPv6 に対応していたパラメータは以下の通りです。</p>
<ul>
<li><code>backend_hostnameX</code></li>
<li><code>listen_addresses</code></li>
<li><code> pcp_listen_addresses</code></li>
</ul>
<p>一方で、以下の Watchdog 関連パラメータはこれまで IPv6 に対応していませんでした。</p>
<ul>
<li><code><code>hostname</code></code></li>
<li><code><code>heartbeat_hostname</code></code></li>
</ul>
<p>今回のリリースにより、<code>hostname</code> と <code>heartbeat_hostname</code> も IPv6 に対応し、すべてのネットワーク関連パラメータで IPv6 アドレスを利用できるようになりました。</p>
<h2>おわりに</h2>
<p>今回は、Pgpool-II 4.6 の新機能について紹介しました。</p>
<p>Pgpool-II 4.6 では、より実用的で便利な機能が数多く追加・改善されています。PostgreSQL の高可用性構成や負荷分散の実現を検討されている方にとって、Pgpool-II は有力な選択肢です。ぜひこの機会に Pgpool-II の導入をご検討ください。</p>
<p><div>
<a href="https://www.sraoss.co.jp/prod_serv/support/pgsql-mainte/?utm_source=sraoss-techblog&utm_medium=referral&utm_campaign=under-article-pgsql" rel="noopener" style="color:initial;" target="_blank" class="no-ext"></p>
<div style="background-color:#DAEFF6; padding:20px; border-radius:8px; text-align:center;">
SRA OSSでは、PostgreSQL/Pgpool-II のサポートを提供しております。<br />
詳しくは<strong style="color:#2581c4;">弊社ホームページ</strong>をご覧ください。
</div>
<p></a>
</div>
</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Pgpool-II 4.1 新機能: Watchdogの機能強化【第9回】</title>
		<link>https://www.sraoss.co.jp/tech-blog/pgpool/pgpool-4-1-newfeature-9/</link>
		
		<dc:creator><![CDATA[石井 達夫 (Tatsuo Ishii)]]></dc:creator>
		<pubDate>Thu, 20 Feb 2020 02:30:17 +0000</pubDate>
				<category><![CDATA[Pgpool-II]]></category>
		<category><![CDATA[OSS]]></category>
		<guid isPermaLink="false">https://www.sraoss.co.jp/tech-blog/?p=5675</guid>

					<description><![CDATA[この記事はPgpool-II 4.1の紹介【第1回】の中のWatchdogの機能強化について詳しく紹介します。今回でPgpool-II 4.1の紹介は最後になります。 Watchdogとは 具体的にPgpool-II 4 ...]]></description>
										<content:encoded><![CDATA[<p>この記事は<a href="https://www.sraoss.co.jp/tech-blog/pgpool/pgpool-4-1-newfeature-1/">Pgpool-II 4.1の紹介【第1回】</a>の中のWatchdogの機能強化について詳しく紹介します。今回でPgpool-II 4.1の紹介は最後になります。</p>
<p><span id="more-5675"></span></p>
<h2>Watchdogとは</h2>
<p>具体的にPgpool-II 4.1のwatchdogの機能強化について説明する前に、watchdogとは何かについておさらいしておきましょう。Watchdogは、Pgpool-IIのオプション機能の一つで、Pgpool-II自体の可用性を高めるものです。Pgpool-IIでは、以下の図のようにすべてのクライアントからのアクセスがPgpool-IIを経由してPostgreSQLに送られるので、もしもPgpool-IIがダウンしてしまうと、データベースがまったく使えなくなってしまいます。</p>
<p><img loading="lazy" decoding="async" class="size-medium wp-image-5677 aligncenter" src="https://www.sraoss.co.jp/tech-blog/wp-content/uploads/2020/02/pgpool-II-4-1-watchdog-193x300.png" alt="" width="193" height="300" srcset="https://www.sraoss.co.jp/tech-blog/wp-content/uploads/2020/02/pgpool-II-4-1-watchdog-193x300.png 193w, https://www.sraoss.co.jp/tech-blog/wp-content/uploads/2020/02/pgpool-II-4-1-watchdog-138x214.png 138w, https://www.sraoss.co.jp/tech-blog/wp-content/uploads/2020/02/pgpool-II-4-1-watchdog-167x260.png 167w, https://www.sraoss.co.jp/tech-blog/wp-content/uploads/2020/02/pgpool-II-4-1-watchdog.png 361w" sizes="auto, (max-width: 193px) 100vw, 193px" /></p>
<p>そこでPgpool-IIを複数台用意し、万が一Pgpool-IIがダウンしてしまった時にもう1台のPgpool-IIに切り替えて処理を続行するのがwatchdogの役割です。</p>
<p><img loading="lazy" decoding="async" class="size-medium wp-image-5678 aligncenter" src="https://www.sraoss.co.jp/tech-blog/wp-content/uploads/2020/02/pgpool-II-4-1-watchdog-2-217x300.png" alt="" width="217" height="300" srcset="https://www.sraoss.co.jp/tech-blog/wp-content/uploads/2020/02/pgpool-II-4-1-watchdog-2-217x300.png 217w, https://www.sraoss.co.jp/tech-blog/wp-content/uploads/2020/02/pgpool-II-4-1-watchdog-2-155x214.png 155w, https://www.sraoss.co.jp/tech-blog/wp-content/uploads/2020/02/pgpool-II-4-1-watchdog-2-188x260.png 188w, https://www.sraoss.co.jp/tech-blog/wp-content/uploads/2020/02/pgpool-II-4-1-watchdog-2.png 406w" sizes="auto, (max-width: 217px) 100vw, 217px" /></p>
<p>Pgpool-IIが切り替わっても、クライアントは引き続き同じVIP (Virtual IP)でPgpool-IIに接続することにより、Pgpool-IIが切り替わったことを意識せずにデータベースシステム全体の利用を継続することができます。この図ではPgpool-IIは2つですが、実際にはいくつでもPgpool-IIをもっと設置することも可能で、Pgpool-IIは3台以上の奇数台数を設置することが推奨されています。この理由については後で説明します。</p>
<p>なお、wathdog機能は実際にはPgpool-IIから起動される別プロセスで実装されていますが、概念的にはPgpool-II = watchdogと考えて差し支えありません。そこで、以下の説明ではPgpool-IIの代わりにwatchdogという用語を用います。</p>
<h2>Watchdogの改善点その1 &#8211; マスタwatchdogノードの自動辞退</h2>
<p>上の図で、VIPを持つwatchdogとVIPを持たないwatchdogの2つが出てきました。VIPを持つwatchdogは「マスタwatchodg」と呼ばれ、watchdogがいくつあっても、クラスタ内には1台のみ存在するのが原則です。マスタwatchdogはクラスタシステム起動時にパラメータ「wd_priority」パラメータが大きいwatchdogがその役割を担います。マスタ以外のwatchdogは「スタンバイ」と呼ばれます。</p>
<p>さて、昨今ではPostgreSQLはストリーミングレプリケーションで構成するのが一般的です。これにより、可用性や参照負荷分散などのメリットをユーザは享受できます。以下はPgpool-IIコミュニティによって推奨される本格的なクラスタシステムで、Pgpool-IIが3台、PostgreSQLが2台で構成されています。</p>
<p>（具体的なセットアップ方法は<a href="https://www.pgpool.net/docs/latest/ja/html/example-cluster.html">マニュアル</a>に詳しく記載されています）</p>
<p><img loading="lazy" decoding="async" class="alignnone size-medium wp-image-5681 aligncenter" src="https://www.sraoss.co.jp/tech-blog/wp-content/uploads/2020/02/pgpool-II-4-1-watchdog-3-300x298.png" alt="" width="300" height="298" srcset="https://www.sraoss.co.jp/tech-blog/wp-content/uploads/2020/02/pgpool-II-4-1-watchdog-3-300x298.png 300w, https://www.sraoss.co.jp/tech-blog/wp-content/uploads/2020/02/pgpool-II-4-1-watchdog-3-150x150.png 150w, https://www.sraoss.co.jp/tech-blog/wp-content/uploads/2020/02/pgpool-II-4-1-watchdog-3-215x214.png 215w, https://www.sraoss.co.jp/tech-blog/wp-content/uploads/2020/02/pgpool-II-4-1-watchdog-3-261x260.png 261w, https://www.sraoss.co.jp/tech-blog/wp-content/uploads/2020/02/pgpool-II-4-1-watchdog-3.png 564w" sizes="auto, (max-width: 300px) 100vw, 300px" /></p>
<p>この図の中で点線が各Pgpool-IIからPostgreSQLに出ていますが、これは「ヘルスチェック」という、Pgpool-IIがPostgreSQLデータベースの健全性をチェックする機能を表しています。これにより、たとえばプライマリPostgreSQLがダウンしても、スタンバイPostgreSQLを自動昇格させてデータベースシステムとしての運用を継続することができます。</p>
<h3>Pgpool-II同士で意見が合わない？</h3>
<p>PostgreSQLの健全性の確認は、ネットワークを通じてPgpool-IIがPostgreSQLに接続することにより行われます。ネットワークが正常ならば、どのPgpool-IIから見てもPostgreSQLが正常かどうかの見解は変わらないはずです。しかし、今マスタPgpool-IIとプライマリPostgreSQLの間のネットワーク<strong>だけ</strong>に故障が発生したらどうでしょう？この場合、マスタPgpool-IIはプライマリPostgreSQLを故障と判断、スタンバイPgpool-IIは健全と判断し、意見が別れてしまいます。そこでwatchdogはお互いに意見を交換して多数決で判断を下し、マスタPgpool-IIの「故障」判断は却下されます。（Pgpool-IIが偶数だと多数決が下せないので、困ったことになります。これが奇数台のPgpool-IIを設置することが推奨される理由です)</p>
<p>判断が却下されたプライマリPgpool-IIはプライマリPostgreSQLを「隔離(quarantine)」状態にします。隔離状態にあるPostgreSQLにはPgpool-IIは問い合わせを送信せず、スタンバイPostgreSQLに問い合わせを送ることになります。しかし相変わらずVIPはそのマスタPgpool-IIにアサインされており、クライアントからの更新問い合わせもスタンバイに送られます。スタンバイのPostgreSQLでは更新処理が実行できないので、そうした問い合わせはすべてエラーになってしまします。</p>
<h3>watchdogマスタが自主降格して問題を回避</h3>
<p>そこでPgpool-II 4.1では、こうした場合にマスタwatchdogは自主的に自分を降格して他のPgpool-IIにマスタの役割を移譲するようになりました。もちろんVIPも新しいPgpool-IIにアサインされるので、引き続き更新処理も正常に実行することができます。</p>
<h3>多数決原則はPgpool-IIダウン時にも適用</h3>
<p>ちなみに、Pgpool-IIが多数決でものごとを決める仕組みは、Pgpool-II自体のダウン時にも適用されます。Pgpool-IIはお互いに通信しながら互いの生死を確認しており、たとえば以下の図のように、Pgpool-IIの1,2はお互いに通信できるが、3は他のPgpool-IIと通信できない状態になっても、Pgpool-II 3は過半数の投票を得られないため、勝手にPgpool-II 3がマスタに昇格してしまうことを防ぐことができます。これはいわゆる「スプリットブレイン」状態の防止につながります。</p>
<p><img loading="lazy" decoding="async" class="size-medium wp-image-5683 aligncenter" src="https://www.sraoss.co.jp/tech-blog/wp-content/uploads/2020/02/pgpool-II-4-1-watchdog-4-300x183.png" alt="" width="300" height="183" srcset="https://www.sraoss.co.jp/tech-blog/wp-content/uploads/2020/02/pgpool-II-4-1-watchdog-4-300x183.png 300w, https://www.sraoss.co.jp/tech-blog/wp-content/uploads/2020/02/pgpool-II-4-1-watchdog-4-304x186.png 304w, https://www.sraoss.co.jp/tech-blog/wp-content/uploads/2020/02/pgpool-II-4-1-watchdog-4-282x172.png 282w, https://www.sraoss.co.jp/tech-blog/wp-content/uploads/2020/02/pgpool-II-4-1-watchdog-4.png 668w" sizes="auto, (max-width: 300px) 100vw, 300px" /></p>
<h2>Watchdogの改善点その2 &#8211; 新しいパラメータ<a href="https://www.pgpool.net/docs/latest/ja/html/runtime-watchdog-config.html#GUC-ENABLE-CONSENSUS-WITH-HALF-VOTES">enable_consensus_with_half_votes</a></h2>
<p>前述のように、Pgpool-IIでは多数決でものごとを決められるように、設置台数を奇数台にすることが推奨されています。しかし世の中にはリソースを節約するために2台でシステムを更正している例も多く、従来はPgpool-II台数が偶数の場合にはその半分、すなわち1台だけの賛成が得られても多数決の合意が得られるとしていました。しかしこれでは、たとえば台数が4台の時に2台の賛成で合意が得られることになり、おかしなことになります。そこでPgpool-II 4.1では、デフォルトで過半数の合意を得るためにPgpool-II台数の過半数の賛成が必要となりました。しかしPgpool-II台数が2台のときには、これだとPgpool-IIが1台ダウンした時に決して過半数が得られなくなってしまうため、救済のために新しいパラメータ<a href="https://www.pgpool.net/docs/latest/ja/html/runtime-watchdog-config.html#CONFIG-WATCHDOG-FAILOVER-BEHAVIOR">enable_consensus_with_half_votes</a>が追加されました。このパラメータがonなら、Pgpool-II台数が2台のときには、1台のPgpool-IIの賛成のみで合意が得られます。ただし、Pgpool-IIが2台構成の時は、お互いの監視ネットワークがダウンした時にお互いに自分だけが生きていると思い込むスプリットブレイン状態になることを防ぐことができない点は変わりません。</p>
<h2>終わりに</h2>
<p>9回に渡ってPgpool-II 4.1の新機能をご紹介しました。Pgpool-IIはバージョンごとに機能が充実しており、適用できる案件が増えてきていると思います。今回のリリースでは、すぐに利用できるインストール方法とともに、各種雛形設定ファイルも配布物に同梱されています。この機会にPgpool-IIを使ったPostgreSQLクラスタシステムの構築にチャレンジしてみてはいかがでしょう。</p>
<p><a href="https://www.sraoss.co.jp/tech-blog/pgpool/pgpool-4-1-newfeature-1/">Pgpool-II 4.1の紹介【第1回】</a><br />
<a href="https://www.sraoss.co.jp/tech-blog/pgpool/pgpool-4-1-newfeature-2/">Pgpool-II 4.1 新機能: ステートメントレベルの負荷分散【第2回】</a><br />
<a href="https://www.sraoss.co.jp/tech-blog/pgpool/pgpool-4-1-newfeature-3/">Pgpool-II 4.1 新機能: reserved_connections【第3回】</a><br />
<a href="https://www.sraoss.co.jp/tech-blog/pgpool/pgpool-4-1-newfeature-4/">Pgpool-II 4.1 新機能:自動フェイルバック 【第4回】</a><br />
<a href="https://www.sraoss.co.jp/tech-blog/pgpool/pgpool-4-1-newfeature-5/">Pgpool-II 4.1 新機能:PostgreSQL 12への対応【第5回】</a><br />
<a href="https://www.sraoss.co.jp/tech-blog/pgpool/pgpool-4-1newfeature-6/">Pgpool-II 4.1 新機能:2拠点に分かれたレプリケーション構成への対応【第6回】</a><br />
<a href="https://www.sraoss.co.jp/tech-blog/pgpool/pgpool-4-1-newfeature-7/">Pgpool-II 4.1 新機能: シェアードリレーションキャッシュ【第7回】</a><br />
<a href="https://www.sraoss.co.jp/tech-blog/pgpool/pgpool-4-1-newfeature-8/">Pgpool-II 4.1 新機能: Pgpool-II によって発行される内部クエリの改善【第8回】</a><br />
<a href="https://www.sraoss.co.jp/tech-blog/pgpool/pgpool-4-1-newfeature-9/">Pgpool-II 4.1 新機能: Watchdogの機能強化【第9回】</a></p>
<p><div>
<a href="https://www.sraoss.co.jp/prod_serv/support/pgsql-mainte/?utm_source=sraoss-techblog&utm_medium=referral&utm_campaign=under-article-pgsql" rel="noopener" style="color:initial;" target="_blank" class="no-ext"></p>
<div style="background-color:#DAEFF6; padding:20px; border-radius:8px; text-align:center;">
SRA OSSでは、PostgreSQL/Pgpool-II のサポートを提供しております。<br />
詳しくは<strong style="color:#2581c4;">弊社ホームページ</strong>をご覧ください。
</div>
<p></a>
</div>
</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Pgpool-II 4.1 新機能: Pgpool-II によって発行される内部クエリの改善【第8回】</title>
		<link>https://www.sraoss.co.jp/tech-blog/pgpool/pgpool-4-1-newfeature-8/</link>
		
		<dc:creator><![CDATA[石井 達夫 (Tatsuo Ishii)]]></dc:creator>
		<pubDate>Thu, 06 Feb 2020 01:30:31 +0000</pubDate>
				<category><![CDATA[Pgpool-II]]></category>
		<category><![CDATA[OSS]]></category>
		<guid isPermaLink="false">https://www.sraoss.co.jp/tech-blog/?p=5472</guid>

					<description><![CDATA[この記事はPgpool-II 4.1の紹介【第1回】の中のPgpool-II によって発行される内部クエリの改善について詳しく紹介します。 バージョン情報を活用した内部クエリの削減 Pgpool-IIは、クライアントから ...]]></description>
										<content:encoded><![CDATA[<p>この記事は<a href="https://www.sraoss.co.jp/tech-blog/pgpool/pgpool-4-1-newfeature-1/">Pgpool-II 4.1の紹介【第1回】</a>の中のPgpool-II によって発行される内部クエリの改善について詳しく紹介します。</p>
<p><span id="more-5472"></span></p>
<h2>バージョン情報を活用した内部クエリの削減</h2>
<p>Pgpool-IIは、クライアントから受信した問い合わせを解析するために必要な様々な情報を入手するためにPostgreSQLに内部的にクエリを発行します。第7回で解説したシェアードリレーションキャッシュは、そうしたクエリ結果のキャッシュの利用を改善するものでした。Pgpool-II 4.1では、それとは別に発行する内部クエリそのものを削減する努力をしています。その一つが、PostgreSQLのバージョン情報を活用した内部クエリの削減です。</p>
<h3>バージョンで異なるPostgreSQLのシステムカタログへの問い合わせ</h3>
<p>Pgpool-IIが発行する内部クエリは、主にPostgreSQLのシステムカタログを問い合わせるものです。たとえば、Pgpool-IIではあるテーブルが一時テーブルかどうか各テーブルごとに問い合わせを行います。一時テーブルを含む問い合わせはストリーミングレプリケーションのスタンバイサーバには送信できないからです。あるテーブルが一時テーブルかどうかの判断方法はPostgreSQLのバージョンで異なり、実は結構厄介です。</p>
<ul>
<li>PostgreSQL 8.4と9.0では、システムカタログpg_classの&#8221;relistemp&#8221;列がtrueなら一時テーブル</li>
<li>それ以外のバージョンではスキーマが&#8221;pg_temp&#8221;なら一時テーブル</li>
</ul>
<p>という具合です。従来は、</p>
<ol>
<li>pg_classにrelistempという列があるかどうか調べる</li>
<li>もしなければシステムカタログpg_namespaceを調べてスキーマがpg_tempであるかどうか調べる</li>
<li>もしrelistempがあればそれがtrueなのかfalseなのか調べる</li>
</ol>
<p>という具合に最大2回の内部クエリ発行が必要でした。</p>
<h3>バージョン情報を活用して内部クエリを削減</h3>
<p>Pgpool-II 4.1では、あらかじめPostgreSQLのバージョンを調べておき、それによってpg_classのrelistempを調べるか、pg_namespaceを調べるかを判断できるので、内部クエリの発行回数を1回にすることができます。</p>
<p>他の内部クエリでも同様の工夫を行うことにより、従来一つのユーザからの問い合わせにつき最大内部クエリが7回ほど発行されていたのが2-3回に減らすことができました。</p>
<h2>より効率的な一時テーブルのチェック</h2>
<p>上の改良により、一時テーブルのチェックはかなり効率的になりましたが、それでも一時テーブルかどうか知るための内部クエリを完全になくすことはできません。そこで導入されたのが<tt class="VARNAME"><a href="https://www.pgpool.net/docs/latest/ja/html/runtime-misc.html#GUC-CHECK-TEMP-TABLE">check_temp_table</a>というパラメータです。このパラメータを"trace"に設定すると、システムカタログに内部クエリを発行せずに、CREATE TEMP TABLE文がこのセッションで投入されたかどうかを追跡することによって一時テーブルかどうかの判定を行います。これにより内部クエリの発行が不要になりますが、注意することもあります。<br />
</tt></p>
<p>一時テーブルの生成がPgpool-IIから見えない場合（たとえば関数やトリガの中で行われる場合）、Pgpool-IIは一時テーブルの生成を認識できません。この場合は、check_temp_tableに&#8221;catalog&#8221;を設定することにより、従来と同じシステムカタログを検索する動作になります。</p>
<h2>終わりに</h2>
<p>今回はPgpool-IIが発行する内部クエリの改善について解説しました。Pgpool-IIの発行する内部クエリの多さが気になる方はPgpool-II 4.1を試してみてはいかがでしょう。</p>
<p><div>
<a href="https://www.sraoss.co.jp/prod_serv/support/pgsql-mainte/?utm_source=sraoss-techblog&utm_medium=referral&utm_campaign=under-article-pgsql" rel="noopener" style="color:initial;" target="_blank" class="no-ext"></p>
<div style="background-color:#DAEFF6; padding:20px; border-radius:8px; text-align:center;">
SRA OSSでは、PostgreSQL/Pgpool-II のサポートを提供しております。<br />
詳しくは<strong style="color:#2581c4;">弊社ホームページ</strong>をご覧ください。
</div>
<p></a>
</div>
</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Pgpool-II 4.1 新機能: シェアードリレーションキャッシュ【第7回】</title>
		<link>https://www.sraoss.co.jp/tech-blog/pgpool/pgpool-4-1-newfeature-7/</link>
		
		<dc:creator><![CDATA[Takuma Hoshiai]]></dc:creator>
		<pubDate>Thu, 30 Jan 2020 04:30:09 +0000</pubDate>
				<category><![CDATA[Pgpool-II]]></category>
		<category><![CDATA[OSS]]></category>
		<guid isPermaLink="false">https://www.sraoss.co.jp/tech-blog/?p=5340</guid>

					<description><![CDATA[この記事はPgpool-II 4.1の紹介【第1回】の中のシェアードリレーションキャッシュ 機能について詳しく紹介します。 リレーションキャッシュ Pgpool-IIではクライアントから送られてきたクエリを解析し、クエリ ...]]></description>
										<content:encoded><![CDATA[<p>この記事は<a href="https://www.sraoss.co.jp/tech-blog/pgpool/pgpool-4-1-newfeature-1/">Pgpool-II 4.1の紹介【第1回】</a>の中の<a href="https://www.pgpool.net/docs/latest/ja/html/runtime-misc.html#GUC-ENABLE-SHARED-RELCACHE">シェアードリレーションキャッシュ</a> 機能について詳しく紹介します。</p>
<p><span id="more-5340"></span></p>
<h2>リレーションキャッシュ</h2>
<p>Pgpool-IIではクライアントから送られてきたクエリを解析し、クエリに含まれているテーブルや関数に関する情報をバックエンドのPostgreSQL上のシステムカタログから取得しています。<br />
これらの取得した情報により柔軟なクエリレベルの負荷分散などの様々な機能が実現しています。<br />
クエリが実行されるたびにシステムカタログを参照しに行くと無視できないオーバヘッドとなるため、各子プロセスでは1度取得した情報はローカルメモリにキャッシュしておきます。これをリレーションキャッシュと呼びます。<br />
ローカルメモリに既に該当のシステムカタログ情報がキャッシュされている場合、それを直接使用することでこのオーバヘッドを軽減しています。</p>
<h2>シェアードリレーションキャッシュ</h2>
<p>Pgpool-IIの起動直後やPostgreSQLのフェイルオーバ処理後、その他各種設定により子プロセスが再起動した直後では子プロセスはローカルキャッシュを持っていません。そのため num_init_children が大きな値に設定されるような接続数が多いシステムの場合、子プロセスの数だけシステムカタログへの問い合わせが同時に発生し、このオーバヘッドが重なり大きくなる場合があります。</p>
<p>このような場合を想定して、Pgpool-II 4.1ではリレーションキャッシュをローカルキャッシュに加えて共有メモリにもキャッシュできる機能が追加されました。この機能は、デフォルトで有効(<a href="https://www.pgpool.net/docs/latest/ja/html/runtime-misc.html#GUC-ENABLE-SHARED-RELCACHE">enable_shared_relcache</a>=on)となります。<br />
リレーションキャッシュはローカルキャッシュに加え、 memqcache_method(デフォルトは&#8217;shmem&#8217;) で指定されているキャッシュストレージに保存されます。<br />
各子プロセスは、自身のローカルキャッシュにシステムカタログの情報が無ければ、キャッシュストレージを確認し、どちらにもなかった場合のみ、PostgreSQLのシステムカタログを参照します。その後、システムカタログから取得した情報は、自身のローカルキャッシュとキャッシュストレージの双方にキャッシュします。<br />
つまり、いずれかの子プロセスが参照したシステムカタログはすべての子プロセスで共有されるため、上記のようなケースでも同じシステムカタログを参照する処理は1度で済むため、オーバヘッドをかなり抑えることができます。</p>
<h4>ベンチマークによるシェアードリレーションキャッシュ機能の効果</h4>
<p>PostgreSQL12とPgpool-II 4.1を用いた簡易なベンチマークテストを行いました。以下のグラフは、 enable_shared_relation_cache=off の場合と比較して enable_shared_relation_cache=on の場合に実行速度が相対的にどの程度向上しているかを表しています。この結果より、シェアードリレーションキャッシュ機能により2倍程度実行速度が向上していることが確認できました。</p>
<pre>(テストコマンド)
pgbench  -C -T 30 -c 30 -n -f script_file
</pre>
<p><img loading="lazy" decoding="async" class="alignnone size-medium wp-image-5464" src="https://www.sraoss.co.jp/tech-blog/wp-content/uploads/2020/01/result_pgbench-300x169.png" alt="" width="600" height="338" srcset="https://www.sraoss.co.jp/tech-blog/wp-content/uploads/2020/01/result_pgbench-300x169.png 300w, https://www.sraoss.co.jp/tech-blog/wp-content/uploads/2020/01/result_pgbench-304x171.png 304w, https://www.sraoss.co.jp/tech-blog/wp-content/uploads/2020/01/result_pgbench-282x159.png 282w, https://www.sraoss.co.jp/tech-blog/wp-content/uploads/2020/01/result_pgbench.png 756w" sizes="auto, (max-width: 600px) 100vw, 600px" /></p>
<h2>まとめ</h2>
<p>今回は、Pgpool-II 4.1で追加されたシェアードリレーションキャッシュ機能について紹介しました。<br />
この機能によりPgpool-II自体のオーバヘッドを軽減し、より快適に使用することができます。<br />
特に num_init_children の設定値が大きい場合や、接続先のテーブル数が多い大規模な環境で効果が見込めるため、このような環境の場合Pgpool-II 4.1の使用を検討していただくと良いかと思います。</p>
<p><div>
<a href="https://www.sraoss.co.jp/prod_serv/support/pgsql-mainte/?utm_source=sraoss-techblog&utm_medium=referral&utm_campaign=under-article-pgsql" rel="noopener" style="color:initial;" target="_blank" class="no-ext"></p>
<div style="background-color:#DAEFF6; padding:20px; border-radius:8px; text-align:center;">
SRA OSSでは、PostgreSQL/Pgpool-II のサポートを提供しております。<br />
詳しくは<strong style="color:#2581c4;">弊社ホームページ</strong>をご覧ください。
</div>
<p></a>
</div>
</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Pgpool-II 4.1 新機能:PostgreSQL 12への対応【第5回】</title>
		<link>https://www.sraoss.co.jp/tech-blog/pgpool/pgpool-4-1-newfeature-5/</link>
		
		<dc:creator><![CDATA[彭 博 (Bo Peng)]]></dc:creator>
		<pubDate>Fri, 27 Dec 2019 02:00:20 +0000</pubDate>
				<category><![CDATA[Pgpool-II]]></category>
		<category><![CDATA[OSS]]></category>
		<guid isPermaLink="false">https://www.sraoss.co.jp/tech-blog/?p=5230</guid>

					<description><![CDATA[この記事は Pgpool-II 4.1 の紹介【第 1 回】の中の PostgreSQL 12 への対応について詳しく紹介します。 PostgreSQL 12 への対応として、おもに最新の SQL パーサの移植とフェイル ...]]></description>
										<content:encoded><![CDATA[<p>この記事は <a href="https://www.sraoss.co.jp/tech-blog/pgpool/pgpool-4-1-newfeature-1/">Pgpool-II 4.1 の紹介【第 1 回】</a>の中の PostgreSQL 12 への対応について詳しく紹介します。</p>
<p>PostgreSQL 12 への対応として、おもに最新の SQL パーサの移植とフェイルオーバやリカバリで使うサンプルスクリプトの修正が行われました。</p>
<p><span id="more-5230"></span></p>
<h2>PostgreSQL 12 SQL パーサの移植</h2>
<p>Pgpool-II の負荷分散機能では、SQL を解析して参照か更新かを判別し、どのノードに振り分けるかを決めています。そのため、PostgreSQL の新バージョンでの SQL の変更に対応するには、SQL パーサを移植する必要があります。</p>
<p>PostgreSQL 12 での SQL のおもな変更点は以下のとおりです。</p>
<ul>
<li>VACUUM コマンドの SKIP_LOCKED、INDEX_CLEANUP、TRUNCATE オプション</li>
<li>COMMIT AND CHAIN と ROLLBACK AND CHAIN コマンド</li>
<li>COPY FROM コマンドの WHERE 句</li>
<li>CREATE OR REPLACE AGGREGATE コマンド</li>
<li>CREATE STATISTICS コマンドの mcv 種別</li>
<li>REINDEX コマンドの CONCURRENTLY オプション</li>
<li>EXPLAIN コマンドの SETTINGS オプション</li>
</ul>
<p>Pgpool-II 4.1 では上記の変更点に対応しています。</p>
<h2>サンプルスクリプトの修正</h2>
<p>PostgreSQL 12 では、ストリーミングレプリケーションでスタンバイとして起動する場合の設定ファイル recovery.conf が廃止されました。パラメータは設定ファイル postgresql.conf で設定するように統合されました。また、スタンバイとして起動するかは recovery.signal ファイルを配置して指定するようになりました。</p>
<p>それに伴って、フェイルオーバやリカバリで使うサンプルスクリプトが修正され、PostgreSQL 12 でも動作するようになりました。サンプルスクリプトは <a href="https://www.pgpool.net/docs/latest/ja/html/">Pgpool-II 4.1 文書</a> の「<a href="https://www.pgpool.net/docs/latest/ja/html/example-cluster.html#EXAMPLE-CLUSTER-PGPOOL-CONFIG-FAILOVER">8.3. Pgpool-II + Watchdog の構築の例</a>」に掲載されています。</p>
<p>また、今回のリリースからサンプルスクリプトが配布物に同梱されるようになりました。RPM パッケージを使ってインストールした場合には、/etc/pgpool-II ディレクトリに配置されます。</p>
<pre>$ ll /etc/pgpool-II/*.sample
-rwxr-xr-x 1 postgres postgres 2756 11月 19 09:06 /etc/pgpool-II/failover.sh.sample
-rwxr-xr-x 1 postgres postgres 6575 11月 19 09:06 /etc/pgpool-II/follow_master.sh.sample
-rwxr-xr-x 1 postgres postgres 1080 11月 19 09:06 /etc/pgpool-II/pgpool_remote_start.sample
-rwxr-xr-x 1 postgres postgres 2830 11月 19 09:06 /etc/pgpool-II/recovery_1st_stage.sample
-rwxr-xr-x 1 postgres postgres 712 11月 19 09:06 /etc/pgpool-II/recovery_2nd_stage.sample</pre>
<p>サンプルスクリプトを使う場合には、ファイル名から .sample を外して適当な場所にコピーし、変数 PGHOME を PostgreSQL のインストール先に合わせて変更してください。</p>
<p>また、<a href="https://www.pgpool.net/docs/latest/ja/html/pgpool-setup.html">pgpool_setup</a> が生成するスクリプトも PostgreSQL 12 に対応しています。</p>
<h2>まとめ</h2>
<p>今回、PostgreSQL 12 への対応として SQL パーサの移植とサンプルスクリプトの修正について説明しました。今回からサンプルスクリプトが同梱されるようになったことで、これまでスクリプトの作成に悩んでいた方も導入しやすくなったと思います。これを機に Pgpool-II の導入をぜひお試しください。</p>
<p><div>
<a href="https://www.sraoss.co.jp/prod_serv/support/pgsql-mainte/?utm_source=sraoss-techblog&utm_medium=referral&utm_campaign=under-article-pgsql" rel="noopener" style="color:initial;" target="_blank" class="no-ext"></p>
<div style="background-color:#DAEFF6; padding:20px; border-radius:8px; text-align:center;">
SRA OSSでは、PostgreSQL/Pgpool-II のサポートを提供しております。<br />
詳しくは<strong style="color:#2581c4;">弊社ホームページ</strong>をご覧ください。
</div>
<p></a>
</div>
</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
