Retire Slony mode.
authorTatsuo Ishii <ishii@postgresql.org>
Tue, 28 Oct 2025 23:42:45 +0000 (08:42 +0900)
committerTatsuo Ishii <ishii@postgresql.org>
Tue, 28 Oct 2025 23:42:45 +0000 (08:42 +0900)
Previously Pgpool-II accepted "slony mode" as one of the
backend_clustering_mode to support Slony-I
(https://www.slony.info/). However the latest Slony-I was released in
2022, nearly 3 years ago at this point. And we heard nothing from
users about retiring Slony mode. This suggests that there would be no
active Slony-I mode users. So let's drop Slony-I support.

Author: Tatsuo Ishii <ishii@postgresql.org>
Reviewed-by: Bo Peng <pengbo@sraoss.co.jp>
Discussion: [pgpool-general: 9486] Retiring slony mode
    https://www.pgpool.net/pipermail/pgpool-general/2025-May/009489.html
Discussion: https://www.postgresql.org/message-id/20250722.153130.1007226654125839063.ishii%40postgresql.org

18 files changed:
doc.ja/src/sgml/connection-settings.sgml
doc.ja/src/sgml/loadbalance.sgml
doc.ja/src/sgml/performance.sgml
doc.ja/src/sgml/restrictions.sgml
doc.ja/src/sgml/runtime.sgml
doc/src/sgml/connection-settings.sgml
doc/src/sgml/performance.sgml
doc/src/sgml/ref/pgpool_setup.sgml
doc/src/sgml/restrictions.sgml
doc/src/sgml/runtime.sgml
src/config/pool_config_variables.c
src/context/pool_query_context.c
src/include/pool.h
src/include/pool_config.h
src/protocol/pool_proto_modules.c
src/sample/pgpool.conf.sample-stream
src/test/pgpool_setup.in
src/test/regression/tests/040.client_auth/test.sh

index 0a39e05ff0758fdd96a56badb66d85b3eaa1a565..d707883402ddbf886458f9e2335ade1af1194a81 100644 (file)
@@ -1660,29 +1660,6 @@ backend_clustering_mode = logical_replication
   </para>
  </sect2>
 
- <sect2 id="runtime-config-slony-mode">
-  <title>Slonyモード</title>
-
-  <para>
-   このモードでは<productname>Pgpool-II</productname>を<acronym>Slony-I</acronym>と組み合わせて使用します。
-   Slony-Iが実際にデータのレプリケーションを行います。
-   このモードを有効にするには<varname>backend_clustering_mode</varname>にslonyを設定してください。
-    <programlisting>
-backend_clustering_mode = slony
-    </programlisting>
-   このモードでは127台までのレプリカサーバを使用できます。
-   また、レプリカサーバをまったく使用しないことも可能です。
-  </para>
-  <para>
-   このモードの難点は、検索問い合わせを負荷分散させた時に、スタンバイサーバのレプリケーション遅延を意識しなければならない点です。
-   ノードをまたがる可視性の一貫性も保証されません。
-   また、DDLやラージオブジェクトなど、一部のデータオブジェクトはレプリケーションされません。
-  </para>
-  <para>
-   ストリーミングレプリケーションやロジカルレプリケーションが登場後、Slony-Iを新規に採用するシステムは少ないので、特に理由がない限りこのモードを使用することはお勧めしません。
-  </para>
- </sect2>
-
  <sect2 id="guc-raw-mode" xreflabel="rawモード">
   <title>rawモード</title>
   <para>
index 87cfa8e9785fb8fa515b8dac3613dc367446ffc3..80cb27da5e639c7e56312c8cda9f4fdb7c96e537 100644 (file)
@@ -8,7 +8,7 @@
 
  <para>
   <productname>Pgpool-II</productname>のSELECTクエリの負荷分散はrawモードを除くすべてのクラスタリングモードで動作します。
-    æ\9c\89å\8a¹æ\99\82ã\80\81<productname>Pgpool-II</productname>ã\81¯æ\9b´æ\96°ã\82\92ä¼´ã\81\86ã\82¯ã\82¨ã\83ªã\82\92ã\80\81ã\82¹ã\83\88ã\83ªã\83¼ã\83\9fã\83³ã\82°ã\83¬ã\83\97ã\83ªã\82±ã\83¼ã\82·ã\83§ã\83³ã\83¢ã\83¼ã\83\89ã\80\81ã\83­ã\82¸ã\82«ã\83«ã\83¬ã\83\97ã\83ªã\82±ã\83¼ã\82·ã\83§ã\83³ã\83¢ã\83¼ã\83\89ã\80\81Slonyã\83¢ã\83¼ã\83\89ã\81§ã\81¯<acronym>ã\83\97ã\83©ã\82¤ã\83\9eã\83ªã\83\8eã\83¼ã\83\89</acronym>ã\81«ã\80\81ã\83¬ã\83\97ã\83ªã\82±ã\83¼ã\82·ã\83§ã\83³ã\83¢ã\83¼ã\83\89ã\81§ã\81¯å\85¨ã\81¦ã\81®ã\83\90ã\83\83ã\82¯ã\82¨ã\83³ã\83\89ã\83\8eã\83¼ã\83\89ã\81«å¯¾ã\81\97é\80\81ä¿¡ã\81\97ã\81¾ã\81\99ã\80\82
+    有効時、<productname>Pgpool-II</productname>は更新を伴うクエリを、ストリーミングレプリケーションモード、ロジカルレプリケーションモードでは<acronym>プライマリノード</acronym>に、レプリケーションモードでは全てのバックエンドノードに対し送信します。
     そして、その他のクエリは全てのバックエンドの間で負荷分散されます。
     <xref linkend="guc-statement-level-load-balance">が指定されている場合を除き、負荷分散メカニズムが参照クエリをどのノードに送信するかはセッション開始時に決められ、セッションの終了まで変更されません。
     ただし、いくつかの例外があります。
index 5c188eed055849e3ad41aedecdf3f0cc5046e855..ae5fc4f83dc598d7b9cf11c927d384125df10490 100644 (file)
  <sect1 id="read-query-load-balancing">
   <title>読み出しクエリの負荷分散</title>
   <para>
-   複数の<productname>PostgreSQL</productname>ノードがあり、<productname>Pgpool-II</productname>がストリーミングレプリケーションモード、ロジカルレプリケーションモード、slonyモード、レプリケーションモードで動作していると(これらの動作モードについては<xref linkend="running-mode">を参照のこと)、読み出しクエリをこれらのデータベースノードに分散させ、各々のノードにより少ない数のクエリを処理させることによってより高いスループットを得ることができます。
+   複数の<productname>PostgreSQL</productname>ノードがあり、<productname>Pgpool-II</productname>がストリーミングレプリケーションモード、ロジカルレプリケーションモード、レプリケーションモードで動作していると(これらの動作モードについては<xref linkend="running-mode">を参照のこと)、読み出しクエリをこれらのデータベースノードに分散させ、各々のノードにより少ない数のクエリを処理させることによってより高いスループットを得ることができます。
     この機能を使うためには、<xref linkend="guc-load-balance-mode">をonにする必要があります。
   </para>
 
index 862dc7390b2c34bdaf21269fff89f1e93e3cdeb1..535b60c061ef3e7b2ff8699d054f6e707debeff4 100644 (file)
       In other mode, including Slony mode, large
       objects are not supported.
       -->
-      Slonyモードも含め、その他のモードではラージオブジェクトはサポートされていません。
+      その他のモードではラージオブジェクトはサポートされていません。
      </para>
     </listitem>
    </varlistentry>
index 7bc450b4e9ddb8278f19329bd669536ea0eb082f..2931dacc90433b21572883f1677685082773a7f9 100644 (file)
        <entry>ロジカルレプリケーションモード</entry>
        <entry><literal>logical_replication</literal> </entry>
       </row>
-      <row>
-       <entry>slonyモード</entry>
-       <entry><literal>slony</literal></entry>
-      </row>
       <row>
        <entry>スナップショットアイソレーションモード</entry>
        <entry><literal>snapshot_isolation</literal></entry>
    </indexterm>
 
    <para>
-    <productname>Pgpool-II</>ã\81«ã\81¯ã\82¹ã\83\88ã\83ªã\83¼ã\83\9fã\83³ã\82°ã\83¬ã\83\97ã\83ªã\82±ã\83¼ã\82·ã\83§ã\83³ã\83¢ã\83¼ã\83\89ã\80\81ã\83­ã\82¸ã\82«ã\83«ã\83¬ã\83\97ã\83ªã\82±ã\83¼ã\82·ã\83§ã\83³ã\83¢ã\83¼ã\83\89ã\80\81ã\83¡ã\82¤ã\83³ã\83¬ã\83\97ã\83ªã\82«ã\83¢ã\83¼ã\83\89(Slonyã\83¢ã\83¼ã\83\89\80\81ã\83\8dã\82¤ã\83\86ã\82£ã\83\96ã\83¬ã\83\97ã\83ªã\82±ã\83¼ã\82·ã\83§ã\83³ã\83¢ã\83¼ã\83\89ã\80\81ã\82¹ã\83\8aã\83\83ã\83\97ã\82·ã\83§ã\83\83ã\83\88ã\82¢ã\82¤ã\82½ã\83¬ã\83¼ã\82·ã\83§ã\83³ã\83¢ã\83¼ã\83\89ã\80\81rawã\83¢ã\83¼ã\83\89ã\81®6ã\81¤ã\81®<link linkend="guc-backend-clustering-mode">ã\82¯ã\83©ã\82¹ã\82¿ã\83ªã\83³ã\82°ã\83¢ã\83¼ã\83\89</link>ã\81\8cã\81\82ã\82\8aã\81¾ã\81\99ã\80\82
+    <productname>Pgpool-II</>にはストリーミングレプリケーションモード、ロジカルレプリケーションモード、ネイティブレプリケーションモード、スナップショットアイソレーションモード、rawモードの6つの<link linkend="guc-backend-clustering-mode">クラスタリングモード</link>があります。
     いずれのモードにおいても、<productname>Pgpool-II</>はコネクションプーリング、自動フェイルオーバの機能を提供します。
     ストリーミングレプリケーションモード、ネイティブレプリケーションモード、スナップショットアイソレーションモードでは、更新処理を受け付けながらデータベースノードの同期を取り直すオンラインリカバリが利用可能です。
     オンラインリカバリの詳細については<xref linkend="runtime-online-recovery">を参照してください。
@@ -378,26 +374,6 @@ default_transaction_isolation = 'repeatable read'
     このことは、テーブルがレプリケーションされていない場合には、<productname>Pgpool-II</>がサブスクライバー側の更新されていない古いテーブルを見てしまうかもしれないことを意味します。
    </para>
 
-   <para>
-    <!--
-    The <firstterm>native replication mode</firstterm> mode (slony mode)
-    can be used with <productname>PostgreSQL</> servers
-    operating <productname>Slony</>. In this
-    mode, <productname>Slony</>/<productname>PostgreSQL</> is
-    responsible for synchronizing
-    databases. Since <productname>Slony-I</> is being obsoleted by
-    streaming replication, we do not recommend to use this mode
-    unless you have specific reason to
-    use <productname>Slony</>. Load balancing is possible in the
-    mode.
-    -->
-    <firstterm>メインレプリカモード</firstterm>(slonyモード)は<productname>Slony-I</>を使用する<productname>PostgreSQL</>サーバと一緒に使うことができます。
-    このモードでは、<productname>Slony</>/<productname>PostgreSQL</>がデータベースを同期する責任を持ちます。
-    <productname>Slony</>はストリーミングレプリケーションの登場により廃れつつあるため、<productname>Slony</>を使う特別な理由が無い限りこのモードの使用を推奨しません。
-    このモードでは負荷分散が可能です。
-   </para>
-
-
    <para>
     <!--
     In the raw mode, <productname>Pgpool-II</> does not care about the database
index 0f78b9931e091b760fb7523463116f3f01fa1aa9..97eafa0fb4d625da7b47da062d1239b48be08cc3 100644 (file)
@@ -1212,35 +1212,6 @@ backend_clustering_mode = logical_replication
 
  </sect2>
 
- <sect2 id="runtime-config-slony-mode">
-  <title>Slony mode</title>
-
-  <para>
-   This mode is used to couple <productname>Pgpool-II</productname>
-   with <acronym>Slony-I</acronym>.  Slony-I is responsible for doing
-   the actual data replication. To enable this mode, use slony for
-   <varname>backend_clustering_mode</varname>.
-    <programlisting>
-backend_clustering_mode = slony
-    </programlisting>
-   In this mode you can have up to 127 replica servers.  Also it is
-   possible not to have replica server at all.
-  </para>
-
-  <para>
-   The drawback of this mode is, it is necessary to consider the
-   replication delay while distributing read queries. The visibility
-   consistency among nodes is not guaranteed either.  Also certain
-   kind of objects such as DDL and large objects are not replicated.
-  </para>
-
-  <para>
-   After streaming replication and logical replication are introduced,
-   there are few systems that employ Slony-I.  If there's no
-   particular reason, it is not recommended to use this mode.
-  </para>
- </sect2>
-
  <sect2 id="guc-raw-mode" xreflabel="raw mode">
   <title>Raw mode</title>
   <para>
index 8657ea97df60d6b50cf4cf17ce9bab1caf75124f..be9f0c72fe89fffddd86e384337336e9305d05b2 100644 (file)
   <para>
    If there are multiple <productname>PostgreSQL</productname>
    nodes and <productname>Pgpool-II</productname> operates in
-   streaming replication mode, logical replication mode, slony mode
+   streaming replication mode, logical replication mode,
    or replication mode (for those running mode
    see <xref linkend="running-mode"> for more details), it is
     possible to distribute read queries among those database nodes
index 57d735a909b9182c88907ad7cbd2fb085f2a1557..ab8fd27710dde30e11b880e4c96a30b62f7cf86a 100644 (file)
@@ -73,7 +73,7 @@ Pgpool-II documentation
        Specifies the running mode.  <replaceable>mode</replaceable>
        can be <literal>r</literal> (native replication mode), <literal>s</literal> (streaming replication mode),
        <literal>n</literal> (raw mode), <literal>l</literal>
-       (logical replication mode), <literal>y</literal> (slony mode) or <literal>i</literal> (snapshot isolation mode).  If this is
+       (logical replication mode), or <literal>i</literal> (snapshot isolation mode).  If this is
        omitted, <literal>s</literal> is assumed.
       </para>
      </listitem>
index f1f5eb687899b7c1534ef3c85532f9a105312a26..c8444b5c4a6afe7cca57bf6908005642fa9045b9 100644 (file)
       supported, however.
      </para>
      <para>
-      In other mode, including Slony mode, large
+      In other mode, large
       objects are not supported.
      </para>
     </listitem>
index 0fe7ecabc283f1e968f0a5eb55d564411438e741..077b0e01427795e74c33cc38716a724c13bd3a56 100644 (file)
        <entry>Logical replication mode</entry>
        <entry><literal>logical_replication</literal> </entry>
       </row>
-      <row>
-       <entry>Slony mode</entry>
-       <entry><literal>slony</literal></entry>
-      </row>
       <row>
        <entry>Snapshot isolation mode</entry>
        <entry><literal>snapshot_isolation</literal></entry>
    <para>
     There are six different <link linkend="guc-backend-clustering-mode">clustering modes</link> in
     <productname>Pgpool-II</>: streaming replication mode, logical
-    replication mode, main replica mode (slony mode), native
+    replication mode, native
     replication mode, raw mode and snapshot isolation mode. In any
     mode, <productname>Pgpool-II</> provides connection pooling, and
     automatic fail over.  Online recovery can be used only with
@@ -305,19 +301,6 @@ default_transaction_isolation = 'repeatable read'
     in the subscriber side.
    </para>
 
-   <para>
-    The <firstterm>main replica mode</firstterm> (slony mode)
-    can be used with <productname>PostgreSQL</> servers
-    operating <productname>Slony</>. In this
-    mode, <productname>Slony</>/<productname>PostgreSQL</> is
-    responsible for synchronizing
-    databases. Since <productname>Slony-I</> is being obsoleted by
-    streaming replication, we do not recommend to use this mode
-    unless you have specific reason to
-    use <productname>Slony</>. Load balancing is possible in the
-    mode.
-   </para>
-
    <para>
     In the <firstterm>raw
      mode</firstterm>, <productname>Pgpool-II</> does not care about
index 50f0b0e030607d18a67f52face2562c938374cb9..62a05979ac53133764ae74576b5ec8b746575627 100644 (file)
@@ -232,7 +232,6 @@ static const struct config_enum_entry backend_clustering_mode_options[] = {
        {"streaming_replication", CM_STREAMING_REPLICATION, false},
        {"native_replication", CM_NATIVE_REPLICATION, false},
        {"logical_replication", CM_LOGICAL_REPLICATION, false},
-       {"slony", CM_SLONY, false},
        {"raw", CM_RAW, false},
        {"snapshot_isolation", CM_SNAPSHOT_ISOLATION, false},
        {NULL, 0, false}
index a4800d94b486ced8b9ef5c961cbedc9d19298e98..1a13168c6e8d3f0064dfce4ee6e4661eee69304e 100644 (file)
@@ -1983,7 +1983,7 @@ dml_adaptive(Node *node, char *query)
 
 /*
  * Decide the backend node to be sent in streaming replication mode, logical
- * replication mode and slony mode.  Called by pool_where_to_send.
+ * replication mode.  Called by pool_where_to_send.
  */
 static void
 where_to_send_main_replica(POOL_QUERY_CONTEXT *query_context, char *query, Node *node)
index 6f94c4b078365c71d310af8a88fa42fa1d8a9095..ea6f87e120af866b8ed3a15790d9d8a8e009fe91 100644 (file)
@@ -410,11 +410,9 @@ typedef enum
 #define REPLICATION (pool_config->backend_clustering_mode == CM_NATIVE_REPLICATION || \
                                         pool_config->backend_clustering_mode == CM_SNAPSHOT_ISOLATION)
 #define MAIN_REPLICA (pool_config->backend_clustering_mode == CM_STREAMING_REPLICATION || \
-                                         pool_config->backend_clustering_mode == CM_LOGICAL_REPLICATION || \
-                                         pool_config->backend_clustering_mode == CM_SLONY)
+                                         pool_config->backend_clustering_mode == CM_LOGICAL_REPLICATION)
 #define STREAM (pool_config->backend_clustering_mode == CM_STREAMING_REPLICATION)
 #define LOGICAL (pool_config->backend_clustering_mode == CM_LOGICAL_REPLICATION)
