<sect1 id="release-4-6-6">
 <title>Release 4.6.6</title>
 <note>
  <title>Release Date</title>
  <simpara>2026-02-26</simpara>
 </note>

 <sect2>
  <title>Changes</title>
  <itemizedlist>
   <listitem>
    <!--
    2026-01-29 [118f61932]
    -->
    <para>
     Allow parallel <command>make</command>. (Tatsuo Ishii)
    </para>
    <para>
     Previously a parallel <command>make</command> failed with:
     <programlisting>
In file included from parser.c:27:
../../src/include/parser/gramparse.h:33:10: fatal error: gram.h: No such file or directory
33 | #include "gram.h"
     </programlisting>
    </para>
    <para>
     Patch is created by anthonyroussel and reviewed by Tatsuo Ishii.
    </para>
    <para>
     Discussion: <ulink url="https://github.com/pgpool/pgpool2/pull/146">Fix parallel build</ulink>
    </para>
   </listitem>

   <listitem>
    <!--
    2026-01-26 [d638018ce]
    -->
    <para>
     Add detail log about mismatch between <xref linkend="guc-backend-hostname"> and <varname>primary_conninfo</varname> host. (Taiki Koshino)
    </para>
    <para>
     If the <xref linkend="guc-backend-hostname"> set in <filename>pgpool.conf</filename> does not match
     the host setting in <productname>PostgreSQL</productname>'s <varname>primary_conninfo</varname>,
     the following log message will be output.
     <programlisting>
sr_check_worker pid 25099: DETAIL: pgpool.conf backend_hostname: "pgpool0" does not match PostgreSQL primary_conninfo host: "pgpool_logtest"
     </programlisting>
    </para>
   </listitem>
   <listitem>
    <!--
    2025-12-24 [ef33aca38]
    -->
    <para>
     Explicitly stat supported minimum OpenSSL version. (Tatsuo Ishii)
    </para>
    <para>
     That can be done in configure.ac by using
     <programlisting>
AC_DEFINE(OPENSSL_API_COMPAT, [0x10002000L],
          [Define to the OpenSSL API version in use. This avoids deprecation warnings from newer OpenSSL versions.])
     </programlisting>

     The supported minimum version is 1.0.2, which is identical to
     <productname>PostgreSQL</productname> at this point.  (Actually the AC_DEFINE is brought in from
     <productname>PostgreSQL</productname>).  Also this could avoid OpenSSL deprecation warnings if
     your installed OpenSSL is new, like 3.0.
     Moreover, add mention to installation document that required minimum
     version of OpenSSL is 1.0.2.
    </para>
   </listitem>
  </itemizedlist>
 </sect2>

 <sect2>
  <title>Bug fixes</title>
  <itemizedlist>
   <listitem>
    <!--
    2026-01-31 [55ee45801]
    -->
    <para>
     Fix oversight in <function>check_transaction_state_and_abort()</function>. (Tatsuo Ishii)
    </para>
    <para>
     The function does not take the case when frontend is NULL into account.
    </para>
    <para>
     Problem pointed out by Coverity.
    </para>
   </listitem>

   <listitem>
    <!--
    2026-01-22 [c0f2cb883]
    -->
    <para>
     Fix <function>walker()</function> functions to return earlier. (Tatsuo Ishii)
    </para>
    <para>
     Previously <function>walker()</function> functions returned false once it found target
     objects.  But it is possible to short-circuit the traverse and it
     should have been.

     Also import comments from <productname>PostgreSQL</productname> to clarify walker function
     design.
    </para>
    <para>
     Problem reported by liujinyang-highgo and reviewed by Tatsuo Ishii.
    </para>
    <para>
     Discussion: <ulink url="https://github.com/pgpool/pgpool2/issues/143">Improper handling in the function view_walker().</ulink>
    </para>
   </listitem>

   <listitem>
    <!--
    2026-01-09 [7b00d24de]
    -->
    <para>
     Fix memory leak in <literal>scram-sha-256</literal> authentication. (Tatsuo Ishii)
    </para>
    <para>
     Problem pointed out by Coverity.
    </para>
   </listitem>

   <listitem>
    <!--
    2026-01-07 [81e8d3ec6]
    -->
    <para>
     Fix to check the return value of <function>malloc()</function>. (Tatsuo Ishii)
    </para>
    <para>
     <function>create_inet_domain_sockets()</function> forgot to check the return value of
     <function>malloc()</function> while allocating memory for socket fds.
    </para>
   </listitem>

   <listitem>
    <!--
    2026-01-06 [2218b5e56]
    -->
    <para>
     Fix health check process to not start. (Tatsuo Ishii)
    </para>
    <para>
     Previously <function>pgpool_main()</function> did not start a health check process if the
     backend node is down.  This prevented auto_failback from working.
     Pgpool reads status from <varname>pool_status</varname> file when <option>-D</option> option is not
     present.  If the status recorded in the file is "down", pgpool will
     not start health check process for the node.  Since auto_failback is
     invoked from health check process, this means that auto_failback does
     not work for the backend node.

     Fix is, unconditionally start health check process.
    </para>
    <para>
     Problem reported by Meng Feilong and reviewed by Tatsuo Ishii.
    </para>
    <para>
     Discussion: <ulink url="https://github.com/pgpool/pgpool2/issues/140">Nodes in the down state cannot failback </ulink>
    </para>
   </listitem>

   <listitem>
    <!--
    2025-12-24 [9acb78c01]
    -->
    <para>
     Fix duplicate NodeTag enum in nodes.h. (Tatsuo Ishii)
    </para>
    <para>
     Fixed the duplication between NodeTag definitions in nodes.h imported from <productname>PostgreSQL</productname> and Pgpool-II's own definitions.
    </para>
    <para>
     Problem reported and diagnosed by liujinyang-highgo and reviewed by Tastuo Ishii.
    </para>
    <para>
     Discussion: <ulink url="https://github.com/pgpool/pgpool2/issues/138">an issue about NodeTag definition.</ulink>
    </para>
   </listitem>

   <listitem>
    <!--
    2025-12-23 [77096f651]
    -->
    <para>
     Fix resource leak in <function>pcp_connect()</function>. (Tatsuo Ishii)
    </para>
    <para>
     The function did not call <function>freeaddrinfo()</function> in some places.
    </para>
   </listitem>

   <listitem>
    <!--
    2025-12-23 [515d5fe85]
    -->
    <para>
     Fix possible integer overflow. (Tatsuo Ishii)
    </para>
    <para>
     In <function>pool_write_flush()</function> and <function>pool_flus_it()</function> <function>write(2)</function> is used. <function>write(2)</function>
     returns ssize_t and in the code there are some places where the return
     value was assigned to an int variable. As a result it was possible
     that the return value was evaluated to negative value, which led to an
     error.
    </para>
   </listitem>
  </itemizedlist>
 </sect2>
</sect1>

<sect1 id="release-4-6-5">
 <title>Release 4.6.5</title>
 <note>
  <title>Release Date</title>
  <simpara>2025-12-15</simpara>
 </note>

 <sect2>
  <title>Changes</title>
  <itemizedlist>
   <listitem>
    <!--
    2025-12-08 [5bd10177c]
    -->
    <para>
     Use "grep -E" instead of deprecated "egrep" in pgpool_setup. (Bo Peng)
    </para>
    <para>
     Replace "egrep" with "grep -E" to avoid obsolescence warnings on newer GNU grep versions.
    </para>
   </listitem>
  </itemizedlist>
 </sect2>

 <sect2>
  <title>Bug fixes</title>
  <itemizedlist>
   <listitem>
    <!--
    2025-12-08 [8deccc15e]
    -->
    <para>
     Fix buffer overflow error in show pool_status. (Tatsuo Ishii)
    </para>
    <para>
     "show pool_status", "pgpool show" and pcp_pool_status could cause a
     buffer overflow error. If backend_flag is set to "ALWAYS_PRIMARY",
     pool_flag_to_str(), which is responsible to produce printable format
     of backend_flag, wrote data past to the end of static buffer.
    </para>
    <para>
     Problem reported by zam bak and reviewed by Bo Peng.
    </para>
    <para>
     Discussion: <ulink url="https://www.postgresql.org/message-id/20251202.140205.427777414210613577.ishii%40postgresql.org">Re: "buffer overflow detected" when running SHOW POOL_STATUS</ulink>
    </para>
   </listitem>

   <listitem>
    <!--
    2025-12-02 [c8865c703]
    -->
    <para>
     Fix memqcache_stats_start_time shown in "show pool_status". (Tatsuo Ishii)
    </para>
    <para>
     get_config() uses ctime() to generate printable form of
     memqcache_stats_start_time. But it did not take into account that
     ctime() adds newline at the end of result. As a result, not only the
     output of memqcache_stats_start_time was with unnecessary newline but
     next row printed empty items.
    </para>
    <para>
     Discussion: <ulink url="https://www.postgresql.org/message-id/20251130.102712.131456481338876013.ishii%40postgresql.org">Re: "buffer overflow detected" when running SHOW POOL_STATUS</ulink>
    </para>
   </listitem>
  </itemizedlist>
 </sect2>

 <sect2>
  <title>Regression Tests</title>
  <itemizedlist>
   <listitem>
    <!--
    2025-11-25 [0c45a1e01]
    -->
    <para>
     Test: stabilize 037.failover_session. (Tatsuo Ishii)
    </para>
    <para>
     On some platform (in my case Rocky Linux 10 running on VitualBox)
     fails to finish shutdownall after test1.  This could be caused by the
     failover in the test to fail to restore the signal handler which
     should accept shutdown signal from shutdownall. Adding "sleep 5"
     before shutdownall seems to mitigate the problem.
    </para>
   </listitem>
  </itemizedlist>
 </sect2>
</sect1>