-#define SLONY (pool_config->backend_clustering_mode == CM_SLONY)
 #define RAW_MODE (pool_config->backend_clustering_mode == CM_RAW)
 #define SL_MODE (STREAM || LOGICAL) /* streaming or logical replication mode */
 
index 7cf5460f322f1e0a8fa519ebf8108f6d5dccbc58..9160a31c8f46d3198daba850b83f161663dbe6db 100644 (file)
@@ -70,19 +70,11 @@ typedef enum ProcessManagementSstrategies
        PM_STRATEGY_LAZY
 } ProcessManagementSstrategies;
 
-typedef enum NativeReplicationSubModes
-{
-       SLONY_MODE = 1,
-       STREAM_MODE,
-       LOGICAL_MODE
-}                      NativeReplicationSubModes;
-
 typedef enum ClusteringModes
 {
        CM_STREAMING_REPLICATION = 1,
        CM_NATIVE_REPLICATION,
        CM_LOGICAL_REPLICATION,
-       CM_SLONY,
        CM_RAW,
        CM_SNAPSHOT_ISOLATION
 } ClusteringModes;
index 4560cab6d377e59690c25ebb79adfac590f2ac4b..9f31442b7c0f2bf18291fbaccd1eac28195f1bc8 100644 (file)
@@ -1609,7 +1609,7 @@ Parse(POOL_CONNECTION *frontend, POOL_CONNECTION_POOL *backend,
                }
        }
 