<sect1 id="release-4-6-4">
 <title>Release 4.6.4</title>
 <note>
  <title>Release Date</title>
  <simpara>2025-11-25</simpara>
 </note>

 <sect2>
  <title>Changes</title>
  <itemizedlist>
   <listitem>
    <!--
    2025-11-07 [4fabca331]
    -->
    <para>
     Remove unnecessary <varname>application_name</varname> treatment. (Tatsuo Ishii)
    </para>
    <para>
     A previous commit added a step to set <varname>application_name</varname> when reusing existing connections.
     However, this is unnecessary because DISCARD ALL automatically resets <varname>application_name</varname>,
     and <function>send_params()</function> already sends all necessary parameter status messages, including <varname>application_name</varname>, to the frontend.
     Removing this redundant step also improves performance, particularly for backend nodes that are geographically distant.
    </para>
    <para>
     Discussion: <ulink url="https://github.com/pgpool/pgpool2/issues/130">Severely degraded performance of pgPool in geo-distributed configurations</ulink>
    </para>
   </listitem>

   <listitem>
    <!--
    2025-10-09 [f91abf862]
    -->
    <para>
     Make time calculations always long long. (Tatsuo Ishii)
    </para>
    <para>
     Previously, <productname>Pgpool-II</productname> treated time_t as a simple long, which caused compile-time warnings on some systems,
     such as OpenBSD, where time_t is __int64. This change upcasts the calculations to long long,
     preventing truncation and ensuring pgpool continues to work correctly after Y2038 on 64-bit clean time_t systems.
     Additionally, json_get_long_value_for_key has been changed to json_get_llong_value_for_key
     with a long long parameter, aligning it with _json_value's int64 type. This improves
     integer handling on 32-bit platforms and helps avoid potential integer overflow issues.
    </para>
    <para>
     Problem analyzed by Tatsuo Ishii and Gyorgy Sarvari.
    </para>
    <para>
     Discussion: <ulink url="https://www.pgpool.net/pipermail/pgpool-hackers/2025-May/004584.html">Fix time_t warnings on OpenBSD</ulink>
    </para>
    <para>
     Discussion: <ulink url="https://www.postgresql.org/message-id/20251003.211957.2067537305399895611.ishii%40postgresql.org">Fix time_t warnings on OpenBSD</ulink>
    </para>
    <para>
     Discussion: <ulink url="https://github.com/pgpool/pgpool2/issues/128">fix compiling issues for 32-bit targets</ulink>
    </para>
   </listitem>

   <listitem>
    <!--
    2025-08-31 [dced45a52]
    -->
    <para>
     Allow to compile against gcc 15 (C23). (Tatsuo Ishii)
    </para>
    <para>
     This change includes several fixes to compile <productname>Pgpool-II</productname> on Fedora 42 with gcc 15 (C23).
     It updates pool_type.h to use stdbool.h and defines TRUE/FALSE as (bool) 1/0, aligning with C99 standards.
     Function pointer arguments were corrected to match their prototypes,
     and <function>pool_create_relcache()</function>'s prototype was updated.
     Calls to <function>walker()</function> in <function>raw_expression_tree_walker()</function> were adjusted to cast the first argument to (Node *) via the WALK macro.
     Note that OpenSSL warnings on Fedora 42 remain and will be addressed in the future.
    </para>
    <para>
     Discussion: <ulink url="https://github.com/pgpool/pgpool2/issues/124">4.6.X build issue against GCC 15</ulink>
    </para>
   </listitem>
  </itemizedlist>
 </sect2>

 <sect2>
  <title>Bug fixes</title>
  <itemizedlist>
   <listitem>
    <!--
    2025-11-16 [b113027dd]
    -->
    <para>
     Fix segfault with <command>CopyOut</command>. (Tatsuo Ishii)
    </para>
    <para>
     When <command>COPY relname TO STDOUT</command> is executed in the extended query
     protocol mode, pgpool segfaulted.
    </para>
    <para>
     This problem is reported by <ulink url="https://github.com/tetesh">https://github.com/tetesh</ulink>.
    </para>
    <para>
     Discussion: <ulink url="https://github.com/pgpool/pgpool2/issues/133">datanymizer and pg-pool segmentation fault</ulink>
    </para>
   </listitem>
   <listitem>
    <!--
    2025-10-03 [b84553bf0]
    -->
    <para>
     Prevent watchdog split-brain scenario in some corner cases. (Tatsuo Ishii)
    </para>
    <para>
     Watchdog uses both beacon messages and heartbeat for communication.
     If the heartbeat is not yet active, missing beacon messages
     for over 30 seconds can cause a split-brain scenario,
     where the old leader remains active while a new leader is elected.
     This change prevents two leaders from existing simultaneously by revoking the old leader.
     When a node detects that it has missed beacon messages from the leader more than twice,
     the leader is set to LOST and a new leader election is triggered via set_state(WD_JOINING).
    </para>
   </listitem>

   <listitem>
    <!--
    2025-10-03 [ef8ccb9e7]
    -->
    <para>
     Prevent FATAL error when non-existing prepared statement is given. (Tatsuo Ishii)
    </para>
    <para>
     Previously, <function>Bind()</function> raised a FATAL error when a non-existing prepared statement was used, unlike PostgreSQL.
     This change changes <function>Bind()</function> to check for the statement's existence and send an ERROR message to the frontend if it does not exist.
     Note that no log is written, as logging this is not currently possible.
    </para>
   </listitem>

   <listitem>
    <!--
    2025-09-24 [59a359eef]
    -->
    <para>
     Fix <xref linkend="pg-enc"> not working if both -p and -P are provided. (Tatsuo Ishii)
    </para>
    <para>
     The original report showed that running pg_enc -p -P prompted for a password and encryption key,
     but failed if the key was not provided.
    </para>
    <para>
     Discussion: <ulink url="https://www.postgresql.org/message-id/7f18c30b.237.1997555ca11.Coremail.liujy%40highgo.com">pg_enc</ulink>
    </para>
   </listitem>

   <listitem>
    <!--
    2025-09-18 [f20f7041c]
    -->
    <para>
     Fix compiling issue on 32-bit environments. (Tatsuo Ishii)
    </para>
    <para>
     On 32-bit systems, compiling src/parser/snprintf.c fails due to undefined functions <function>isnan()</function> and <function>isinf()</function>, which come from math.h.
     This change includes math.h and also reorders the include files for clarity.
     The file was originally imported from PostgreSQL, where math.h was already included.
     This fix was provided via pull request: https://github.com/pgpool/pgpool2/pull/128
    </para>
    <para>
     Discussion: <ulink url="https://www.postgresql.org/message-id/20250917.194736.353755422175293639.ishii%40postgresql.org">Compiling issues for 32-bit targets</ulink>
    </para>
   </listitem>

   <listitem>
    <!--
    2025-09-10 [0a6868d40]
    -->
    <para>
     Fix safer directory deletion in Bash in recovery_1st_stage.sample. (Taiki Koshino)
    </para>
    <para>
     Quote variables in rm commands to avoid accidental deletion:
     <command>rm -rf "${DEST_NODE_PGDATA}"</command>

     If the variable is empty, rm could delete unexpected files or directories.
    </para>
   </listitem>

   <listitem>
    <!--
    2025-09-05 [1793db95f]
    -->
    <para>
     Fix point less warning in query cache invalidation. (Tatsuo Ishii)
    </para>
    <para>
     When memcached support is disabled, query cache invalidation by query
     emitted point less warning. This makes 006.memcached regression test
     failed.
    </para>
   </listitem>

   <listitem>
    <!--
    2025-09-05 [441f338ab]
    -->
    <para>
     Fix the compilation error when building without the <option>--with-memcached</option> option. (Tatsuo Ishii)
    </para>
    <para>
     A compiler error occurred when configuring without <option>--with-memcached</option>.
     The issue arose because the compiler could not determine that ptr would only be freed when memcached is enabled.
     To fix this, the relevant code block was wrapped with #ifdef USE_MEMCACHED.
    </para>
    <para>
     Problem reported by Bo Peng.
    </para>
   </listitem>
   <listitem>
    <!--
    2025-09-04 [9e0324575]
    -->
    <para>
     Fix query cache lock file handling. (Tatsuo Ishii)
    </para>
    <para>
     The query cache module creates a lock file in <varname>logdir</varname> for concurrency control,
     but two bugs existed: the main pgpool process could create a stray "QUERY_CACHE_LOCK_FILE",
     and the lock file was not removed on shutdown. This change fixes both issues.
    </para>
    <para>
     Problem reported and analyzed by Bo Peng.
    </para>
   </listitem>
  </itemizedlist>
 </sect2>

 <sect2>
  <title>Documents</title>
  <itemizedlist>
   <listitem>
    <!--
    2025-09-17 [1a975b539]
    -->
    <para>
     Update doc about "Setting up PostgreSQL standby" in <ulink url="https://www.pgpool.net/docs/latest/ja/html/example-cluster.html">8.2. Pgpool-II + Watchdog Setup Example</ulink>. (Taiki Koshino)
    </para>
    <para>
     Add a note that when setting up a standby without online recovery, do not write <varname>primary_conninfo</varname> to postgresql.auto.conf.
    </para>
    <para>
     Discussion: <ulink url="https://github.com/pgpool/pgpool2/issues/67">Follow primary command not fixing postgresql.auto.conf</ulink>
    </para>
   </listitem>

   <listitem>
    <!--
    2025-08-22 [5bd535792]
    -->
    <para>
     Fix watchdog_setup manual. (Tatsuo Ishii)
    </para>
    <para>
     It mistakenly stated that heartbeart is not setup in watchdog_setup.
    </para>
   </listitem>
  </itemizedlist>
 </sect2>

 <sect2>
  <title>Regression Tests</title>
  <itemizedlist>
   <listitem>
    <!--
    2025-09-30 [3ddbc64f1]
    -->
    <para>
     Adapt 023.ssl_connection to PostgreSQL 18. (Tatsuo Ishii)
    </para>
    <para>
     PostgreSQL 18 heavily changed psql's \conninfo output format, which
     made the test fail because the test relies on \conninfo. This change
     makes the test script aware the PostgreSQL version to fix the issue.
    </para>
   </listitem>

   <listitem>
    <!--
    2025-08-31 [3897b7afd]
    -->
    <para>
     Unbreak 039.log_backend_messages. (Tatsuo Ishii)
    </para>
    <para>
     Commit 8ff2b9f6e mistakenly put synchronous commit parameters in
     pgpool.conf.  Unbreak the test by putting the parameters in
     postgresql.conf. Also check if clustering mode is streaming
     replication. Because that parameters causes suspends PostgreSQL if
     clustering mode is other than streaming replication.
    </para>
   </listitem>

   <listitem>
    <!--
    2025-08-31 [0f19fc60a]
    -->
    <para>
     Stabilize 039.log_backend_messages test. (Tatsuo Ishii)
    </para>
    <para>
     In the test a query is sent to standby server right after rows are
     inserted into primary server.  Due to a replication lag, the inserted
     rows could not be found on the standby in slower machines.  This
     change tries to fix the issue by using synchronous replication with
     <varname>remote_apply</varname> option.
    </para>
   </listitem>

   <listitem>
    <!--
    2025-08-29 [b4043e6c3]
    -->
    <para>
     Fix ruby script in 010.rewrite_timestamp. (Tatsuo Ishii)
    </para>
    <para>
     The ruby script used "File.exists", which is said to be obsoleted in
     newer version of Ruby.  Replace it with "File.exist".
    </para>
   </listitem>

   <listitem>
    <!--
    2025-08-29 [9c901e60a]
    -->
    <para>
     Tweak timeout in 034 and 075 tests. (Tatsuo Ishii)
    </para>
    <para>
     034.promote_node and 075.detach_primary_left_down_node set the timeout
     60 seconds for finishing follow primary script.  It turns out that
     these timeout values are not long enough, and sometimes caused false
     errors. So make them from 60 seconds to 120 seconds.
    </para>
   </listitem>

   <listitem>
    <!--
    2025-08-27 [42b177614]
    -->
    <para>
     Add ssl_ecdh_curve test to 023.ssl_connection. (Tatsuo Ishii)
    </para>
    <para>
     023.ssl_connection did not cover the test for ssl_ecdh_curve.  This
     commit tests it using bad ssl_ecdh_curve parameter to see if connection
     between frontend and pgpool fails.
    </para>
   </listitem>
  </itemizedlist>
 </sect2>