-       if (REPLICATION || SLONY)
+       if (REPLICATION)
        {
                /*
                 * We must synchronize because Parse message acquires table locks.
index dcccb57a689412fe6e7581e2556bd3155565cbf2..ba6b923b016a1a8d07da694cbd97b0a642788efa 100644 (file)
@@ -20,7 +20,7 @@
 #------------------------------------------------------------------------------
 # BACKEND CLUSTERING MODE
 # Choose one of: streaming_replication, native_replication,
-#      logical_replication, slony, raw or snapshot_isolation
+#      logical_replication, raw or snapshot_isolation
 # (change requires restart)
 #------------------------------------------------------------------------------
 
index d44cf5b5990822ec44fe9ec54ba935b5dae36ce3..8715e1d26c09925681469fef54df3eb513efcbcc 100644 (file)
@@ -23,7 +23,6 @@
 # -m r: create an installation as native replication mode.
 # -m n: create an installation as raw mode.
 # -m l: create an installation as logical replication mode.
-# -m y: create an installation as slony mode.
 # -m i: create an installation as snapshot isolation mode.
 # -n num_clusters: create num_clusters PostgreSQL database cluster nodes
 # -p base_port: specify base port. pgpool port is base_port.
@@ -1171,7 +1170,7 @@ EOF
 ################################################################################
 function usage()
 {
-       echo "usage: $0 [-m r|s|n|l|y|i] [-n num_clusters] [-p base_port] [-pg pg_base_port][--no-stop] [-d] [-s] [-r] [-e] [-t] [-c]";exit 1
+       echo "usage: $0 [-m r|s|n|l|i] [-n num_clusters] [-p base_port] [-pg pg_base_port][--no-stop] [-d] [-s] [-r] [-e] [-t] [-c]";exit 1
 }
 
 #-------------------------------------------
@@ -1195,7 +1194,6 @@ do
                        s ) MODE="s";;
                        n ) MODE="n";;
                        l ) MODE="l";;
-                       y ) MODE="y";;
                        i ) MODE="i";;
                        * ) usage;;
                esac
@@ -1247,9 +1245,6 @@ case $MODE in
        l ) MODENAME="logical replication mode"
            CLUSTERING_MODE_STR="logical_replication"
            ;;
-       y ) MODENAME="slony mode"
-           CLUSTERING_MODE_STR="slony"
-           ;;
        i ) MODENAME="snapshot isolation mode"
            CLUSTERING_MODE_STR="snapshot_isolation"
            ;;
index 964e9293ef3fad865c1173ee32e1bb06a6eef364..c0b2c33318f828600e8b24d87a90b1513cb67f07 100755 (executable)
@@ -278,9 +278,9 @@ function do_auth
 
            add_user $username $pg_hba $PGPORT
 
-           # for logical replication and slony, we need to manually
+           # for logical replication, we need to manually
            # add PostgreSQL user to node 1.
-           if [ $mode = 'l' -o $mode = 'y' ];then
+           if [ $mode = 'l' ];then
                add_user $username $pg_hba "11003"
            fi
            add_pool_hba $username $pool_hba $PGPOOL_VERSION_DIGIT