</sect1>

<sect1 id="release-4-6-3">
 <title>Release 4.6.3</title>
 <note>
  <title>Release Date</title>
  <simpara>2025-08-21</simpara>
 </note>

 <sect2>
  <title>Changes</title>
  <itemizedlist>
   <listitem>
    <!--
    2025-06-13 [ebfd2423c]
    -->
    <para>
     Enhance connecting process to backend. (Tatsuo Ishii)
    </para>
    <para>
     In certain environment (especially k8s), DNS look up is unstable and
     connecting to backend process fails.  This occurs in call to
     <function>getaddrinfo()</function> in <function>connect_inet_domain_socket_by_port()</function>. To enhance the
     situation, retry up to 5 times (at each retry, sleep 1 second) if
     <function>getaddrinfo()</function> fails with EAI_AGAIN. Note that if
     <function>connect_inet_domain_socket_by_port()</function> is called with "retry" argument
     is false, the retry will not happen. Health check calls
     <function>connect_inet_domain_socket_by_port()</function> with the retry flag to false so
     that retrying is controlled health check's own parameters.
    </para>
    <para>
     Discussion: <ulink url="https://github.com/pgpool/pgpool2/issues/104">A single DNS lookup failure will trigger backend failover</ulink>
    </para>
   </listitem>
  </itemizedlist>
 </sect2>

 <sect2>
  <title>Bug fixes</title>
  <itemizedlist>
   <listitem>
    <!--
    2025-07-25 [75d905ff9]
    -->
    <para>
     Fix watchdog to print inappropriate NOTICE message. (Tatsuo Ishii)
    </para>
    <para>
     <function>read_ipc_socket_and_process()</function> printed a notice message every time when
     it wrote commands to IPC socket even if it was successful. Fix this to
     print the notice message only when the write failed.

     The reason why this bug was not recognized is, the message appears
     only when <varname>log_min_messages</varname> is set to notice or higher.
    </para>
    <para>
     Discussion: <ulink url="https://github.com/pgpool/pgpool2/issues/121">pgpool IPC socket connection issue</ulink>
    </para>
   </listitem>

   <listitem>
    <!--
    2025-07-19 [d05de5c73]
    -->
    <!--
    2025-07-19 [ed57af34e]
    -->
    <para>
     Fix resource leak while reading startup packet. (Tatsuo Ishii)
    </para>
    <para>
     Fix resource leak in pool_push_pending_data.
    </para>
   </listitem>

   <listitem>
    <!--
    2025-06-30 [bac455b2f]
    -->
    <para>
     Fix broken scram-sha-256 authentication on big-endian machines. (Tatsuo Ishii)
    </para>
    <para>
     When <literal>scram-sha-256</literal> authentication is performed, a hash function
     <function>pg_sha_256_final</function> is used. It was imported from <productname>PostgreSQL</productname> and it uses
     preprocessor define WORDS_BIGENDIAN to judge host machine's
     endianness. Although WORDS_BIGENDIAN should be defined while
     configure, this part was missed when <function>pg_sha_256_final</function> (and others) was
     imported from <productname>PostgreSQL</productname>. As a result, <literal>scram-sha-256</literal> worked only in
     little endian machines. Fixed the issue by adding
     AC_C_BIGENDIAN macro to configure.ac.
    </para>
    <para>
     Problem reported by Christoph Berg and analyzed by pranavkaruvally.
    </para>
    <para>
     Discussion: <ulink url="https://github.com/pgpool/pgpool2/issues/106">4.6.1 fails on big-endian s390x: backend response with kind 'E' when expecting 'R'</ulink>
    </para>
   </listitem>

   <listitem>
    <!--
    2025-06-23 [2721c7b76]
    -->
    <para>
     Fix source code typos. (Bo Peng)
    </para>
   </listitem>

   <listitem>
    <!--
    2025-06-14 [f88b1c18f]
    -->
    <para>
     Fix heartbeat device treatment. (Tatsuo Ishii)
    </para>
    <para>
     Fix <function>wd_create_hb_recv_socket()</function> and <function>wd_create_hb_send_socket()</function>
     to pass a null-terminated device name string to setsockopt(SO_BINDTODEVICE)
     instead of incorrectly passing a struct ifreq.
    </para>
    <para>
     Discussion: <ulink url="https://www.pgpool.net/pipermail/pgpool-hackers/2025-May/004603.html">[pgpool-hackers: 4602] heartbeat and SO_BINDTODEVICE</ulink>
    </para>
   </listitem>

   <listitem>
    <!--
    2025-06-14 [73bcbd96e]
    -->
    <para>
     Fix resource leak in hearbeat receiver process. (Tatsuo Ishii)
    </para>
   </listitem>

   <listitem>
    <!--
    2025-06-09 [4305c42d6]
    -->
    <para>
     Fix heartbeat device treatment. (Tatsuo Ishii)
    </para>
    <para>
     While processing <filename>pgpool.conf</filename>, <varname>heartbeat_device</varname> was mistakenly treated
     and the first device was ignored.
    </para>
    <para>
     Problem analyzed by Bo Peng.
    </para>
   </listitem>

   <listitem>
    <!--
    2025-06-05 [b249a118c]
    -->
    <para>
     Fix heartbeat receiver not working. (Tatsuo Ishii)
    </para>
    <para>
     IPv6 support for heartbeat was added in version 4.6,
     but the receive process mistakenly bound only to loopback addresses,
     preventing reception from other nodes.
     Adding the AI_PASSIVE flag to <function>getaddrinfo()</function> fixes this by binding to all network interfaces.
    </para>
    <para>
     Problem analyzed by Bo Peng.
    </para>
   </listitem>

   <listitem>
    <!--
    2025-06-02 [06ba7dde4]
    -->
    <para>
     Fix typo in the comments of <filename>pgpool.conf</filename>. (Tatsuo Ishii)
    </para>
   </listitem>
  </itemizedlist>
 </sect2>

 <sect2>
  <title>Documents</title>
  <itemizedlist>
   <listitem>
    <!--
    2025-08-15 [a54f5d1ad]
    -->
    <para>
     Enhance "8.3. Replication Mode and Snapshot Isolation Mode Configuration Example" Document. (Taiki Koshino)
    </para>
    <para>
     Updated the link to the example script and the explanation in the "8.3.3. Before you begin" section.
    </para>
   </listitem>

   <listitem>
    <!--
    2025-08-04 [e2f24fec8]
    -->
    <para>
     Fix documentation for parameters that are not reflected by reload. (Taiki Koshino)
    </para>
    <para>
     "authentication_timeout" and "memqcache_oiddir" is not reflected by reload.
     The documentation is changed to "This parameter can only be set at server start.".
    </para>
   </listitem>

   <listitem>
    <!--
    2025-07-24 [bc5fa5e7e]
    -->
    <!--
    2025-07-23 [1e8963554]
    -->
    <para>
     Unify watchdog leader terms (followup). (Tatsuo Ishii)
    </para>
   </listitem>

   <listitem>
    <!--
    2025-08-06 [31eee18d7]
    -->
    <!--
    2025-07-16 [34b07c2d5]
    -->
    <para>
     Fix example script link. (Taiki Koshino)
    </para>
    <para>
     Modified the sample script in the section "<ulink url="https://www.pgpool.net/docs/46/en/html/example-cluster.html">8.2. Pgpool-II + Watchdog Setup Example</ulink>"
    </para>
   </listitem>

   <listitem>
    <!--
    2025-06-18 [f4ae9f39e]
    2025-06-18 [7a20dc419]
    -->
    <para>
     Fix load balance explanation missed logical replication mode and Slony mode. (Tatsuo Ishii)
    </para>
   </listitem>

   <listitem>
    <!--
    2025-06-18 [9d2e4e692]
    -->
    <para>
     Enhance <xref linkend="pcp-node-info"> document. (Bo Peng)
    </para>
    <para>
     Clarify that each <varname>backend_application_nameX</varname> must match the value specified
     in the <varname>application_name</varname> of <varname>primary_conninfo</varname> to correctly display
     "<varname>replication_state</varname>" and "<varname>replication_sync_state</varname>".
    </para>
   </listitem>

   <listitem>
    <!--
    2025-06-08 [59f9df005]
    -->
    <para>
     Add section of kernel resources. (Tatsuo Ishii)
    </para>
    <para>
     <productname>Pgpool-II</productname> uses System V shared memory and semaphores. It's better to
     describe the requirements in the docs.
    </para>
   </listitem>

   <listitem>
    <!--
    2025-06-07 [40617fd90]
    -->
    <para>
     Add description for <option>--with-ldap</option> option of configure. (Tatsuo Ishii)
    </para>
    <para>
     It was missed when LDAP support was introduced in v4.2
    </para>
   </listitem>

   <listitem>
    <!--
    2025-06-05 [9ee9eb164]
    -->
    <para>
     Fix command in "8.2. <productname>Pgpool-II</productname> + Watchdog Setup Example" to escape $PGDATA. (Bo Peng)
    </para>
   </listitem>

   <listitem>
    <!--
    2025-06-04 [ff60bf930]
    -->
    <para>
     Clarify supported platforms for <productname>Pgpool-II</productname>. (Tatsuo Ishii)
    </para>
   </listitem>

   <listitem>
    <!--
    2025-06-03 [cc4da5979]
    -->
    <para>
     Enhance <xref linkend="guc-child-life-time"> document. (Tatsuo Ishii)
    </para>
   </listitem>
  </itemizedlist>
 </sect2>

 <sect2>
  <title>Regression Tests</title>
  <itemizedlist>
   <listitem>
    <!--
    2025-06-08 [78e45decf]
    -->
    <para>
     Stabilize 029.cert_passphrase regression test. (Tatsuo Ishii)
    </para>
    <para>
     When <varname>ssl_passphrase_command</varname> is not valid, the error message is
     typically "bad decrypt" but it seems sometimes "wrong tag".
    </para>
   </listitem>
  </itemizedlist>
 </sect2>
</sect1>

<sect1 id="release-4-6-2">
 <title>Release 4.6.2</title>
 <note>  <title>Release Date</title>
  <simpara>2025-05-30</simpara>
 </note>

 <sect2>
  <title>Changes</title>
  <itemizedlist>
   <listitem>
    <!--
    2025-05-17 [2c84c4358]
    -->
    <para>
     Suppress unnecessary information upon authentication failure. (Tatsuo Ishii)
    </para>
    <para>
     Previously a message "password size does not match" was displayed when
     client authentication failed. This could help an attacker to guess
     password. Replace it just "password does not match".
    </para>
   </listitem>

   <listitem>
    <!--
    2025-05-15 [f49d239a4]
    -->
    <para>
     Allow pcp clients to connect to IPv6 addresses. (Tatsuo Ishii)
    </para>
    <para>
     We have already allowed pcp server to connect to IPv6 addresses, but
     pcp clients were not allowed to connect to them until today. This
     commit allows pcp clients to connect to IPv6 addresses.

     Discussion: <ulink url="https://www.pgpool.net/pipermail/pgpool-general/2025-May/009484.html">[pgpool-general: 9481] Does pgpool 4.6.0 support pure ipv6 configuration?</ulink>
    </para>
   </listitem>
  </itemizedlist>
 </sect2>

 <sect2>
  <title>Bug fixes</title>
  <itemizedlist>
   <listitem>
    <!--
    2025-05-27 [61223a1e4]
    -->
    <para>
     Fix watchdog receive socket creation without IPv6. (<ulink url="https://github.com/pgpool/pgpool2/issues/99">#99</ulink>) (Tatsuo Ishii)
    </para>
    <para>
     When IPv6 network is not available, it was possible that watchdog
     process won't start. Previously <function>wd_create_recv_socket()</function>
     issued elog(ERROR) if creation or handling IPv6 socket failed.
     Unfortunately at the time when <function>wd_create_recv_socket()</function>
     is called, the exception stack is not established, and elog happily
     converts <literal>ERROR</literal> to <literal>FATAL</literal>,
     which causes exiting watchdog process, thus exiting pgpool process.
     To fix this, the elog(ERROR) calls are changed to elog(LOG).
    </para>
   </listitem>
  </itemizedlist>
 </sect2>
</sect1>

<sect1 id="release-4-6-1">
 <title>Release 4.6.1</title>
 <note>
  <title>Release Date</title>
  <simpara>2025-05-15</simpara>
 </note>

 <sect2>
  <title>Overview</title>
  <para>
   This release contains a security fix.
  </para>
  <para>
   An authentication bypass vulnerability exists in the client authentication
   mechanism of <productname>Pgpool-II</productname>.
   In <productname>Pgpool-II</productname>, authentication may be bypassed even
   when it is supposed to be enforced. As a result, an attacker could log in as
   any user, potentially leading to information disclosure, data tampering, or
   even a complete shutdown of the database. (CVE-2025-46801)
  </para>
  <para>
   This vulnerability affects systems where the authentication configuration
   matches one of the following patterns:
  </para>
  <itemizedlist>
   <listitem>
    <para>
     Pattern 1: This vulnerability occurs when all of the following conditions are met:
    </para>
    <itemizedlist>
     <listitem>
      <para>
       The <literal>password</literal> authentication method is used in
       <filename>pool_hba.conf</filename>
      </para>
     </listitem>
     <listitem>
      <para>
       allow_clear_text_frontend_auth = off
      </para>
     </listitem>
     <listitem>
      <para>
       The user's password is not set in <filename>pool_passwd</filename>
      </para>
     </listitem>
     <listitem>
      <para>
       The <literal>scram-sha-256</literal> or <literal>md5</literal> authentication
       method is used in <filename>pg_hba.conf</filename>
      </para>
     </listitem>
    </itemizedlist>
   </listitem>

   <listitem>
    <para>
     Pattern 2: This vulnerability occurs when all of the following conditions are met:
    </para>
    <itemizedlist>
     <listitem>
      <para>
       enable_pool_hba = off
      </para>
     </listitem>
     <listitem>
      <para>
       One of the following authentication methods is used in pg_hba.conf:
       <literal>password</literal>, <literal>pam</literal>, or <literal>ldap</literal>
      </para>
     </listitem>
    </itemizedlist>
   </listitem>

   <listitem>
    <para>
     Pattern 3: This vulnerability occurs when all of the following conditions are met:
    </para>
    <itemizedlist>
     <listitem>
      <para>
       Raw mode is used (backend_clustering_mode = 'raw')
      </para>
     </listitem>
     <listitem>
      <para>
       The <literal>md5</literal> authentication method is used in
       <filename>pool_hba.conf</filename>
      </para>
     </listitem>
     <listitem>
      <para>
       allow_clear_text_frontend_auth = off
      </para>
     </listitem>
     <listitem>
      <para>
       The user's password is registered in <filename>pool_passwd</filename> in plain
       text or AES format
      </para>
     </listitem>
     <listitem>
      <para>
       One of the following authentication methods is used in
       <filename>pg_hba.conf</filename>:
       <literal>password</literal>, <literal>pam</literal>, or <literal>ldap</literal>
      </para>
     </listitem>
    </itemizedlist>
   </listitem>
  </itemizedlist>
  <para>
   All versions of Pgpool-II 4.0 and 4.1 series, 4.2.0 to 4.2.21, 4.3.0 to 4.3.14,
   4.4.0 to 4.4.11, 4.5.0 to 4.5.6 and 4.6.0 are affected by this vulnerability.
   It is strongly recommended to upgrade to <productname>Pgpool-II</productname>
   4.6.1, 4.5.7, 4.4.12, 4.3.15 and 4.2.22 or later.
   Alternatively, you can modify your settings so that they do not match any of
   the vulnerable configuration patterns.
  </para>
 </sect2>

 <sect2>
  <title>Changes</title>
  <itemizedlist>
   <listitem>
    <!--
    2025-05-02 [32dee13dd]
    -->
    <para>
     Add major version information to the configuration file. (Bo Peng)
    </para>
   </listitem>
  </itemizedlist>
 </sect2>

 <sect2>
  <title>Bug fixes</title>
  <itemizedlist>
   <listitem>
    <!--
    2025-05-13 [d92a7e2c1]
    -->
    <para>
     Fix incorrect client authentication in some cases. (Tatsuo Ishii)
    </para>
    <para>
     If enable_pool_hba = on, it's auth method is "password", no
     password is registered in pool_passwd, and auth method in
     pg_hba.conf is "scram-sha-256" or "md5", for the first time when
     a client connects to pgpool, authentication is performed as
     expected. But if a client connects to the cached connection, any
     password from the client is accepted.
    </para>
    <para>
     Also if enable_pool_hba = off, in some cases a client is not
     asked password for the first time, or when a client connects to
     cached connection, even if it should be.
    </para>
    <para>
     In addition to fixing above, following changes are made:
    </para>
    <itemizedlist>
     <listitem>
      <para>
       Remove single PostgreSQL code path to simplify the authentication code.
      </para>
     </listitem>
     <listitem>
      <para>
       Remove crypt authentication support for frontend and
       backend. The feature had not been documented and never
       tested. Moreover crypt authentication was removed long time
       ago in PostgreSQL (8.4, 2009).
      </para>
     </listitem>
     <listitem>
      <para>
       Add new regression test "040.client_auth". The test performs
       exhaustive client authentication tests using a test
       specification file formatted in CSV.
      </para>
     </listitem>
    </itemizedlist>
   </listitem>
   <listitem>
    <!--
    2025-05-08 [e3451b560]
    -->
    <para>
     Fix long standing bind bug with query cache. (Tatsuo Ishii)
    </para>
    <para>
     When a named statement is prepared, it is possible to bind then execute without a parse message.
     Problem is, table oids which are necessary to invalidate query cache at execute or COMMIT was
     collected only in parse messages process (Parse()). Thus if bind is executed
     without parse after previous execute, no table oids were collected, and pgpool failed to invalidate query cache.
     Fix is collecting table oids at bind time too.
     Add regression test to 006.memqcache.
    </para>
    <para>
     Problem reported by and test program provided by Achilleas Mantzios.
    </para>
    <para>
     Discussion: <ulink url="https://www.pgpool.net/pipermail/pgpool-general/2025-April/009430.html">[pgpool-general: 9427] Clarification on query results cache visibility</ulink>
    </para>
   </listitem>

   <listitem>
    <!--
    2025-05-02 [1dfacffed]
    -->
    <para>
     Fix query cache invalidation bug. (Tatsuo Ishii)
    </para>
    <para>
     When an execute message is received, pgpool checks its max number of rows paramter. If it's not zero,
     pgpool sets "partial_fetch" flag to instruct pool_handle_query_cache() to not create query cache.
     Problem is, commit 2a99aa5d1 missed that even INSERT/UPDATE/DELETE sets the execute message parameter to non 0 (mostly 1)
     and pgpool set the flag for even none SELECTs. This resulted in failing to invalidate query cache because if the flag is true,
     subsequent code in pool_handle_query_cache() skips cache invalidation.
     To fix this change Execute() to check if the query is read only SELECT before setting the flag.
     Also add test to 006.memqcache.
    </para>
    <para>
     Problem reported by and a test program provided by Achilleas Mantzios.
    </para>
    <para>
     Discussion: <ulink url="https://www.pgpool.net/pipermail/pgpool-general/2025-April/009430.html">[pgpool-general: 9427] Clarification on query results cache visibility</ulink>
    </para>
   </listitem>

   <listitem>
    <!--
    2025-05-05 [5947ba418]
    -->
    <para>
     Fix portability to OpenBSD. (Tatsuo Ishii)
    </para>
    <para>
     Discussion: <ulink url="https://www.pgpool.net/pipermail/pgpool-hackers/2025-May/004583.html">[pgpool-hackers: 4582] Make pgpool build on OpenBSD</ulink>
    </para>
    <para>
     The patch was created by Martijn van Duren.
    </para>
   </listitem>
   <listitem>
    <!--
    2025-05-01 [14c94473b]
    -->
    <para>
     Fix json_writer did not properly encode special characters. (Bo Peng)
    </para>
    <para>
     <productname>Pgpool-II</productname> would crash when the watchdog was enabled if <xref linkend="guc-wd-authkey"> contained special characters (e.g., a backslash).
    </para>
    <para>
     The patch was created by Martijn van Duren and slightly modified by Bo Peng.
    </para>
   </listitem>

   <listitem>
    <!--
    2025-03-04 [e1e32536f]
    -->
    <para>
      Fix sr check and health check to reopen <xref linkend="guc-pool-passwd"> upon reload. (Tatsuo Ishii)
    </para>
    <para>
      The streaming replication check and health check process forgot to
      reopen <xref linkend="guc-pool-passwd"> upon reload.  If <xref linkend="guc-sr-check-password"> or
      <xref linkend="guc-health-check-password"> is empty string, the password is obtained from
      <xref linkend="guc-pool-passwd">. Thus those process read outdated content of <xref linkend="guc-pool-passwd">
      upon reload.
    </para>
   </listitem>

   <listitem>
    <!--
    2025-04-27 [5f4d2d683]
    -->
    <para>
      Fix heartbeat processes issue in the system where IPv6 is disabled. (<ulink url="https://github.com/pgpool/pgpool2/issues/99">#99</ulink>) (Tatsuo Ishii)
    </para>
    <para>
     From <productname>Pgpool-II</productname>4.6.0, heartbeat process can handle IPv6 receiver
     sockets. However, the process does not work normally if IPv6 is
     disabled in the system. Like <productname>Pgpool-II</productname> main process and <productname>PostgreSQL</productname>, I
     think it should work normally if IPv4 is available.
    </para>
    <para>
     Discussion: <ulink url="https://www.pgpool.net/pipermail/pgpool-hackers/2025-April/004579.html">[pgpool-hackers: 4578] Fix IPv6 in heatbeat</ulink>
    </para>
   </listitem>
  </itemizedlist>
 </sect2>

 <sect2>
  <title>Documents</title>
  <itemizedlist>
   <listitem>
    <!--
    2025-05-09 [057e1131c]
    -->
    <para>
     Enhance query cache doc. (Tatsuo Ishii)
    </para>
    <para>
     Pgpool refuses to cache a query calling functions returning TIMESTAMP
     WITH TIMEZONE, TIME WITH TIMEZONE. If there are multiple functions
     having same name and one of them returns TIMESTAMP WITH TIMEZONE, TIME
     WITH TIMEZONE, pgpool refuses to cache even if one of them does not
     return the data types. So add a note on this along with workaround.
    </para>
   </listitem>
   <listitem>
    <!--
    2025-04-24 [e50114280]
    -->
    <para>
     Enhance the description on <xref linkend="guc-connection-life-time"> (Tatsuo Ishii)
    </para>
    <para>
     <xref linkend="guc-connection-life-time"> is a config value to determine the life time of
     cached connections to <productname>PostgreSQL</productname> backend. Current document lacks a
     description that the expiration calculation is actually done at the
     time when the client disconnects to the process which holds the cached
     connections.
    </para>
    <para>
     Discussion: <ulink url="https://www.pgpool.net/pipermail/pgpool-hackers/2025-April/004578.html">[pgpool-hackers: 4577] Doc: enhance the description on connection_life_time</ulink>
    </para>
   </listitem>

   <listitem>
    <!--
    2025-03-05 [a3086943f]
    -->
    <para>
     Enhance the explanation on <xref linkend="guc-sr-check-user">. (Tatsuo Ishii)
    </para>
    <para>
     It must be a superuser or in the <literal>pg_monitor</literal> group.
    </para>
   </listitem>
  </itemizedlist>
 </sect2>

 <sect2>
  <title>Regression Tests</title>
  <itemizedlist>
   <listitem>
    <!--
    2025-04-01 [7969146b7]
    2025-03-27 [05a727e8d]
    -->
    <para>
     Allow regression tests to use multiple socket directories. (Taiki Koshino, Tatsuo Ishii, Bo Peng)
    </para>
   </listitem>
  </itemizedlist>
 </sect2>
</sect1>

<sect1 id="release-4-6-0">
 <title>Release 4.6.0</title>
 <note>
  <title>Release Date</title>
  <simpara>2025-02-28</simpara>
 </note>

 <sect2>
  <title>Overview</title>
  <para>
   This release adds convenient features for logging and
   administration of <productname>Pgpool-II</productname>. Now you can
   rotate log without restarting or sending a signal
   to <productname>Pgpool-II</productname> by using new PCP
   command. <xref linkend="guc-logging-collector"> related parameters
   can be changed by reloading of the configuration file. Also new PC
   commands are added to invalidate query cache without
   restarting <productname>Pgpool-II</productname>. Another features
   for query cache are forcing to create a query cache entry and
   removing particular query cache entry.  New configuration parameter
   <xref linkend="guc-log-backend-messages"> allows to log messages
   from backend for easier analysis of communication
   between <productname>Pgpool-II</productname>
   and <productname>PostgreSQL</productname>.  The SQL parser is
   updated to sync with the latest <productname>PostgreSQL
   17</productname> version as usual. Finally now you can use IPv6 for
   watchdog's hostname and heartbeat_hostname parameter.
  </para>

  <para>
   Major enhancements are as follows:
  </para>

  <itemizedlist>

   <listitem>
    <para>
     <link linkend="pcp-log-rotate">New PCP command</link> to trigger log rotation.
    </para>
   </listitem>

   <listitem>
    <para>
     Allow <xref linkend="guc-logging-collector"> related parameters to be changed by reloading.
    </para>
   </listitem>

   <listitem>
    <para>
     <link linkend="pcp-invalidate-query-cache">New PCP command</link> to invalidate query cache.
    </para>
   </listitem>

   <listitem>
    <para>
     Allow to force to
     create <link linkend="runtime-in-memory-query-cache">query
     cache</link>
    </para>
   </listitem>

   <listitem>
    <para>
     New <link linkend="sql-pgpool-set-cache">PGPOOL SET CACHE DELETE</link> command.
    </para>
   </listitem>

   <listitem>
    <para>
     New configuration parameter <xref linkend="guc-log-backend-messages">.
    </para>
   </listitem>

   <listitem>
    <para>
     Import PostgreSQL 17's SQL parser.
    </para>
   </listitem>

   <listitem>
    <para>
     Add IPv6 support for watchdog <xref linkend="guc-hostname">
     and <xref linkend="guc-heartbeat-hostname"> parameter.
    </para>
   </listitem>

  </itemizedlist>
 </sect2>

 <sect2 id="migration-4-6-0">
  <title>Migration to Version 4.6</title>
  <itemizedlist>

   <listitem>
    <para>
     The default values of <xref linkend="guc-health-check-user">, <xref linkend="guc-recovery-user">,
     <xref linkend="guc-sr-check-user">
     and <xref linkend="guc-wd-lifecheck-user"> are changed from
     'noboy' to '' (empty string). You need to set them in
     4.6. Otherwise you will get an error.
    </para>
   </listitem>

   <listitem>
    <para>
     Ignore leading/trailing spaces in string list type configuration
     parameters, for
     example, <xref linkend="guc-unix-socket-directories">
     and <xref linkend="guc-pcp-socket-dir">.
    </para>
   </listitem>

   <listitem>
    <para>
     The following log messages appear when a child process exits due
     to <xref linkend="guc-child-life-time">
     or <xref linkend="guc-child-max-connections">.  Downgrade them to
     DEBUG1 because they are normal messages.
     <programlisting>
  reaper handler
  reaper handler: exiting normally
     </programlisting>
    </para>
   </listitem>

  </itemizedlist>
 </sect2>

 <sect2>
  <title>Changes</title>
  <itemizedlist>

   <listitem>
    <!--
    2024-08-05 [55036fd6c]
    -->
    <para>
     Add <xref linkend="pcp-log-rotate"> to trigger log rotation. (Bo Peng)
    </para>
   </listitem>

   <listitem>
    <!--
    2024-12-16 [5752de991]
    -->
    <para>
     Allow <xref linkend="guc-logging-collector"> related parameters
     to be changed by reloading
     the <productname>Pgpool-II</productname> configurations. (Bo
     Peng)
    </para>
    <para>
     The following <xref linkend="guc-logging-collector"> related
     parameters can now be changed by reloading:
     <itemizedlist>
      <listitem>
       <para>
	log_truncate_on_rotation
       </para>
      </listitem>
      <listitem>
       <para>
	log_directory
       </para>
      </listitem>
      <listitem>
       <para>
	log_filename
       </para>
      </listitem>
      <listitem>
       <para>
	log_rotation_age
       </para>
      </listitem>
      <listitem>
       <para>
	log_rotation_size
       </para>
      </listitem>
      <listitem>
       <para>
	log_file_mode
       </para>
      </listitem>
     </itemizedlist>
    </para>
   </listitem>

   <listitem>
    <!--
    2024-10-14 [09d4e59c5]
    -->
    <para>
     Add <xref linkend="pcp-invalidate-query-cache"> to invalidate
     query cache. (Tatsuo Ishii)
    </para>
   </listitem>

   <listitem>
    <!--
    2024-10-21 [c5c1ca6b3]
    -->
    <para>
     Add <link linkend="sql-pgpool-set-cache">PGPOOL SET CACHE
     DELETE</link> command to invalidate specified query cache entry.
     (Tatsuo Ishii)
    </para>
   </listitem>

   <listitem>
    <!--
    2024-11-25 [6d4106f9c]
    -->
    <para>
     Add new configuration
     parameter <xref linkend="guc-log-backend-messages"> to log
     protocol messages from each backend. (Tatsuo Ishii)
    </para>
   </listitem>

   <listitem>
    <!--
    2024-10-21 [b58a3c630]
    -->
    <para>
     Import <productname>PostgreSQL</productname> 17 RC1 new parser. (Bo Peng)
    </para>
    <para>
     Major changes of <productname>PostgreSQL</productname> 17 parser include:

     <programlisting>
- Allow MERGE to use NOT MATCHED BY SOURCE and RETURNING clause:

    MERGE INTO ... WHEN NOT MATCHED BY SOURCE ...
    MERGE INTO ... RETURNING ...

- Add new COPY option ON_ERROR ignore and LOG_VERBOSITY:

  COPY ... WITH (ON_ERROR ignore);
  COPY ... WITH (LOG_VERBOSITY verbose);

- Allow to use '*' to specify the COPY FROM options FORCE_NOT_NULL and FORCE_NULL for all columns.

  COPY ... WITH (FORCE_NOT_NULL *);
  COPY ... WITH (FORCE_NULL *);

- Add EXPLAIN option SERIALIZE and MEMORY

  EXPLAIN (MEMORY) ...
  EXPLAIN (ANALYZE, SERIALIZE ...) ...

- Allow ALTER TABLE to use SET STATISTICS DEFAULT to set a column to the default statistics target

  ALTER TABLE ... ALTER COLUMN ... SET STATISTICS DEFAULT;

- Allow ALTER TABLE to change a column's generation expression

  ALTER TABLE ... ALTER COLUMN ... SET EXPRESSION;

- Add DEFAULT setting for ALTER TABLE .. SET ACCESS METHOD

  ALTER TABLE ... SET ACCESS METHOD new_access_method DEFAULT;

- Allow event triggers to use login event:

  CREATE EVENT TRIGGER ... ON login ...

- Add event trigger support for REINDEX.
     </programlisting>
    </para>
   </listitem>

   <listitem>
    <!--
    2024-08-27 [65dbbe7a0]
    -->
    <para>
     Add IPv6 support for <xref linkend="guc-hostname"> and <xref linkend="guc-heartbeat-hostname"> parameter. (Kwangwon Seo)
    </para>
   </listitem>

   <listitem>
    <!--
    2024-05-09 [7c5ef8d09]
    -->
    <para>
     Ignore leading/trailing spaces in string list type configuration parameters. (Bo Peng)
    </para>
    <para>
     If the string list type configuration parameters
     (e.g. <xref linkend="guc-unix-socket-directories">, <xref linkend="guc-pcp-socket-dir">,
     etc.) contain white spaces, it may cause startup failure.
    </para>
   </listitem>

   <listitem>
    <!--
    2024-08-05 [2cde5031a]
    -->
    <para>
     Downgrade reaper handler logs. (Bo Peng)
    </para>
    <para>
     The following log messages appear when a child process exits due
     to settings (e.g., child_life_time or child_max_connections) .
     Downgrade them to DEBUG1 because they are normal messages.
     <programlisting>
  reaper handler
  reaper handler: exiting normally
     </programlisting>
    </para>
   </listitem>

   <listitem>
    <!--
    2024-06-12 [a9d1df446]
    -->
    <para>
     Eliminate unnecessary memory allocation in extended query protocol. (Tatsuo Ishii)
     Note this is only releated to streaming replication mode.
    </para>
   </listitem>

  </itemizedlist>
 </sect2>

 <sect2>
  <title>Bug fixes</title>
  <itemizedlist>
   <listitem>
    <para>
     This release fixes the same bugs as other minor releases.
     See <xref linkend="release"> for more details of those fixes.
    </para>
   </listitem>
  </itemizedlist>
 </sect2>

</sect1>
