<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Concept on Pigsty v5.0</title>
    <link>https://pgsty.pro/categories/concept/</link>
    <description>Recent content in Concept on Pigsty v5.0</description>
    <generator>Hugo</generator>
    <language>en-US</language>
    
    
    
      <lastBuildDate>Sat, 11 Jan 2025 00:00:00 +0000</lastBuildDate>
    
    
      <atom:link href="https://pgsty.pro/categories/concept/index.xml" rel="self" type="application/rss+xml" />
    
    <item>
        <title>Model of Patroni Passive Failure</title>
        <link>https://pgsty.pro/docs/concept/ha/failure/passive/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://pgsty.pro/docs/concept/ha/failure/passive/</guid>
        <description>&lt;pre class=&#34;td-infographic-source&#34;&gt;&lt;code class=&#34;language-infographic&#34;&gt;infographic list-row-simple-horizontal-arrow&#xA;data&#xA;&#xA;  desc Lease Expiration Stages&#xA;  items&#xA;    - label Lease Expiration&#xA;    - label Replica Detect&#xA;    - label Elect &amp;amp; Promote&#xA;    - label Haproxy Up&#xA;theme light&#xA;  palette antv&lt;/code&gt;&lt;/pre&gt;&lt;hr&gt;&#xA;&lt;h2 id=&#34;rto-timeline&#34;&gt;RTO Timeline&#xA;&lt;/h2&gt;&#xA;&lt;script&gt;&#xA;window.OinkEchartsFunctions = window.OinkEchartsFunctions || {};&#xA;(function (registry) {&#xA;var fmt = function(params) { if (!params || !params.length || params[0].name === &#39;&#39;) return &#39;&#39;; return &#39;&lt;b&gt;&#39; + params[0].name + &#39;&lt;/b&gt;&lt;br/&gt;&#39; + params.filter(p =&gt; p.value !== &#39;-&#39; &amp;&amp; p.value != null).map(p =&gt; p.marker + &#39; &#39; + p.seriesName + &#39;: &#39; + p.value + &#39;s&#39;).join(&#39;&lt;br/&gt;&#39;); };&#xA;registry[&#34;fmt&#34;] = fmt;&#xA;})(window.OinkEchartsFunctions);&#xA;&lt;/script&gt;&#xA;&lt;pre class=&#34;td-echarts-source&#34;&gt;&lt;code class=&#34;language-echarts&#34;&gt;tooltip: { trigger: axis, axisPointer: { type: shadow }, formatter: $fn:fmt }&#xA;legend: { top: 0, itemGap: 12, data: [Lease Expiration, Replica Detection, Lock Contest &amp;amp; Promote, Health Check] }&#xA;grid: { left: 64, right: 24, bottom: 32, top: 40 }&#xA;xAxis: { type: value, name: Seconds, nameLocation: end, max: 160, axisLine: { show: true }, axisTick: { show: true }, splitLine: { show: true, lineStyle: { type: dashed, opacity: 0.5 } }, minorTick: { show: true, splitNumber: 5 }, minorSplitLine: { show: true, lineStyle: { type: dotted, opacity: 0.2 } } }&#xA;yAxis: { type: category, axisLine: { show: true }, axisTick: { show: true }, splitLine: { show: false }, axisLabel: { fontSize: 10, fontFamily: monospace }, data: [wide-max, wide-avg, wide-min, &amp;#34;&amp;#34;, safe-max, safe-avg, safe-min, &amp;#34;&amp;#34;, norm-max, norm-avg, norm-min, &amp;#34;&amp;#34;, fast-max, fast-avg, fast-min] }&#xA;series:&#xA;  - { name: Lease Expire, type: bar, stack: main, barWidth: 20, z: 2, emphasis: { focus: series }, itemStyle: { color: &amp;#34;#e15759&amp;#34; }, data: [120, 110, 100, &amp;#34;-&amp;#34;, 60, 55, 50, &amp;#34;-&amp;#34;, 30, 27, 25, &amp;#34;-&amp;#34;, 20, 17, 15] }&#xA;  - { name: Replica Detect, type: bar, stack: main, z: 2, emphasis: { focus: series }, itemStyle: { color: &amp;#34;#edc949&amp;#34; }, data: [20, 10, 0, &amp;#34;-&amp;#34;, 10, 5, 0, &amp;#34;-&amp;#34;, 5, 3, 0, &amp;#34;-&amp;#34;, 5, 3, 0] }&#xA;  - { name: Elect &amp;amp; Promote, type: bar, stack: main, z: 2, emphasis: { focus: series }, itemStyle: { color: &amp;#34;#59a14f&amp;#34; }, data: [2, 1, 0, &amp;#34;-&amp;#34;, 2, 1, 0, &amp;#34;-&amp;#34;, 2, 1, 0, &amp;#34;-&amp;#34;, 2, 1, 0] }&#xA;  - { name: HAProxy Check, type: bar, stack: main, z: 2, emphasis: { focus: series }, itemStyle: { color: &amp;#34;#4e79a7&amp;#34; }, data: [8, 6, 4, &amp;#34;-&amp;#34;, 6, 5, 3, &amp;#34;-&amp;#34;, 4, 3, 2, &amp;#34;-&amp;#34;, 2, 2, 1] }&#xA;  - { name: Total RTO, type: bar, barGap: &amp;#34;-100%&amp;#34;, barWidth: 20, z: 1, itemStyle: { color: &amp;#34;#888&amp;#34;, opacity: 0 }, emphasis: { itemStyle: { opacity: 0 } }, data: [150, 127, 104, &amp;#34;-&amp;#34;, 78, 66, 53, &amp;#34;-&amp;#34;, 41, 34, 27, &amp;#34;-&amp;#34;, 29, 23, 16] }&#xA;  - { name: RTO Budget, type: bar, barGap: &amp;#34;-100%&amp;#34;, barWidth: 20, z: 0, itemStyle: { color: &amp;#34;rgba(0,0,0,0.08)&amp;#34; }, emphasis: { itemStyle: { color: &amp;#34;rgba(0,0,0,0.12)&amp;#34; } }, data: [150, 150, 150, &amp;#34;-&amp;#34;, 90, 90, 90, &amp;#34;-&amp;#34;, 45, 45, 45, &amp;#34;-&amp;#34;, 30, 30, 30] }&lt;/code&gt;&lt;/pre&gt;&lt;hr&gt;&#xA;&lt;h2 id=&#34;failure-model&#34;&gt;Failure Model&#xA;&lt;/h2&gt;&#xA;&lt;div class=&#34;td-table-scroll td-table-scroll--full td-table-scroll--static&#34;&gt;&#xA;&lt;table class=&#34;full-width&#34;&gt;&#xA;  &lt;thead&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;th scope=&#34;col&#34; style=&#34;text-align: center&#34;&gt;Phase&lt;/th&gt;&#xA;      &lt;th scope=&#34;col&#34; style=&#34;text-align: center&#34;&gt;Best&lt;/th&gt;&#xA;      &lt;th scope=&#34;col&#34; style=&#34;text-align: center&#34;&gt;Worst&lt;/th&gt;&#xA;      &lt;th scope=&#34;col&#34; style=&#34;text-align: center&#34;&gt;Average&lt;/th&gt;&#xA;      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;&#xA;    &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td style=&#34;text-align: center&#34;&gt;&lt;strong&gt;Lease Expiration&lt;/strong&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: center&#34;&gt;&lt;code&gt;ttl - loop&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: center&#34;&gt;&lt;code&gt;ttl&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: center&#34;&gt;&lt;code&gt;ttl - loop/2&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;Best: crash just before refresh&lt;br/&gt;Worst: crash right after refresh&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td style=&#34;text-align: center&#34;&gt;&lt;strong&gt;Replica Detect&lt;/strong&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: center&#34;&gt;&lt;code&gt;0&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: center&#34;&gt;&lt;code&gt;loop&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: center&#34;&gt;&lt;code&gt;loop / 2&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;Best: exactly at check point&lt;br/&gt;Worst: just missed check point&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td style=&#34;text-align: center&#34;&gt;&lt;strong&gt;Election Promote&lt;/strong&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: center&#34;&gt;&lt;code&gt;0&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: center&#34;&gt;&lt;code&gt;2&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: center&#34;&gt;&lt;code&gt;1&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;Best: direct lock and promote&lt;br/&gt;Worst: API timeout + Promote&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td style=&#34;text-align: center&#34;&gt;&lt;strong&gt;HAProxy Check&lt;/strong&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: center&#34;&gt;&lt;code&gt;(rise-1) × fastinter&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: center&#34;&gt;&lt;code&gt;(rise-1) × fastinter + inter&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: center&#34;&gt;&lt;code&gt;(rise-1) × fastinter + inter/2&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;Best: state change before check&lt;br/&gt;Worst: state change right after check&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Key Difference Between Passive and Active Failover&lt;/strong&gt;:&lt;/p&gt;</description>
      </item>
    <item>
        <title>E-R Model of Infra Cluster</title>
        <link>https://pgsty.pro/docs/concept/model/infra/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://pgsty.pro/docs/concept/model/infra/</guid>
        <description>&lt;p&gt;The INFRA module plays a special role in Pigsty: it&amp;rsquo;s not a traditional &amp;ldquo;cluster&amp;rdquo; but rather a management hub composed of a group of &lt;strong&gt;infrastructure nodes&lt;/strong&gt;, providing core services for the entire Pigsty deployment.&#xA;Each INFRA node is an &lt;strong&gt;autonomous&lt;/strong&gt; infrastructure service unit running core components like Nginx, Grafana, and VictoriaMetrics, collectively providing observability and management capabilities for managed database clusters.&lt;/p&gt;&#xA;&lt;p&gt;There are two core entities in Pigsty&amp;rsquo;s INFRA module:&lt;/p&gt;</description>
      </item>
    <item>
        <title>RPO Trade-offs</title>
        <link>https://pgsty.pro/docs/concept/ha/rpo/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://pgsty.pro/docs/concept/ha/rpo/</guid>
        <description>&lt;p&gt;&lt;strong&gt;RPO&lt;/strong&gt; (Recovery Point Objective) defines the &lt;strong&gt;maximum amount of data loss&lt;/strong&gt; allowed when the primary fails.&lt;/p&gt;&#xA;&lt;p&gt;For scenarios where data integrity is critical, such as financial transactions, RPO = 0 is typically required, meaning no data loss is allowed.&lt;/p&gt;&#xA;&lt;p&gt;However, stricter RPO targets come at a cost: higher write latency, reduced system throughput, and the risk that replica failures may cause primary unavailability.&#xA;For typical scenarios, some data loss is acceptable in exchange for higher availability and performance.&lt;/p&gt;</description>
      </item>
    <item>
        <title>Model of Patroni Active Failure</title>
        <link>https://pgsty.pro/docs/concept/ha/failure/active/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://pgsty.pro/docs/concept/ha/failure/active/</guid>
        <description>&lt;pre class=&#34;td-infographic-source&#34;&gt;&lt;code class=&#34;language-infographic&#34;&gt;infographic list-row-simple-horizontal-arrow&#xA;data&#xA;  desc When Patroni is healthy but PostgreSQL crashes&#xA;  items&#xA;    - label Crash Found&#xA;    - label Restart Timeout&#xA;    - label Replica Detect&#xA;    - label Elect Promote&#xA;    - label HAProxy Check&#xA;theme light&#xA;  palette antv&lt;/code&gt;&lt;/pre&gt;&lt;hr&gt;&#xA;&lt;h2 id=&#34;rto-timeline&#34;&gt;RTO Timeline&#xA;&lt;/h2&gt;&#xA;&lt;script&gt;&#xA;window.OinkEchartsFunctions = window.OinkEchartsFunctions || {};&#xA;(function (registry) {&#xA;var fmt = function(params) { if (!params || !params.length || params[0].name === &#39;&#39;) return &#39;&#39;; return &#39;&lt;b&gt;&#39; + params[0].name + &#39;&lt;/b&gt;&lt;br/&gt;&#39; + params.filter(p =&gt; p.value !== &#39;-&#39; &amp;&amp; p.value != null).map(p =&gt; p.marker + &#39; &#39; + p.seriesName + &#39;: &#39; + p.value + &#39;s&#39;).join(&#39;&lt;br/&gt;&#39;); };&#xA;registry[&#34;fmt&#34;] = fmt;&#xA;})(window.OinkEchartsFunctions);&#xA;&lt;/script&gt;&#xA;&lt;pre class=&#34;td-echarts-source&#34;&gt;&lt;code class=&#34;language-echarts&#34;&gt;tooltip: { trigger: axis, axisPointer: { type: shadow }, formatter: $fn:fmt }&#xA;legend: { top: 0, itemGap: 12, data: [ Crash Found, Restart Timeout, Replica Detection, Elect Promote, HAProxy Check] }&#xA;grid: { left: 64, right: 24, bottom: 32, top: 40 }&#xA;xAxis: { type: value, name: Seconds, nameLocation: end, max: 160, axisLine: { show: true }, axisTick: { show: true }, splitLine: { show: true, lineStyle: { type: dashed, opacity: 0.5 } }, minorTick: { show: true, splitNumber: 5 }, minorSplitLine: { show: true, lineStyle: { type: dotted, opacity: 0.2 } } }&#xA;yAxis: { type: category, axisLine: { show: true }, axisTick: { show: true }, splitLine: { show: false }, axisLabel: { fontSize: 10, fontFamily: monospace }, data: [wide-max, wide-avg, wide-min, &amp;#34;&amp;#34;, safe-max, safe-avg, safe-min, &amp;#34;&amp;#34;, norm-max, norm-avg, norm-min, &amp;#34;&amp;#34;, fast-max, fast-avg, fast-min] }&#xA;series:&#xA;  - { name: Crash Found, type: bar, stack: main, barWidth: 20, z: 2, emphasis: { focus: series }, itemStyle: { color: &amp;#34;#b07aa1&amp;#34; }, data: [20, 10, 0, &amp;#34;-&amp;#34;, 10, 5, 0, &amp;#34;-&amp;#34;, 5, 3, 0, &amp;#34;-&amp;#34;, 5, 3, 0] }&#xA;  - { name: Restart Timeout, type: bar, stack: main, z: 2, emphasis: { focus: series }, itemStyle: { color: &amp;#34;#f28e2c&amp;#34; }, data: [95, 95, 0, &amp;#34;-&amp;#34;, 45, 45, 0, &amp;#34;-&amp;#34;, 25, 25, 0, &amp;#34;-&amp;#34;, 15, 15, 0] }&#xA;  - { name: Replica Detect, type: bar, stack: main, z: 2, emphasis: { focus: series }, itemStyle: { color: &amp;#34;#edc949&amp;#34; }, data: [20, 10, 0, &amp;#34;-&amp;#34;, 10, 5, 0, &amp;#34;-&amp;#34;, 5, 3, 0, &amp;#34;-&amp;#34;, 5, 3, 0] }&#xA;  - { name: Elect Promote, type: bar, stack: main, z: 2, emphasis: { focus: series }, itemStyle: { color: &amp;#34;#59a14f&amp;#34; }, data: [2, 1, 0, &amp;#34;-&amp;#34;, 2, 1, 0, &amp;#34;-&amp;#34;, 2, 1, 0, &amp;#34;-&amp;#34;, 2, 1, 0] }&#xA;  - { name: HAProxy Check, type: bar, stack: main, z: 2, emphasis: { focus: series }, itemStyle: { color: &amp;#34;#4e79a7&amp;#34; }, data: [8, 6, 4, &amp;#34;-&amp;#34;, 6, 5, 3, &amp;#34;-&amp;#34;, 4, 3, 2, &amp;#34;-&amp;#34;, 2, 2, 1] }&#xA;  - { name: RTO Total, type: bar, barGap: &amp;#34;-100%&amp;#34;, barWidth: 20, z: 1, itemStyle: { color: &amp;#34;#888&amp;#34;, opacity: 0 }, emphasis: { itemStyle: { opacity: 0 } }, data: [145, 122, 4, &amp;#34;-&amp;#34;, 73, 61, 3, &amp;#34;-&amp;#34;, 41, 35, 2, &amp;#34;-&amp;#34;, 29, 24, 1] }&#xA;  - { name: RTO Budget, type: bar, barGap: &amp;#34;-100%&amp;#34;, barWidth: 20, z: 0, itemStyle: { color: &amp;#34;rgba(0,0,0,0.08)&amp;#34; }, emphasis: { itemStyle: { color: &amp;#34;rgba(0,0,0,0.12)&amp;#34; } }, data: [150, 150, 150, &amp;#34;-&amp;#34;, 90, 90, 90, &amp;#34;-&amp;#34;, 45, 45, 45, &amp;#34;-&amp;#34;, 30, 30, 30] }&lt;/code&gt;&lt;/pre&gt;&lt;hr&gt;&#xA;&lt;h2 id=&#34;failure-model&#34;&gt;Failure Model&#xA;&lt;/h2&gt;&#xA;&lt;div class=&#34;td-table-scroll td-table-scroll--full td-table-scroll--static&#34;&gt;&#xA;&lt;table class=&#34;full-width&#34;&gt;&#xA;  &lt;thead&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;th scope=&#34;col&#34; style=&#34;text-align: center&#34;&gt;Item&lt;/th&gt;&#xA;      &lt;th scope=&#34;col&#34; style=&#34;text-align: center&#34;&gt;Best&lt;/th&gt;&#xA;      &lt;th scope=&#34;col&#34; style=&#34;text-align: center&#34;&gt;Worst&lt;/th&gt;&#xA;      &lt;th scope=&#34;col&#34; style=&#34;text-align: center&#34;&gt;Average&lt;/th&gt;&#xA;      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;&#xA;    &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td style=&#34;text-align: center&#34;&gt;&lt;strong&gt;Crash Found&lt;/strong&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: center&#34;&gt;&lt;code&gt;0&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: center&#34;&gt;&lt;code&gt;loop&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: center&#34;&gt;&lt;code&gt;loop/2&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;Best: PG crashes right before check&lt;br/&gt;Worst: PG crashes right after check&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td style=&#34;text-align: center&#34;&gt;&lt;strong&gt;Restart Timeout&lt;/strong&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: center&#34;&gt;&lt;code&gt;0&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: center&#34;&gt;&lt;code&gt;start&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: center&#34;&gt;&lt;code&gt;start&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;Best: PG recovers instantly&lt;br/&gt;Worst: Wait full start timeout before releasing lease&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td style=&#34;text-align: center&#34;&gt;&lt;strong&gt;Replica Detect&lt;/strong&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: center&#34;&gt;&lt;code&gt;0&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: center&#34;&gt;&lt;code&gt;loop&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: center&#34;&gt;&lt;code&gt;loop/2&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;Best: Right at check point&lt;br/&gt;Worst: Just missed check point&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td style=&#34;text-align: center&#34;&gt;&lt;strong&gt;Elect Promote&lt;/strong&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: center&#34;&gt;&lt;code&gt;0&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: center&#34;&gt;&lt;code&gt;2&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: center&#34;&gt;&lt;code&gt;1&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;Best: Acquire lock and promote directly&lt;br/&gt;Worst: API timeout + Promote&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td style=&#34;text-align: center&#34;&gt;&lt;strong&gt;HAProxy Check&lt;/strong&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: center&#34;&gt;&lt;code&gt;(rise-1) × fastinter&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: center&#34;&gt;&lt;code&gt;(rise-1) × fastinter + inter&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: center&#34;&gt;&lt;code&gt;(rise-1) × fastinter + inter/2&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;Best: State changes before check&lt;br/&gt;Worst: State changes right after check&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Key Difference Between Active and Passive Failure&lt;/strong&gt;:&lt;/p&gt;</description>
      </item>
    <item>
        <title>E-R Model of PostgreSQL Cluster</title>
        <link>https://pgsty.pro/docs/concept/model/pgsql/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://pgsty.pro/docs/concept/model/pgsql/</guid>
        <description>&lt;p&gt;The PGSQL module organizes PostgreSQL in production as &lt;strong&gt;clusters&lt;/strong&gt;—&lt;strong&gt;logical entities&lt;/strong&gt; composed of a group of database &lt;strong&gt;instances&lt;/strong&gt; associated by &lt;strong&gt;primary-replica&lt;/strong&gt; relationships.&lt;/p&gt;&#xA;&lt;p&gt;Each cluster is an &lt;strong&gt;autonomous&lt;/strong&gt; business unit consisting of at least one &lt;strong&gt;primary instance&lt;/strong&gt;, exposing capabilities through services.&lt;/p&gt;&#xA;&lt;p&gt;There are four core entities in Pigsty&amp;rsquo;s PGSQL module:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Cluster&lt;/strong&gt;: An autonomous PostgreSQL business unit serving as the top-level namespace for other entities.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Service&lt;/strong&gt;: A named abstraction that exposes capabilities, routes traffic, and exposes services using node ports.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Instance&lt;/strong&gt;: A single PostgreSQL server consisting of running processes and database files on a single node.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Node&lt;/strong&gt;: A hardware resource abstraction running Linux + Systemd environment—can be bare metal, VM, container, or Pod.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Along with two business entities—&amp;ldquo;Database&amp;rdquo; and &amp;ldquo;Role&amp;rdquo;—these form the complete logical view as shown below:&lt;/p&gt;</description>
      </item>
    <item>
        <title>Failure Model</title>
        <link>https://pgsty.pro/docs/concept/ha/failure/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://pgsty.pro/docs/concept/ha/failure/</guid>
        <description>&lt;p&gt;Patroni failures can be classified into 10 categories by failure target, and further consolidated into five categories based on detection path, which are detailed in this section.&lt;/p&gt;&#xA;&lt;div class=&#34;td-table-scroll td-table-scroll--full td-table-scroll--static&#34;&gt;&#xA;&lt;table class=&#34;full-width&#34;&gt;&#xA;  &lt;thead&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;th scope=&#34;col&#34;&gt;#&lt;/th&gt;&#xA;      &lt;th scope=&#34;col&#34;&gt;Failure Scenario&lt;/th&gt;&#xA;      &lt;th scope=&#34;col&#34;&gt;Description&lt;/th&gt;&#xA;      &lt;th scope=&#34;col&#34;&gt;Final Path&lt;/th&gt;&#xA;    &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;1&lt;/td&gt;&#xA;      &lt;td&gt;PG process crash&lt;/td&gt;&#xA;      &lt;td&gt;crash, OOM killed&lt;/td&gt;&#xA;      &lt;td&gt;&lt;strong&gt;Active Detection&lt;/strong&gt;&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;2&lt;/td&gt;&#xA;      &lt;td&gt;PG connection refused&lt;/td&gt;&#xA;      &lt;td&gt;max_connections&lt;/td&gt;&#xA;      &lt;td&gt;&lt;strong&gt;Active Detection&lt;/strong&gt;&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;3&lt;/td&gt;&#xA;      &lt;td&gt;PG zombie&lt;/td&gt;&#xA;      &lt;td&gt;Process alive but unresponsive&lt;/td&gt;&#xA;      &lt;td&gt;&lt;strong&gt;Active Detection&lt;/strong&gt; (timeout)&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;4&lt;/td&gt;&#xA;      &lt;td&gt;Patroni process crash&lt;/td&gt;&#xA;      &lt;td&gt;kill -9, OOM&lt;/td&gt;&#xA;      &lt;td&gt;&lt;strong&gt;Passive Detection&lt;/strong&gt;&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;5&lt;/td&gt;&#xA;      &lt;td&gt;Patroni zombie&lt;/td&gt;&#xA;      &lt;td&gt;Process alive but stuck&lt;/td&gt;&#xA;      &lt;td&gt;&lt;strong&gt;Watchdog&lt;/strong&gt;&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;6&lt;/td&gt;&#xA;      &lt;td&gt;Node down&lt;/td&gt;&#xA;      &lt;td&gt;Power outage, hardware failure&lt;/td&gt;&#xA;      &lt;td&gt;&lt;strong&gt;Passive Detection&lt;/strong&gt;&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;7&lt;/td&gt;&#xA;      &lt;td&gt;Node zombie&lt;/td&gt;&#xA;      &lt;td&gt;IO hang, CPU starvation&lt;/td&gt;&#xA;      &lt;td&gt;&lt;strong&gt;Watchdog&lt;/strong&gt;&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;8&lt;/td&gt;&#xA;      &lt;td&gt;Primary ↔ DCS network failure&lt;/td&gt;&#xA;      &lt;td&gt;Firewall, switch failure&lt;/td&gt;&#xA;      &lt;td&gt;&lt;strong&gt;Network Partition&lt;/strong&gt;&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;9&lt;/td&gt;&#xA;      &lt;td&gt;Storage failure&lt;/td&gt;&#xA;      &lt;td&gt;Disk failure, disk full, mount failure&lt;/td&gt;&#xA;      &lt;td&gt;&lt;strong&gt;Active Detection&lt;/strong&gt; or &lt;strong&gt;Watchdog&lt;/strong&gt;&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;10&lt;/td&gt;&#xA;      &lt;td&gt;Manual switchover&lt;/td&gt;&#xA;      &lt;td&gt;Switchover/Failover&lt;/td&gt;&#xA;      &lt;td&gt;&lt;strong&gt;Manual Trigger&lt;/strong&gt;&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;p&gt;However, for RTO calculation purposes, all failures ultimately converge to two paths. This section explores the upper bound, lower bound, and average RTO for these two scenarios.&lt;/p&gt;</description>
      </item>
    <item>
        <title>E-R Model of Etcd Cluster</title>
        <link>https://pgsty.pro/docs/concept/model/etcd/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://pgsty.pro/docs/concept/model/etcd/</guid>
        <description>&lt;p&gt;The ETCD module organizes ETCD in production as &lt;strong&gt;clusters&lt;/strong&gt;—&lt;strong&gt;logical entities&lt;/strong&gt; composed of a group of ETCD &lt;strong&gt;instances&lt;/strong&gt; associated through the &lt;strong&gt;Raft&lt;/strong&gt; consensus protocol.&lt;/p&gt;&#xA;&lt;p&gt;Each cluster is an &lt;strong&gt;autonomous&lt;/strong&gt; distributed key-value storage unit consisting of at least one &lt;strong&gt;ETCD instance&lt;/strong&gt;, exposing service capabilities through client ports.&lt;/p&gt;&#xA;&lt;p&gt;There are three core entities in Pigsty&amp;rsquo;s ETCD module:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Cluster&lt;/strong&gt;: An autonomous ETCD service unit serving as the top-level namespace for other entities.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Instance&lt;/strong&gt;: A single ETCD server process running on a node, participating in Raft consensus.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Node&lt;/strong&gt;: A hardware resource abstraction running Linux + Systemd environment, implicitly declared.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Compared to PostgreSQL clusters, the ETCD cluster model is simpler, without Services or complex Role distinctions.&#xA;All ETCD instances are functionally equivalent, electing a Leader through the Raft protocol while others become Followers.&#xA;During scale-out intermediate states, non-voting Learner instance members are also allowed.&lt;/p&gt;</description>
      </item>
    <item>
        <title>Network Partition</title>
        <link>https://pgsty.pro/docs/concept/ha/failure/partition/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://pgsty.pro/docs/concept/ha/failure/partition/</guid>
        <description>&lt;pre class=&#34;td-infographic-source&#34;&gt;&lt;code class=&#34;language-infographic&#34;&gt;infographic list-row-simple-horizontal-arrow&#xA;data&#xA;  title Network Partition Failover Flow&#xA;  desc Primary partitioned from DCS, Patroni proactively demotes to prevent split-brain, waits for TTL expiration before switchover&#xA;  items&#xA;    - label Primary Demote&#xA;      desc Patroni demotes PG after retry timeout&#xA;      icon mingcute/shield-fill&#xA;    - label Lease Expiration&#xA;      desc Leader Key TTL expires&#xA;      icon mingcute/close-circle-fill&#xA;    - label Replica Detection&#xA;      desc Replica detects lease expiration, starts election&#xA;      icon mingcute/key-2-fill&#xA;    - label Lock &amp;amp; Promote&#xA;      desc Replica acquires lock and promotes to new primary&#xA;      icon mingcute/radar-fill&#xA;    - label Health Check&#xA;      desc HAProxy detects new primary online&#xA;      icon mingcute/arrow-up-circle-fill&#xA;theme light&#xA;  palette antv&lt;/code&gt;&lt;/pre&gt;&lt;hr&gt;&#xA;&lt;h2 id=&#34;rto-timeline&#34;&gt;RTO Timeline&#xA;&lt;/h2&gt;&#xA;&lt;script&gt;&#xA;window.OinkEchartsFunctions = window.OinkEchartsFunctions || {};&#xA;(function (registry) {&#xA;var fmt = function(params) { if (!params || !params.length || params[0].name === &#39;&#39;) return &#39;&#39;; return &#39;&lt;b&gt;&#39; + params[0].name + &#39;&lt;/b&gt;&lt;br/&gt;&#39; + params.filter(p =&gt; p.value !== &#39;-&#39; &amp;&amp; p.value != null).map(p =&gt; p.marker + &#39; &#39; + p.seriesName + &#39;: &#39; + p.value + &#39;s&#39;).join(&#39;&lt;br/&gt;&#39;); };&#xA;registry[&#34;fmt&#34;] = fmt;&#xA;})(window.OinkEchartsFunctions);&#xA;&lt;/script&gt;&#xA;&lt;pre class=&#34;td-echarts-source&#34;&gt;&lt;code class=&#34;language-echarts&#34;&gt;tooltip: { trigger: axis, axisPointer: { type: shadow }, formatter: $fn:fmt }&#xA;legend: { top: 0, itemGap: 12, data: [Primary Demote, Lease Expiration, Replica Detection, Lock &amp;amp; Promote, Health Check] }&#xA;grid: { left: 64, right: 24, bottom: 32, top: 40 }&#xA;xAxis: { type: value, name: sec, nameLocation: end, max: 160, axisLine: { show: true }, axisTick: { show: true }, splitLine: { show: true, lineStyle: { type: dashed, opacity: 0.5 } }, minorTick: { show: true, splitNumber: 5 }, minorSplitLine: { show: true, lineStyle: { type: dotted, opacity: 0.2 } } }&#xA;yAxis: { type: category, axisLine: { show: true }, axisTick: { show: true }, splitLine: { show: false }, axisLabel: { fontSize: 10, fontFamily: monospace }, data: [wide-max, wide-avg, wide-min, &amp;#34;&amp;#34;, safe-max, safe-avg, safe-min, &amp;#34;&amp;#34;, norm-max, norm-avg, norm-min, &amp;#34;&amp;#34;, fast-max, fast-avg, fast-min] }&#xA;series:&#xA;  - { name: Primary Demote, type: bar, stack: main, barWidth: 20, z: 2, emphasis: { focus: series }, itemStyle: { color: &amp;#34;#76b7b2&amp;#34; }, data: [50, 40, 30, &amp;#34;-&amp;#34;, 30, 25, 20, &amp;#34;-&amp;#34;, 15, 13, 10, &amp;#34;-&amp;#34;, 10, 8, 5] }&#xA;  - { name: Lease Expiration, type: bar, stack: main, z: 2, emphasis: { focus: series }, itemStyle: { color: &amp;#34;#e15759&amp;#34; }, data: [70, 70, 70, &amp;#34;-&amp;#34;, 30, 30, 30, &amp;#34;-&amp;#34;, 15, 15, 15, &amp;#34;-&amp;#34;, 10, 10, 10] }&#xA;  - { name: Replica Detection, type: bar, stack: main, z: 2, emphasis: { focus: series }, itemStyle: { color: &amp;#34;#edc949&amp;#34; }, data: [20, 10, 0, &amp;#34;-&amp;#34;, 10, 5, 0, &amp;#34;-&amp;#34;, 5, 3, 0, &amp;#34;-&amp;#34;, 5, 3, 0] }&#xA;  - { name: Lock &amp;amp; Promote, type: bar, stack: main, z: 2, emphasis: { focus: series }, itemStyle: { color: &amp;#34;#59a14f&amp;#34; }, data: [2, 1, 0, &amp;#34;-&amp;#34;, 2, 1, 0, &amp;#34;-&amp;#34;, 2, 1, 0, &amp;#34;-&amp;#34;, 2, 1, 0] }&#xA;  - { name: Health Check, type: bar, stack: main, z: 2, emphasis: { focus: series }, itemStyle: { color: &amp;#34;#4e79a7&amp;#34; }, data: [8, 6, 4, &amp;#34;-&amp;#34;, 6, 5, 3, &amp;#34;-&amp;#34;, 4, 3, 2, &amp;#34;-&amp;#34;, 2, 2, 1] }&#xA;  - { name: RTO Total, type: bar, barGap: &amp;#34;-100%&amp;#34;, barWidth: 20, z: 1, itemStyle: { color: &amp;#34;#888&amp;#34;, opacity: 0 }, emphasis: { itemStyle: { opacity: 0 } }, data: [150, 127, 104, &amp;#34;-&amp;#34;, 78, 66, 53, &amp;#34;-&amp;#34;, 41, 34, 27, &amp;#34;-&amp;#34;, 29, 23, 16] }&#xA;  - { name: RTO Budget, type: bar, barGap: &amp;#34;-100%&amp;#34;, barWidth: 20, z: 0, itemStyle: { color: &amp;#34;rgba(0,0,0,0.08)&amp;#34; }, emphasis: { itemStyle: { color: &amp;#34;rgba(0,0,0,0.12)&amp;#34; } }, data: [150, 150, 150, &amp;#34;-&amp;#34;, 90, 90, 90, &amp;#34;-&amp;#34;, 45, 45, 45, &amp;#34;-&amp;#34;, 30, 30, 30] }&lt;/code&gt;&lt;/pre&gt;&lt;hr&gt;&#xA;&lt;h2 id=&#34;failure-model&#34;&gt;Failure Model&#xA;&lt;/h2&gt;&#xA;&lt;div class=&#34;td-table-scroll td-table-scroll--full td-table-scroll--static&#34;&gt;&#xA;&lt;table class=&#34;full-width&#34;&gt;&#xA;  &lt;thead&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;th scope=&#34;col&#34; style=&#34;text-align: center&#34;&gt;Phase&lt;/th&gt;&#xA;      &lt;th scope=&#34;col&#34; style=&#34;text-align: center&#34;&gt;Best&lt;/th&gt;&#xA;      &lt;th scope=&#34;col&#34; style=&#34;text-align: center&#34;&gt;Worst&lt;/th&gt;&#xA;      &lt;th scope=&#34;col&#34; style=&#34;text-align: center&#34;&gt;Average&lt;/th&gt;&#xA;      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Notes&lt;/th&gt;&#xA;    &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td style=&#34;text-align: center&#34;&gt;&lt;strong&gt;Demote&lt;/strong&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: center&#34;&gt;&lt;code&gt;retry&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: center&#34;&gt;&lt;code&gt;loop + retry&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: center&#34;&gt;&lt;code&gt;loop/2 + retry&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;Patroni retries after detecting partition, demotes after timeout&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td style=&#34;text-align: center&#34;&gt;&lt;strong&gt;Lease Expiration&lt;/strong&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: center&#34;&gt;&lt;code&gt;ttl - loop - retry&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: center&#34;&gt;&lt;code&gt;ttl - loop - retry&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: center&#34;&gt;&lt;code&gt;ttl - loop - retry&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;Remaining TTL time after demotion (approximately constant)&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td style=&#34;text-align: center&#34;&gt;&lt;strong&gt;Replica Detection&lt;/strong&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: center&#34;&gt;&lt;code&gt;0&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: center&#34;&gt;&lt;code&gt;loop&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: center&#34;&gt;&lt;code&gt;loop/2&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;Best: Right at detection point&lt;br/&gt;Worst: Just missed detection&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td style=&#34;text-align: center&#34;&gt;&lt;strong&gt;Lock &amp;amp; Promote&lt;/strong&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: center&#34;&gt;&lt;code&gt;0&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: center&#34;&gt;&lt;code&gt;2&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: center&#34;&gt;&lt;code&gt;1&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;Best: Direct lock and promote&lt;br/&gt;Worst: API timeout + Promote&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td style=&#34;text-align: center&#34;&gt;&lt;strong&gt;Health Check&lt;/strong&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: center&#34;&gt;&lt;code&gt;(rise-1) × fastinter&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: center&#34;&gt;&lt;code&gt;(rise-1) × fastinter + inter&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: center&#34;&gt;&lt;code&gt;(rise-1) × fastinter + inter/2&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;Best: State changes before check&lt;br/&gt;Worst: State changes right after check&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Key difference between network partition and node crash&lt;/strong&gt;:&lt;/p&gt;</description>
      </item>
    <item>
        <title>MINIO Cluster Model</title>
        <link>https://pgsty.pro/docs/concept/model/minio/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://pgsty.pro/docs/concept/model/minio/</guid>
        <description>&lt;p&gt;MINIO is Pigsty&amp;rsquo;s compatibility module name for object storage. The current v4.5.0 source deploys Silo through &lt;a href=&#34;https://pgsty.pro/docs/minio/param/#minio_type&#34;&gt;&lt;code&gt;minio_type: silo&lt;/code&gt;&lt;/a&gt; and organizes a group of object-storage &lt;strong&gt;instances&lt;/strong&gt; into a &lt;strong&gt;cluster&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Each cluster is an &lt;strong&gt;autonomous&lt;/strong&gt; S3-compatible object-storage unit consisting of at least one instance and exposing service through the S3 API port.&lt;/p&gt;&#xA;&lt;p&gt;There are three core entities in Pigsty&amp;rsquo;s MINIO module:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Cluster&lt;/strong&gt;: An autonomous object-storage service unit serving as the top-level namespace for other entities.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Instance&lt;/strong&gt;: A single Silo server process running on a node and managing local disks.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Node&lt;/strong&gt;: A hardware resource abstraction running Linux + Systemd environment, implicitly declared.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Silo also retains the &lt;a href=&#34;https://pgsty.pro/docs/minio/config/#multi-pool&#34;&gt;&lt;strong&gt;Storage Pool&lt;/strong&gt;&lt;/a&gt; concept for expansion.&lt;/p&gt;</description>
      </item>
    <item>
        <title>E-R Model of Redis Cluster</title>
        <link>https://pgsty.pro/docs/concept/model/redis/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://pgsty.pro/docs/concept/model/redis/</guid>
        <description>&lt;p&gt;The Redis module organizes Redis in production as &lt;strong&gt;clusters&lt;/strong&gt;—&lt;strong&gt;logical entities&lt;/strong&gt; composed of a group of Redis &lt;strong&gt;instances&lt;/strong&gt; deployed on one or more &lt;strong&gt;nodes&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Each cluster is an &lt;strong&gt;autonomous&lt;/strong&gt; high-performance cache/storage unit consisting of at least one &lt;strong&gt;Redis instance&lt;/strong&gt;, exposing service capabilities through ports.&lt;/p&gt;&#xA;&lt;p&gt;There are three core entities in Pigsty&amp;rsquo;s Redis module:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Cluster&lt;/strong&gt;: An autonomous Redis service unit serving as the top-level namespace for other entities.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Instance&lt;/strong&gt;: A single Redis server process running on a specific port on a node.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Node&lt;/strong&gt;: A hardware resource abstraction running Linux + Systemd environment, can host multiple Redis instances, implicitly declared.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Unlike PostgreSQL, Redis uses a &lt;strong&gt;single-node multi-instance&lt;/strong&gt; deployment model: one physical/virtual machine node typically deploys &lt;strong&gt;multiple&lt;/strong&gt; Redis instances&#xA;to fully utilize multi-core CPUs. Therefore, nodes and instances have a &lt;strong&gt;1:N&lt;/strong&gt; relationship. Additionally, production typically advises against Redis instances with memory &amp;gt; 12GB.&lt;/p&gt;</description>
      </item>
    <item>
        <title>Architecture</title>
        <link>https://pgsty.pro/docs/concept/arch/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://pgsty.pro/docs/concept/arch/</guid>
        <description>&lt;p&gt;Pigsty uses a &lt;strong&gt;modular architecture&lt;/strong&gt; with a &lt;strong&gt;declarative interface&lt;/strong&gt;. You can &lt;a href=&#34;https://pgsty.pro/docs/deploy/planning/#common-solutions&#34;&gt;&lt;strong&gt;freely combine modules like building blocks&lt;/strong&gt;&lt;/a&gt; as needed.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Pigsty adopts a &lt;a href=&#34;https://pgsty.pro/docs/deploy/planning/&#34;&gt;&lt;strong&gt;modular design&lt;/strong&gt;&lt;/a&gt; that can be freely combined and used on demand (use one or all) to suit different scenarios.&lt;/li&gt;&#xA;&lt;li&gt;Pigsty uses &lt;a href=&#34;https://pgsty.pro/docs/concept/iac/inventory/&#34;&gt;&lt;strong&gt;config inventory&lt;/strong&gt;&lt;/a&gt; and &lt;a href=&#34;https://pgsty.pro/docs/concept/iac/parameter/&#34;&gt;&lt;strong&gt;config parameters&lt;/strong&gt;&lt;/a&gt; to describe the entire deployment environment, implemented via &lt;a href=&#34;https://pgsty.pro/docs/setup/playbook/&#34;&gt;&lt;strong&gt;Ansible playbooks&lt;/strong&gt;&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Pigsty can run on any &lt;a href=&#34;https://pgsty.pro/docs/concept/arch/node/&#34;&gt;&lt;strong&gt;node&lt;/strong&gt;&lt;/a&gt;—physical or virtual—as long as the OS is &lt;a href=&#34;https://pgsty.pro/docs/ref/linux/&#34;&gt;&lt;strong&gt;compatible&lt;/strong&gt;&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;modules&#34;&gt;Modules&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Pigsty uses a modular design with six main default modules: &lt;a href=&#34;https://pgsty.pro/docs/pgsql/&#34;&gt;&lt;code&gt;PGSQL&lt;/code&gt;&lt;/a&gt;, &lt;a href=&#34;https://pgsty.pro/docs/infra/&#34;&gt;&lt;code&gt;INFRA&lt;/code&gt;&lt;/a&gt;, &lt;a href=&#34;https://pgsty.pro/docs/node/&#34;&gt;&lt;code&gt;NODE&lt;/code&gt;&lt;/a&gt;, &lt;a href=&#34;https://pgsty.pro/docs/etcd/&#34;&gt;&lt;code&gt;ETCD&lt;/code&gt;&lt;/a&gt;, &lt;a href=&#34;https://pgsty.pro/docs/redis/&#34;&gt;&lt;code&gt;REDIS&lt;/code&gt;&lt;/a&gt;, and &lt;a href=&#34;https://pgsty.pro/docs/minio/&#34;&gt;&lt;code&gt;MINIO&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;</description>
      </item>
    <item>
        <title>Nodes</title>
        <link>https://pgsty.pro/docs/concept/arch/node/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://pgsty.pro/docs/concept/arch/node/</guid>
        <description>&lt;p&gt;A &lt;strong&gt;node&lt;/strong&gt; is an abstraction of hardware resources and operating systems. It can be a physical machine, bare metal, virtual machine, or container/pod.&lt;/p&gt;&#xA;&lt;p&gt;Any machine running a &lt;a href=&#34;https://pgsty.pro/docs/ref/linux/&#34;&gt;&lt;strong&gt;Linux OS&lt;/strong&gt;&lt;/a&gt; (with systemd daemon) and standard CPU/memory/disk/network resources can be treated as a node.&lt;/p&gt;&#xA;&lt;p&gt;Nodes can have &lt;a href=&#34;https://pgsty.pro/docs/ref/module/&#34;&gt;&lt;strong&gt;modules&lt;/strong&gt;&lt;/a&gt; installed. Pigsty has several node types, distinguished by which modules are deployed:&lt;/p&gt;&#xA;&lt;div class=&#34;td-table-scroll td-table-scroll--full td-table-scroll--static&#34;&gt;&#xA;&lt;table class=&#34;full-width&#34;&gt;&#xA;  &lt;thead&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;th scope=&#34;col&#34; style=&#34;text-align: center&#34;&gt;Type&lt;/th&gt;&#xA;      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;&#xA;    &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td style=&#34;text-align: center&#34;&gt;&lt;a href=&#34;https://pgsty.pro/docs/concept/arch/node/#regular-node&#34;&gt;&lt;strong&gt;Regular Node&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;A node managed by Pigsty&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td style=&#34;text-align: center&#34;&gt;&lt;a href=&#34;https://pgsty.pro/docs/concept/arch/node/#admin-node&#34;&gt;&lt;strong&gt;ADMIN Node&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;The node that runs Ansible to issue management commands&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td style=&#34;text-align: center&#34;&gt;&lt;a href=&#34;https://pgsty.pro/docs/concept/arch/node/#infra-node&#34;&gt;&lt;strong&gt;INFRA Node&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;Nodes with the &lt;a href=&#34;https://pgsty.pro/docs/infra/&#34;&gt;&lt;strong&gt;INFRA&lt;/strong&gt;&lt;/a&gt; module installed&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td style=&#34;text-align: center&#34;&gt;&lt;a href=&#34;https://pgsty.pro/docs/concept/arch/node/#etcd-node&#34;&gt;&lt;strong&gt;ETCD Node&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;Nodes with the &lt;a href=&#34;https://pgsty.pro/docs/etcd/&#34;&gt;&lt;strong&gt;ETCD&lt;/strong&gt;&lt;/a&gt; module for DCS&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td style=&#34;text-align: center&#34;&gt;&lt;a href=&#34;https://pgsty.pro/docs/concept/arch/node/#minio-node&#34;&gt;&lt;strong&gt;MINIO Node&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;Nodes with the &lt;a href=&#34;https://pgsty.pro/docs/minio/&#34;&gt;&lt;strong&gt;MINIO&lt;/strong&gt;&lt;/a&gt; module for object storage&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td style=&#34;text-align: center&#34;&gt;&lt;a href=&#34;https://pgsty.pro/docs/concept/arch/node/#pgsql-node&#34;&gt;&lt;strong&gt;PGSQL Node&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;Nodes with the &lt;a href=&#34;https://pgsty.pro/docs/pgsql/&#34;&gt;&lt;strong&gt;PGSQL&lt;/strong&gt;&lt;/a&gt; module installed&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td style=&#34;text-align: center&#34;&gt;&amp;hellip;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;Nodes with other modules&amp;hellip;&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;p&gt;In a &lt;a href=&#34;https://pgsty.pro/docs/setup/install/&#34;&gt;&lt;strong&gt;singleton&lt;/strong&gt;&lt;/a&gt; Pigsty deployment, multiple roles converge on one node: it serves as the regular node, admin node, infra node, ETCD node, and database node simultaneously.&lt;/p&gt;</description>
      </item>
    <item>
        <title>ER Model</title>
        <link>https://pgsty.pro/docs/concept/model/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://pgsty.pro/docs/concept/model/</guid>
        <description>&lt;p&gt;The largest entity concept in Pigsty is a &lt;strong&gt;Deployment&lt;/strong&gt;. The main entities and relationships (E-R diagram) in a deployment are shown below:&lt;/p&gt;&#xA;&lt;img class=&#34;td-image&#34; src=&#34;https://pgsty.pro/img/pigsty/er-full.svg&#34; alt=&#34;Pigsty full data model ER diagram&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&lt;p&gt;A deployment can also be understood as an &lt;strong&gt;Environment&lt;/strong&gt;. For example, Production (Prod), User Acceptance Testing (UAT), Staging, Testing, Development (Devbox), etc.&#xA;Each environment corresponds to a Pigsty &lt;a href=&#34;https://pgsty.pro/docs/concept/iac/inventory/&#34;&gt;&lt;strong&gt;inventory&lt;/strong&gt;&lt;/a&gt; that describes all entities and attributes in that environment.&lt;/p&gt;&#xA;&lt;p&gt;Typically, an environment includes shared infrastructure (&lt;a href=&#34;https://pgsty.pro/docs/infra/&#34;&gt;&lt;strong&gt;&lt;code&gt;INFRA&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt;), which broadly includes &lt;a href=&#34;https://pgsty.pro/docs/etcd/&#34;&gt;&lt;strong&gt;&lt;code&gt;ETCD&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt; (HA DCS) and &lt;a href=&#34;https://pgsty.pro/docs/minio/&#34;&gt;&lt;strong&gt;&lt;code&gt;MINIO&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt; (centralized backup repository),&#xA;serving multiple PostgreSQL database clusters (and other database module components). (Exception: there are also &lt;a href=&#34;https://pgsty.pro/docs/setup/slim/&#34;&gt;&lt;strong&gt;deployments without infrastructure&lt;/strong&gt;&lt;/a&gt;)&lt;/p&gt;</description>
      </item>
    <item>
        <title>Infra as Code</title>
        <link>https://pgsty.pro/docs/concept/iac/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://pgsty.pro/docs/concept/iac/</guid>
        <description>&lt;p&gt;Pigsty follows the IaC and GitOPS philosophy: use a declarative &lt;a href=&#34;https://pgsty.pro/docs/setup/config/#inventory&#34;&gt;&lt;strong&gt;config inventory&lt;/strong&gt;&lt;/a&gt; to describe the entire environment, and materialize it through &lt;a href=&#34;https://pgsty.pro/docs/setup/playbook/&#34;&gt;&lt;strong&gt;idempotent playbooks&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Users describe their desired state declaratively through &lt;a href=&#34;https://pgsty.pro/docs/ref/param/&#34;&gt;&lt;strong&gt;parameters&lt;/strong&gt;&lt;/a&gt;, and playbooks idempotently adjust target nodes to reach that state.&#xA;This is similar to Kubernetes CRDs &amp;amp; Operators, but Pigsty implements this functionality on bare metal and virtual machines through Ansible.&lt;/p&gt;&#xA;&lt;p&gt;Pigsty was born to solve the operational management problem of ultra-large-scale PostgreSQL clusters. The idea behind it is simple — we need the ability to replicate the entire infrastructure (100+ database clusters + PG/Redis + observability) on ready servers within ten minutes.&#xA;No GUI + ClickOps can complete such a complex task in such a short time, making CLI + IaC the only choice — it provides precise, efficient control.&lt;/p&gt;</description>
      </item>
    <item>
        <title>High Availability</title>
        <link>https://pgsty.pro/docs/concept/ha/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://pgsty.pro/docs/concept/ha/</guid>
        <description>&lt;hr&gt;&#xA;&lt;h2 id=&#34;overview&#34;&gt;Overview&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Pigsty&amp;rsquo;s PostgreSQL clusters come with out-of-the-box high availability, with core capabilities provided by &lt;a href=&#34;https://pigsty.io/docs/patroni&#34;&gt;&lt;strong&gt;Patroni&lt;/strong&gt;&lt;/a&gt;, &lt;a href=&#34;https://etcd.io/&#34;&gt;&lt;strong&gt;Etcd&lt;/strong&gt;&lt;/a&gt;, and &lt;a href=&#34;http://www.haproxy.org/&#34;&gt;&lt;strong&gt;HAProxy&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;When your PostgreSQL cluster has two or more instances, you automatically have self-healing database high availability without any additional configuration — as long as any instance in the cluster survives, the cluster can provide complete service. Clients only need to connect to any node in the cluster to get full service without worrying about primary-replica topology changes.&lt;/p&gt;</description>
      </item>
    <item>
        <title>Infrastructure</title>
        <link>https://pgsty.pro/docs/concept/arch/infra/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://pgsty.pro/docs/concept/arch/infra/</guid>
        <description>&lt;p&gt;Running production-grade, highly available PostgreSQL clusters typically requires a comprehensive set of infrastructure services (foundation) for support, such as monitoring and alerting, log collection, time synchronization, DNS resolution, and local software repositories.&#xA;Pigsty provides the &lt;a href=&#34;https://pgsty.pro/docs/infra/&#34;&gt;&lt;strong&gt;INFRA module&lt;/strong&gt;&lt;/a&gt; to address this—it&amp;rsquo;s an &lt;strong&gt;optional module&lt;/strong&gt;, but we strongly recommend enabling it.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;overview&#34;&gt;Overview&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;The diagram below shows the architecture of a &lt;a href=&#34;https://pgsty.pro/docs/setup/install/&#34;&gt;&lt;strong&gt;single-node deployment&lt;/strong&gt;&lt;/a&gt;. The right half represents the components included in the &lt;a href=&#34;https://pgsty.pro/docs/infra/&#34;&gt;&lt;strong&gt;INFRA module&lt;/strong&gt;&lt;/a&gt;:&lt;/p&gt;</description>
      </item>
    <item>
        <title>PGSQL Arch</title>
        <link>https://pgsty.pro/docs/concept/arch/pgsql/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://pgsty.pro/docs/concept/arch/pgsql/</guid>
        <description>&lt;p&gt;The PGSQL module organizes PostgreSQL in production as &lt;strong&gt;clusters&lt;/strong&gt;—&lt;strong&gt;logical entities&lt;/strong&gt; composed of a group of database &lt;strong&gt;instances&lt;/strong&gt; associated by &lt;strong&gt;primary-replica&lt;/strong&gt; relationships.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;overview&#34;&gt;Overview&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;The &lt;a href=&#34;https://pgsty.pro/docs/pgsql/&#34;&gt;&lt;strong&gt;PGSQL module&lt;/strong&gt;&lt;/a&gt; includes the following components, working together to provide production-grade PostgreSQL HA cluster services:&lt;/p&gt;&#xA;&lt;div class=&#34;td-table-scroll td-table-scroll--full td-table-scroll--static&#34;&gt;&#xA;&lt;table class=&#34;full-width&#34;&gt;&#xA;  &lt;thead&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Component&lt;/th&gt;&#xA;      &lt;th scope=&#34;col&#34;&gt;Type&lt;/th&gt;&#xA;      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;&#xA;    &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;&lt;a href=&#34;https://pgsty.pro/docs/concept/arch/pgsql/#postgresql&#34;&gt;&lt;strong&gt;&lt;code&gt;postgres&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;td&gt;Database&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;The world&amp;rsquo;s most advanced open-source relational database, PGSQL core&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;&lt;a href=&#34;https://pgsty.pro/docs/concept/arch/pgsql/#patroni&#34;&gt;&lt;strong&gt;&lt;code&gt;patroni&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;td&gt;HA&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;Manages PostgreSQL, coordinates failover, leader election, config changes&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;&lt;a href=&#34;https://pgsty.pro/docs/concept/arch/pgsql/#pgbouncer&#34;&gt;&lt;strong&gt;&lt;code&gt;pgbouncer&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;td&gt;Pool&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;Lightweight connection pooling middleware, reduces overhead, adds flexibility&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;&lt;a href=&#34;https://pgsty.pro/docs/concept/arch/pgsql/#pgbackrest&#34;&gt;&lt;strong&gt;&lt;code&gt;pgbackrest&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;td&gt;Backup&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;Full/incremental backup and WAL archiving, supports local and object storage&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;&lt;a href=&#34;https://pgsty.pro/docs/concept/arch/pgsql/#pg_exporter&#34;&gt;&lt;strong&gt;&lt;code&gt;pg_exporter&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;td&gt;Metrics&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;Exports PostgreSQL monitoring metrics in a Prometheus-compatible format&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;&lt;a href=&#34;https://pgsty.pro/docs/concept/arch/pgsql/#pgbouncer_exporter&#34;&gt;&lt;strong&gt;&lt;code&gt;pgbouncer_exporter&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;td&gt;Metrics&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;Exports Pgbouncer connection pool metrics&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;&lt;a href=&#34;https://pgsty.pro/docs/concept/arch/pgsql/#pgbackrest_exporter&#34;&gt;&lt;strong&gt;&lt;code&gt;pgbackrest_exporter&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;td&gt;Metrics&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;Exports backup status metrics&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;&lt;a href=&#34;https://pgsty.pro/docs/concept/arch/pgsql/#vip-manager&#34;&gt;&lt;strong&gt;&lt;code&gt;vip-manager&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;td&gt;VIP&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;Binds L2 VIP to current primary node for transparent failover [Optional]&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&#34;https://pgsty.pro/docs/concept/arch/pgsql/#vip-manager&#34;&gt;&lt;strong&gt;&lt;code&gt;vip-manager&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt; is an on-demand component. Additionally, PGSQL uses components from other modules:&lt;/p&gt;</description>
      </item>
    <item>
        <title>Point-in-Time Recovery — A Time Machine for PostgreSQL</title>
        <link>https://pgsty.pro/docs/concept/pitr/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://pgsty.pro/docs/concept/pitr/</guid>
        <description>&lt;blockquote&gt;&#xA;&lt;p&gt;If data, a table, or even a database is deleted accidentally, Point-in-Time Recovery (PITR) can return the cluster to an earlier state.&lt;/p&gt;&#xA;&lt;p&gt;This capability, once treated as specialist DBA work, is enabled by Pigsty&amp;rsquo;s standard PostgreSQL configuration.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;replication-is-not-backup&#34;&gt;Replication Is Not Backup&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://pgsty.pro/docs/concept/ha/&#34;&gt;&lt;strong&gt;High availability&lt;/strong&gt;&lt;/a&gt; can fail over to another instance when hardware fails. It has a natural blind spot, however: &lt;strong&gt;replication is not backup&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Streaming replication faithfully sends every primary change to every replica within milliseconds, including a &lt;code&gt;DELETE&lt;/code&gt; without a &lt;code&gt;WHERE&lt;/code&gt; clause or a &lt;code&gt;DROP TABLE&lt;/code&gt; issued against the wrong database. Failover handles a broken machine; when the data itself is wrong, every replica can contain the same error.&lt;/p&gt;</description>
      </item>
    <item>
        <title>RTO Trade-offs</title>
        <link>https://pgsty.pro/docs/concept/ha/rto/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://pgsty.pro/docs/concept/ha/rto/</guid>
        <description>&lt;p&gt;&lt;strong&gt;RTO&lt;/strong&gt; (Recovery Time Objective) defines the &lt;strong&gt;maximum time required for the system to restore write capability&lt;/strong&gt; when the primary fails.&lt;/p&gt;&#xA;&lt;p&gt;For critical transaction systems where availability is paramount, the shortest possible RTO is typically required, such as under one minute.&lt;/p&gt;&#xA;&lt;p&gt;However, shorter RTO comes at a cost: increased false failover risk. Network jitter may be misinterpreted as a failure, leading to unnecessary failovers.&#xA;For cross-datacenter/cross-region deployments, RTO requirements are typically relaxed (e.g., 1-2 minutes) to reduce false failover risk.&lt;/p&gt;</description>
      </item>
    <item>
        <title>How PITR Works</title>
        <link>https://pgsty.pro/docs/concept/pitr/mechanism/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://pgsty.pro/docs/concept/pitr/mechanism/</guid>
        <description>&lt;p&gt;If a database is a state machine, &lt;strong&gt;WAL&lt;/strong&gt; (Write-Ahead Log) is its ordered change history. PostgreSQL records each modification in WAL before applying it to data files. Save a physical snapshot at one point, preserve all later WAL, and PostgreSQL can replay that history to a selected consistent state.&lt;/p&gt;&#xA;&lt;p&gt;PITR is therefore the combination of three simple elements: a &lt;strong&gt;snapshot&lt;/strong&gt; (base backup), &lt;strong&gt;history&lt;/strong&gt; (WAL archive), and a &lt;strong&gt;target&lt;/strong&gt; (where replay should stop).&lt;/p&gt;</description>
      </item>
    <item>
        <title>PITR Architecture</title>
        <link>https://pgsty.pro/docs/concept/pitr/arch/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://pgsty.pro/docs/concept/pitr/arch/</guid>
        <description>&lt;p&gt;The &lt;a href=&#34;https://pgsty.pro/docs/concept/pitr/mechanism/&#34;&gt;&lt;strong&gt;PITR principle&lt;/strong&gt;&lt;/a&gt; is compact; the engineering is not. WAL archiving must not stall production writes, object-storage backups need encryption, backup jobs must follow the primary after failover, shared repositories must isolate clusters, and large numbers of small objects can limit throughput.&lt;/p&gt;&#xA;&lt;p&gt;Pigsty uses &lt;a href=&#34;https://pgbackrest.org/&#34;&gt;&lt;strong&gt;pgBackRest&lt;/strong&gt;&lt;/a&gt; as its backup engine and ships production-oriented defaults for those concerns. This page describes the engine, repository abstraction, archive path, scheduler, and primary-aware execution model.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;backup-engine-pgbackrest&#34;&gt;Backup Engine: pgBackRest&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Pigsty uses pgBackRest for three responsibilities: create base backups with &lt;code&gt;backup&lt;/code&gt;, receive WAL with &lt;code&gt;archive-push&lt;/code&gt;, and restore data with &lt;code&gt;restore&lt;/code&gt; plus &lt;code&gt;archive-get&lt;/code&gt;.&lt;/p&gt;</description>
      </item>
    <item>
        <title>Configure</title>
        <link>https://pgsty.pro/docs/concept/iac/configure/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://pgsty.pro/docs/concept/iac/configure/</guid>
        <description>&lt;p&gt;Pigsty provides a &lt;strong&gt;&lt;code&gt;configure&lt;/code&gt;&lt;/strong&gt; script as a &lt;strong&gt;configuration wizard&lt;/strong&gt; that automatically generates an appropriate &lt;code&gt;pigsty.yml&lt;/code&gt; configuration file based on your current environment.&lt;/p&gt;&#xA;&lt;p&gt;This is an &lt;strong&gt;optional&lt;/strong&gt; script: if you already understand how to configure Pigsty, you can directly edit the &lt;code&gt;pigsty.yml&lt;/code&gt; configuration file and skip the wizard.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;quick-start&#34;&gt;Quick Start&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Enter the pigsty source home directory and run &lt;code&gt;./configure&lt;/code&gt; to automatically start the configuration wizard. Without any arguments, it defaults to the &lt;a href=&#34;https://pgsty.pro/docs/conf/meta/&#34;&gt;&lt;strong&gt;&lt;code&gt;meta&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt; single-node configuration template:&lt;/p&gt;</description>
      </item>
    <item>
        <title>Parameters</title>
        <link>https://pgsty.pro/docs/concept/iac/parameter/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://pgsty.pro/docs/concept/iac/parameter/</guid>
        <description>&lt;p&gt;In the &lt;strong&gt;inventory&lt;/strong&gt;, you can use various parameters to fine-tune Pigsty customization. These parameters cover everything from infrastructure settings to database configuration.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;parameter-list&#34;&gt;Parameter List&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;According to the current source and parameter reference pages, Pigsty&amp;rsquo;s 10 official modules expose &lt;strong&gt;373&lt;/strong&gt; public parameters for fine-grained control. See &lt;a href=&#34;https://pgsty.pro/docs/ref/param/&#34;&gt;&lt;strong&gt;Reference - Parameter List&lt;/strong&gt;&lt;/a&gt; for the complete list. The native MySQL 8.4 pilot module exposes 13 additional public parameters that are listed separately and excluded from this total.&lt;/p&gt;</description>
      </item>
    <item>
        <title>PITR Tradeoffs</title>
        <link>https://pgsty.pro/docs/concept/pitr/tradeoff/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://pgsty.pro/docs/concept/pitr/tradeoff/</guid>
        <description>&lt;p&gt;A backup is an insurance policy. Its premium is storage, network traffic, and operational work; its benefit is how much data can be recovered and how quickly service can return. There is no universal free policy: more history normally needs more capacity, while a shorter RTO normally needs newer backups and tested procedures.&lt;/p&gt;&#xA;&lt;p&gt;Designing a policy means answering three questions: &lt;strong&gt;where is the repository, how long is history retained, and how often are backups taken?&lt;/strong&gt;&lt;/p&gt;</description>
      </item>
    <item>
        <title>Declarative Recovery</title>
        <link>https://pgsty.pro/docs/concept/pitr/restore/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://pgsty.pro/docs/concept/pitr/restore/</guid>
        <description>&lt;p&gt;The value of a backup system is realized at restore time, often during an incident when every minute matters.&#xA;A traditional PITR procedure requires a long sequence of coupled manual steps: pause HA, stop PostgreSQL, prepare recovery settings, restore the backup, replay WAL, validate the target, rebuild metadata, and start the cluster again.&lt;/p&gt;&#xA;&lt;p&gt;Pigsty applies the same approach used by &lt;a href=&#34;https://pgsty.pro/docs/concept/iac/&#34;&gt;&lt;strong&gt;declarative configuration&lt;/strong&gt;&lt;/a&gt; to recovery: &lt;strong&gt;declare the recovery target&lt;/strong&gt;, then let the orchestration tools stop the cluster, restore the data, replay WAL, and return control to the operator.&lt;/p&gt;</description>
      </item>
    <item>
        <title>PITR Scenarios</title>
        <link>https://pgsty.pro/docs/concept/pitr/scenarios/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://pgsty.pro/docs/concept/pitr/scenarios/</guid>
        <description>&lt;p&gt;During an incident, the most expensive resource is often &lt;strong&gt;decision time&lt;/strong&gt;. Pigsty can orchestrate the mechanical recovery steps, but an operator must still answer three questions: &lt;strong&gt;what is the target, should recovery be in place or into a clone, and how will the result be validated?&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Read and rehearse this framework before an incident.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;decision-framework&#34;&gt;Decision Framework&#xA;&lt;/h2&gt;&#xA;&lt;div class=&#34;td-table-scroll td-table-scroll--full td-table-scroll--static&#34;&gt;&#xA;&lt;table class=&#34;full-width&#34;&gt;&#xA;  &lt;thead&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Scenario&lt;/th&gt;&#xA;      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Typical problem&lt;/th&gt;&#xA;      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Recommended workflow&lt;/th&gt;&#xA;      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Target&lt;/th&gt;&#xA;    &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;Accidental DML&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;DELETE&lt;/code&gt; or &lt;code&gt;UPDATE&lt;/code&gt; affects the wrong rows&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;Clone, validate, then copy back data&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;time&lt;/code&gt; / &lt;code&gt;xid&lt;/code&gt;&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;Dropped table, schema, or database&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;DROP&lt;/code&gt; or an incorrect migration&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;Clone, validate, then copy back objects&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;time&lt;/code&gt; / &lt;code&gt;name&lt;/code&gt;&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;Defective release or batch corruption&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;Software writes incorrect data for a period&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;Clone and compare before choosing repair or cutover&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;time&lt;/code&gt; / &lt;code&gt;xid&lt;/code&gt;&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;Audit, investigation, or forensics&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;Inspect historical state&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;Clone and hold at the target for inspection&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;time&lt;/code&gt; / &lt;code&gt;lsn&lt;/code&gt;&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;Whole-cluster or site loss&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;Hosts or storage are gone or encrypted&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;Recover in place on replacement infrastructure&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;default&lt;/code&gt; / &lt;code&gt;time&lt;/code&gt;&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;p&gt;Two principles apply throughout:&lt;/p&gt;</description>
      </item>
    <item>
        <title>Conf Templates</title>
        <link>https://pgsty.pro/docs/concept/iac/template/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://pgsty.pro/docs/concept/iac/template/</guid>
        <description>&lt;p&gt;In Pigsty, deployment blueprint details are defined by the &lt;a href=&#34;https://pgsty.pro/docs/setup/config/&#34;&gt;&lt;strong&gt;inventory&lt;/strong&gt;&lt;/a&gt;, which is the &lt;a href=&#34;https://github.com/pgsty/pigsty/blob/main/pigsty.yml&#34;&gt;&lt;strong&gt;&lt;code&gt;pigsty.yml&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt; configuration file. You can customize it through declarative configuration.&lt;/p&gt;&#xA;&lt;p&gt;However, writing configuration files directly can be daunting for new users. To address this, we provide some ready-to-use configuration templates covering common usage scenarios.&lt;/p&gt;&#xA;&lt;p&gt;Each template is a predefined &lt;code&gt;pigsty.yml&lt;/code&gt; configuration file containing reasonable defaults suitable for specific scenarios.&lt;/p&gt;&#xA;&lt;p&gt;You can choose a template as your customization starting point, then modify it as needed to meet your specific requirements.&lt;/p&gt;</description>
      </item>
    <item>
        <title>Use CMDB as Config Inventory</title>
        <link>https://pgsty.pro/docs/concept/iac/cmdb/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://pgsty.pro/docs/concept/iac/cmdb/</guid>
        <description>&lt;p&gt;Pigsty allows you to use a PostgreSQL &lt;strong&gt;metabase&lt;/strong&gt; as a dynamic configuration source, replacing static YAML configuration files for more powerful configuration management capabilities.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;overview&#34;&gt;Overview&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;CMDB&lt;/strong&gt; (Configuration Management Database) is a method of storing configuration information in a database for management.&lt;/p&gt;&#xA;&lt;p&gt;In Pigsty, the default configuration source is a static YAML file &lt;code&gt;pigsty.yml&lt;/code&gt;,&#xA;which serves as Ansible&amp;rsquo;s &lt;a href=&#34;https://pgsty.pro/docs/concept/iac/inventory/&#34;&gt;&lt;strong&gt;inventory&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;This approach is simple and direct, but when infrastructure scales and requires complex, fine-grained management and external integration, a single static file becomes insufficient.&lt;/p&gt;</description>
      </item>
    <item>
        <title>Monitoring System</title>
        <link>https://pgsty.pro/docs/concept/monitor/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://pgsty.pro/docs/concept/monitor/</guid>
        <description>&lt;p&gt;Pigsty&amp;rsquo;s monitoring system has three pillars—metrics, logs, and alerting—and is available out of the box. Logs and alerts are also important inputs for &lt;a href=&#34;https://pgsty.pro/docs/concept/sec/data/#audit-and-traceability&#34;&gt;&lt;strong&gt;audit and traceability&lt;/strong&gt;&lt;/a&gt;.&#xA;It can monitor clusters managed by Pigsty, existing PostgreSQL clusters, and external RDS services.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;monitoring-targets&#34;&gt;Monitoring Targets&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Pigsty monitoring covers these core targets:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;PostgreSQL clusters and instances (SQL performance, connections, replication, transactions, checkpoints, WAL)&lt;/li&gt;&#xA;&lt;li&gt;Infrastructure components (Grafana, VictoriaMetrics, Alertmanager, Nginx, etc.)&lt;/li&gt;&#xA;&lt;li&gt;Host nodes (CPU, memory, disk, network, kernel)&lt;/li&gt;&#xA;&lt;li&gt;Key middleware (ETCD, MINIO, REDIS, JUICE, VIBE, etc.)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;technology-stack&#34;&gt;Technology Stack&#xA;&lt;/h2&gt;&#xA;&lt;div class=&#34;td-table-scroll td-table-scroll--full td-table-scroll--static&#34;&gt;&#xA;&lt;table class=&#34;full-width&#34;&gt;&#xA;  &lt;thead&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Component&lt;/th&gt;&#xA;      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Purpose&lt;/th&gt;&#xA;    &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;&lt;a href=&#34;https://pgsty.pro/docs/infra/admin/grafana/&#34;&gt;&lt;strong&gt;Grafana&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;Visualization dashboards, unified entry point, alert views&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;&lt;a href=&#34;https://pgsty.pro/docs/infra/&#34;&gt;&lt;strong&gt;VictoriaMetrics&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;Time-series metric ingestion, storage, and query&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;&lt;a href=&#34;https://pgsty.pro/docs/infra/&#34;&gt;&lt;strong&gt;VictoriaLogs&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;Structured log ingestion, indexing, and search&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;&lt;a href=&#34;https://pgsty.pro/docs/infra/monitor/&#34;&gt;&lt;strong&gt;VMAlert + Alertmanager&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;Alert rule evaluation and notification delivery&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;&lt;a href=&#34;https://pgsty.pro/docs/pgsql/monitor/&#34;&gt;&lt;strong&gt;Exporter / Agent&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;Database/system metric exposure and log forwarding&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;onboarding-modes&#34;&gt;Onboarding Modes&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Pigsty supports three monitoring onboarding modes:&lt;/p&gt;</description>
      </item>
    <item>
        <title>Service Access</title>
        <link>https://pgsty.pro/docs/concept/ha/svc/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://pgsty.pro/docs/concept/ha/svc/</guid>
        <description>&lt;blockquote&gt;&#xA;&lt;p&gt;Split read and write operations, route traffic correctly, and deliver PostgreSQL cluster capabilities reliably.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://pgsty.pro/docs/concept/ha/svc/#service-overview&#34;&gt;Service&lt;/a&gt; is an abstraction: it represents the form in which database clusters expose their capabilities externally, encapsulating underlying cluster details.&lt;/p&gt;&#xA;&lt;p&gt;Services are crucial for &lt;a href=&#34;https://pgsty.pro/docs/concept/ha/svc/#access-services&#34;&gt;stable access&lt;/a&gt; in production environments, showing their value during automatic failover in &lt;a href=&#34;https://pgsty.pro/docs/concept/ha/&#34;&gt;high availability&lt;/a&gt; clusters. &lt;a href=&#34;https://pgsty.pro/docs/concept/ha/svc/#personal-users&#34;&gt;Personal users&lt;/a&gt; typically don&amp;rsquo;t need to worry about this concept.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;personal-users&#34;&gt;Personal Users&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;The concept of &amp;ldquo;service&amp;rdquo; is for production environments. Personal users with single-node clusters can skip the complexity and directly use instance names or IP addresses to access the database.&lt;/p&gt;</description>
      </item>
    <item>
        <title>Security and Compliance</title>
        <link>https://pgsty.pro/docs/concept/sec/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://pgsty.pro/docs/concept/sec/</guid>
        <description>&lt;p&gt;The database is usually the most sensitive component in an information system: it stores the most valuable data, so attacks and failures can have the most serious consequences.&#xA;Database security is not a feature that can be enabled with one switch. It is the combined answer to a series of questions: Who can connect? What can they do after connecting? Can traffic be intercepted? Are operations recorded? Can damaged, lost, or deleted data be recovered?&lt;/p&gt;</description>
      </item>
    <item>
        <title>Security Model</title>
        <link>https://pgsty.pro/docs/concept/sec/level/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://pgsty.pro/docs/concept/sec/level/</guid>
        <description>&lt;p&gt;Before examining individual security features, answer two more fundamental questions: &lt;strong&gt;Where is the root of trust?&lt;/strong&gt; and &lt;strong&gt;How many defensive layers exist?&lt;/strong&gt;&#xA;The first determines what deserves the strongest protection. The second determines what remains when one layer fails.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;&lt;span id=&#34;overview&#34;&gt;&lt;/span&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;trust-boundaries&#34;&gt;Trust Boundaries&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Pigsty is an Ansible-based declarative deployment system. Like other control-plane systems, its &lt;a href=&#34;https://pgsty.pro/docs/concept/arch/node/#admin-node&#34;&gt;&lt;strong&gt;admin node&lt;/strong&gt;&lt;/a&gt; is the control plane and the node that requires the strongest protection.&lt;/p&gt;</description>
      </item>
    <item>
        <title>Authentication</title>
        <link>https://pgsty.pro/docs/concept/sec/auth/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://pgsty.pro/docs/concept/sec/auth/</guid>
        <description>&lt;p&gt;PostgreSQL uses &lt;code&gt;pg_hba.conf&lt;/code&gt; for &lt;strong&gt;Host-Based Authentication&lt;/strong&gt;: who may connect, from where, to which database, and how they must prove their identity.&lt;/p&gt;&#xA;&lt;p&gt;The mechanism is powerful, but expensive to maintain manually across a cluster. Primary and replica instances may require different rules, and every instance stores its own configuration in the data directory.&#xA;Without a common declaration and refresh process, rules can drift between instances.&lt;/p&gt;&#xA;&lt;p&gt;Pigsty applies the same &lt;a href=&#34;https://pgsty.pro/docs/concept/iac/&#34;&gt;&lt;strong&gt;declarative configuration&lt;/strong&gt;&lt;/a&gt; model here: HBA rules are part of the inventory and are rendered and distributed consistently by playbooks.&lt;/p&gt;</description>
      </item>
    <item>
        <title>Access Control</title>
        <link>https://pgsty.pro/docs/concept/sec/ac/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://pgsty.pro/docs/concept/sec/ac/</guid>
        <description>&lt;p&gt;&lt;a href=&#34;https://pgsty.pro/docs/concept/sec/auth/&#34;&gt;&lt;strong&gt;Authentication&lt;/strong&gt;&lt;/a&gt; answers &amp;ldquo;Who are you?&amp;rdquo; Authorization answers &amp;ldquo;What may you do?&amp;rdquo;&lt;/p&gt;&#xA;&lt;p&gt;Privilege failures rarely result from a lack of mechanisms—PostgreSQL &lt;code&gt;GRANT&lt;/code&gt; and &lt;code&gt;REVOKE&lt;/code&gt; are sufficiently precise. The usual problem is the absence of conventions that are applied by default:&#xA;an application account is made the owner at launch, temporary superuser access is not revoked after troubleshooting, or grants are missed when new tables are created and cause failures in production.&lt;/p&gt;</description>
      </item>
    <item>
        <title>Encrypted Communication</title>
        <link>https://pgsty.pro/docs/concept/sec/ca/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://pgsty.pro/docs/concept/sec/ca/</guid>
        <description>&lt;p&gt;TLS can provide three separate protections: &lt;strong&gt;transport encryption&lt;/strong&gt;, &lt;strong&gt;server authentication&lt;/strong&gt;, and &lt;strong&gt;client authentication&lt;/strong&gt;. Each must be configured independently. Enabling server-side TLS does not mean the client verifies the server identity, nor does it mean the server requires a client certificate.&lt;/p&gt;&#xA;&lt;p&gt;The main operational cost of TLS is not the encryption algorithm but certificate issuance, distribution, trust, and rotation. Without centralized management, internal services often encrypt traffic while skipping certificate verification—or remain on plaintext connections.&lt;/p&gt;</description>
      </item>
    <item>
        <title>Data Security</title>
        <link>https://pgsty.pro/docs/concept/sec/data/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://pgsty.pro/docs/concept/sec/data/</guid>
        <description>&lt;p&gt;&lt;a href=&#34;https://pgsty.pro/docs/concept/sec/level/#network-boundaries&#34;&gt;&lt;strong&gt;Network boundaries&lt;/strong&gt;&lt;/a&gt;, &lt;a href=&#34;https://pgsty.pro/docs/concept/sec/auth/&#34;&gt;&lt;strong&gt;authentication&lt;/strong&gt;&lt;/a&gt;, and &lt;a href=&#34;https://pgsty.pro/docs/concept/sec/ac/&#34;&gt;&lt;strong&gt;access control&lt;/strong&gt;&lt;/a&gt; reduce the likelihood of an incident. When hardware fails, credentials leak, or an operator makes a mistake, data-layer controls must limit the impact and support recovery.&lt;/p&gt;&#xA;&lt;p&gt;Data security answers four questions: Is the data &lt;strong&gt;intact&lt;/strong&gt;? Can it be &lt;strong&gt;recovered&lt;/strong&gt;? If copied, does it remain &lt;strong&gt;confidential&lt;/strong&gt;? Can you determine &lt;strong&gt;what happened&lt;/strong&gt;?&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;&lt;span id=&#34;data-integrity&#34;&gt;&lt;/span&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;integrity&#34;&gt;Integrity&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Bad disk sectors, memory bit flips, and storage firmware defects can cause &lt;strong&gt;silent data corruption&lt;/strong&gt;: the data is damaged without an immediate error.&#xA;Pigsty enables page checksums by default (&lt;a href=&#34;https://pgsty.pro/docs/pgsql/param/#pg_checksum&#34;&gt;&lt;code&gt;pg_checksum&lt;/code&gt;&lt;/a&gt;: &lt;code&gt;true&lt;/code&gt;).&#xA;The cluster is initialized with &lt;code&gt;data-checksums&lt;/code&gt;, so PostgreSQL calculates a checksum when writing a page and verifies it when reading.&lt;/p&gt;</description>
      </item>
    <item>
        <title>Compliance</title>
        <link>https://pgsty.pro/docs/concept/sec/compliance/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://pgsty.pro/docs/concept/sec/compliance/</guid>
        <description>&lt;p&gt;Compliance is not a product you can buy. It is a state that must be demonstrated continuously through three elements:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Configuration:&lt;/strong&gt; whether security controls are enabled. Pigsty directly provides this part.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Process:&lt;/strong&gt; access approval, change management, recovery exercises, and related procedures. The organization must establish these.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Evidence:&lt;/strong&gt; records showing that configuration and process remain effective. Pigsty&amp;rsquo;s &lt;a href=&#34;https://pgsty.pro/docs/concept/iac/inventory/&#34;&gt;&lt;strong&gt;inventory&lt;/strong&gt;&lt;/a&gt;, runtime logs, and &lt;a href=&#34;https://pgsty.pro/docs/concept/monitor/&#34;&gt;&lt;strong&gt;monitoring system&lt;/strong&gt;&lt;/a&gt; can provide part of this evidence.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;This page begins with a pre-launch hardening checklist and then maps Pigsty security capabilities to common compliance frameworks.&#xA;The mappings support architecture and gap analysis; they are not an MLPS assessment conclusion, a SOC 2 audit opinion, or legal advice.&lt;/p&gt;</description>
      </item>
    <item>
        <title>Concepts</title>
        <link>https://pgsty.pro/docs/concept/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://pgsty.pro/docs/concept/</guid>
        <description>&lt;p&gt;Pigsty is a portable, extensible open-source PostgreSQL distribution for building production-grade database services in local environments with declarative configuration and automation. It has a vast ecosystem providing a complete set of tools, scripts, and best practices to bring PostgreSQL to enterprise-grade RDS service levels.&lt;/p&gt;&#xA;&lt;p&gt;Pigsty&amp;rsquo;s name comes from &lt;strong&gt;P&lt;/strong&gt;ostgreSQL &lt;strong&gt;I&lt;/strong&gt;n &lt;strong&gt;G&lt;/strong&gt;reat &lt;strong&gt;STY&lt;/strong&gt;le, also understood as &lt;strong&gt;P&lt;/strong&gt;ostgres, &lt;strong&gt;I&lt;/strong&gt;nfras, &lt;strong&gt;G&lt;/strong&gt;raphics, &lt;strong&gt;S&lt;/strong&gt;ervice, &lt;strong&gt;T&lt;/strong&gt;oolbox, it&amp;rsquo;s all &lt;strong&gt;Y&lt;/strong&gt;ours—a self-hosted PostgreSQL solution with graphical monitoring that&amp;rsquo;s all yours. You can find the source code on &lt;a href=&#34;https://github.com/pgsty/pigsty&#34;&gt;&lt;strong&gt;GitHub&lt;/strong&gt;&lt;/a&gt;, visit the &lt;a href=&#34;https://pigsty.io&#34;&gt;&lt;strong&gt;official documentation&lt;/strong&gt;&lt;/a&gt; for more information, or experience the &lt;a href=&#34;https://pgsty.pro/docs/setup/webui/&#34;&gt;&lt;strong&gt;Web UI&lt;/strong&gt;&lt;/a&gt; in the &lt;a href=&#34;https://demo.pigsty.io&#34;&gt;&lt;strong&gt;online demo&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;</description>
      </item>
    <item>
        <title>PostgreSQL Mongo Mode</title>
        <link>https://pgsty.pro/docs/conf/mongo/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://pgsty.pro/docs/conf/mongo/</guid>
        <description>&lt;p&gt;The &lt;code&gt;mongo&lt;/code&gt; configuration template is a &lt;strong&gt;PostgreSQL deployment mode&lt;/strong&gt;, not an independent Pigsty module. It combines:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;PostgreSQL 18 managed by the standard &lt;code&gt;PGSQL&lt;/code&gt; module&lt;/li&gt;&#xA;&lt;li&gt;The &lt;code&gt;documentdb&lt;/code&gt; extension and its required preload libraries&lt;/li&gt;&#xA;&lt;li&gt;A stateless FerretDB proxy deployed with Pigsty&amp;rsquo;s Docker APP workflow&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;All data, high availability, backup, monitoring, and lifecycle management remain PostgreSQL responsibilities. FerretDB only provides the MongoDB wire-compatible endpoint.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;quick-start&#34;&gt;Quick Start&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;The default template is a single-node deployment on &lt;code&gt;10.10.10.10&lt;/code&gt;. FerretDB listens on loopback by default.&lt;/p&gt;</description>
      </item>
    <item>
        <title>Backup Mechanism</title>
        <link>https://pgsty.pro/docs/pgsql/backup/mechanism/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://pgsty.pro/docs/pgsql/backup/mechanism/</guid>
        <description>&lt;p&gt;Pigsty&amp;rsquo;s backup and restore operations ultimately execute &lt;a href=&#34;https://pigsty.io/docs/pgbackrest/&#34;&gt;&lt;strong&gt;pgBackRest&lt;/strong&gt;&lt;/a&gt; commands. Using them safely requires both pgBackRest&amp;rsquo;s model and the mapping from Pigsty&amp;rsquo;s orchestration layers to native options.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;core-pgbackrest-concepts&#34;&gt;Core pgBackRest Concepts&#xA;&lt;/h2&gt;&#xA;&lt;h3 id=&#34;stanza-the-clusters-backup-identity&#34;&gt;Stanza: the Cluster&amp;rsquo;s Backup Identity&#xA;&lt;/h3&gt;&#xA;&lt;p&gt;A &lt;strong&gt;stanza&lt;/strong&gt; names one PostgreSQL backup configuration and isolates that cluster inside a repository. Pigsty maps it directly from &lt;a href=&#34;https://pgsty.pro/docs/pgsql/param/#pg_cluster&#34;&gt;&lt;strong&gt;&lt;code&gt;pg_cluster&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt;: the &lt;code&gt;pg-meta&lt;/code&gt; stanza stores data under &lt;code&gt;backup/pg-meta/&lt;/code&gt; and &lt;code&gt;archive/pg-meta/&lt;/code&gt;, so several clusters can share one repository.&lt;/p&gt;</description>
      </item>
    <item>
        <title>HA Drill: Handling 2-of-3 Node Failure</title>
        <link>https://pgsty.pro/docs/pgsql/tutorial/drill/</link>
        <pubDate>Sat, 11 Jan 2025 00:00:00 +0000</pubDate>
        
        <guid>https://pgsty.pro/docs/pgsql/tutorial/drill/</guid>
        <description>&lt;p&gt;If a classic 3-node HA deployment experiences simultaneous failure of two nodes (majority), the system typically cannot complete automatic failover and requires manual intervention.&lt;/p&gt;&#xA;&lt;p&gt;First, assess the status of the other two servers. If they can be brought up quickly, prioritize recovering those two servers. Otherwise, enter the &lt;strong&gt;Emergency Recovery Procedure&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;The Emergency Recovery Procedure assumes your admin node has failed&lt;/strong&gt; and only a single regular database node survives. In this case, the fastest recovery process is:&lt;/p&gt;</description>
      </item>
    <item>
        <title>PostgreSQL</title>
        <link>https://pgsty.pro/docs/pgsql/kernel/postgres/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://pgsty.pro/docs/pgsql/kernel/postgres/</guid>
        <description>&lt;p&gt;&lt;a href=&#34;https://www.postgresql.org/&#34;&gt;PostgreSQL&lt;/a&gt; is the world&amp;rsquo;s most advanced and popular open-source database.&lt;/p&gt;&#xA;&lt;p&gt;Pigsty installs PostgreSQL 18 by default, supports PostgreSQL 14 ~ 18, and provides 575 PG extensions.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;quick-start&#34;&gt;Quick Start&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://pgsty.pro/docs/setup/install/&#34;&gt;&lt;strong&gt;Install&lt;/strong&gt;&lt;/a&gt; Pigsty using the &lt;a href=&#34;https://github.com/pgsty/pigsty/blob/main/conf/pgsql.yml&#34;&gt;&lt;code&gt;pgsql&lt;/code&gt;&lt;/a&gt; configuration template.&lt;/p&gt;&#xA;&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-84a1449b-fence-0&#34; data-td-code data-td-code-auto-id&#xA;     data-td-language=&#34;bash&#34; data-td-line-count=&#34;2&#34;&gt;&#xA;  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-84a1449b-fence-0-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./configure -c pgsql     &lt;span class=&#34;c1&#34;&gt;# Use postgres kernel&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./deploy.yml             &lt;span class=&#34;c1&#34;&gt;# Deploy the Pigsty core chain with native PostgreSQL&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Most &lt;a href=&#34;https://pgsty.pro/docs/conf/&#34;&gt;configuration templates&lt;/a&gt; use PostgreSQL kernel by default, for example:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/pgsty/pigsty/blob/main/conf/meta.yml&#34;&gt;&lt;code&gt;meta&lt;/code&gt;&lt;/a&gt; : &lt;strong&gt;Default&lt;/strong&gt;, postgres with core extensions (vector, postgis, timescale)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/pgsty/pigsty/blob/main/conf/rich.yml&#34;&gt;&lt;code&gt;rich&lt;/code&gt;&lt;/a&gt; : postgres with all extensions installed&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/pgsty/pigsty/blob/main/conf/slim.yml&#34;&gt;&lt;code&gt;slim&lt;/code&gt;&lt;/a&gt; : postgres only, no monitoring infrastructure&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/pgsty/pigsty/blob/main/conf/ha/full.yml&#34;&gt;&lt;code&gt;ha/full&lt;/code&gt;&lt;/a&gt; : 4-node sandbox for HA demonstration&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/pgsty/pigsty/blob/main/conf/pgsql.yml&#34;&gt;&lt;code&gt;pgsql&lt;/code&gt;&lt;/a&gt; : minimal postgres kernel configuration example&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;configuration&#34;&gt;Configuration&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Vanilla PostgreSQL kernel requires no special adjustments:&lt;/p&gt;</description>
      </item>
    <item>
        <title>Supabase</title>
        <link>https://pgsty.pro/docs/pgsql/kernel/supabase/</link>
        <pubDate>Sun, 23 Jun 2024 00:00:00 +0000</pubDate>
        
        <guid>https://pgsty.pro/docs/pgsql/kernel/supabase/</guid>
        <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://supabase.com/&#34;&gt;Supabase&lt;/a&gt; — Build in a weekend, Scale to millions&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Supabase is an open-source Firebase alternative that wraps PostgreSQL and provides authentication, out-of-the-box APIs, edge functions, real-time subscriptions, object storage, and vector embedding capabilities.&#xA;This is a low-code all-in-one backend platform that lets you skip most backend development work, requiring only database design and frontend knowledge to quickly ship products!&lt;/p&gt;&#xA;&lt;p&gt;Supabase&amp;rsquo;s motto is: &amp;ldquo;&lt;strong&gt;Build in a weekend, Scale to millions&lt;/strong&gt;&amp;rdquo;. Indeed, Supabase is &lt;a href=&#34;https://supabase.com/pricing&#34;&gt;extremely cost-effective&lt;/a&gt; at small to micro scales (4c8g), like a cyber bodhisattva.&#xA;— But when you really scale to millions of users — you should seriously consider self-hosting Supabase — whether for functionality, performance, or cost considerations.&lt;/p&gt;</description>
      </item>
    <item>
        <title>Deploy HA Citus Cluster</title>
        <link>https://pgsty.pro/docs/pgsql/tutorial/citus/</link>
        <pubDate>Sat, 11 Jan 2025 00:00:00 +0000</pubDate>
        
        <guid>https://pgsty.pro/docs/pgsql/tutorial/citus/</guid>
        <description>&lt;p&gt;Citus is a PostgreSQL extension that transforms PostgreSQL into a distributed database, enabling horizontal scaling across multiple nodes to handle large amounts of data and queries.&lt;/p&gt;&#xA;&lt;p&gt;Patroni v3.0+ provides native high-availability support for Citus, simplifying the setup of Citus clusters. Pigsty also provides native support for this.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://docs.citusdata.com/en/stable/get_started/what_is_citus.html&#34;&gt;What is Citus&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://patroni.readthedocs.io/en/latest/citus.html&#34;&gt;Patroni Citus Support&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;td-callout td-callout--note&#34; role=&#34;note&#34;&gt;&#xA;  &lt;div class=&#34;td-callout__title&#34;&gt;&lt;i class=&#34;td-callout__icon fa-solid fa-circle-info&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&lt;span class=&#34;td-callout__label&#34;&gt;Note&lt;/span&gt;&lt;/div&gt;&#xA;  &lt;div class=&#34;td-callout__body&#34;&gt;&#xA;&lt;p&gt;Citus 13.x supports PostgreSQL 18, 17, 16, 15, and 14. The Pigsty extension repository provides Citus ARM64 packages.&lt;/p&gt;</description>
      </item>
    <item>
        <title>Babelfish</title>
        <link>https://pgsty.pro/docs/pgsql/kernel/babelfish/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://pgsty.pro/docs/pgsql/kernel/babelfish/</guid>
        <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://babelfishpg.org/&#34;&gt;Babelfish&lt;/a&gt; is a PostgreSQL-based SQL Server compatibility layer, open-sourced by AWS.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;overview&#34;&gt;Overview&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Pigsty lets you deploy Babelfish in &lt;code&gt;mssql&lt;/code&gt; mode and provide, on top of PostgreSQL:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;SQL Server wire protocol compatibility (TDS, &lt;code&gt;1433&lt;/code&gt;)&lt;/li&gt;&#xA;&lt;li&gt;T-SQL compatibility&lt;/li&gt;&#xA;&lt;li&gt;Unified integration with Pigsty capabilities (HA, backup, monitoring, IaC)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;In Pigsty v4, Babelfish supports &lt;strong&gt;PostgreSQL 17/18&lt;/strong&gt;. The default template uses &lt;code&gt;pg_version: 17&lt;/code&gt;, and Babelfish is part of Pigsty&amp;rsquo;s standard delivery path with support for all Linux platforms.&lt;/p&gt;</description>
      </item>
    <item>
        <title>Percona</title>
        <link>https://pgsty.pro/docs/pgsql/kernel/percona/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://pgsty.pro/docs/pgsql/kernel/percona/</guid>
        <description>&lt;p&gt;&lt;a href=&#34;https://www.percona.com/postgresql/software/postgresql-distribution&#34;&gt;Percona Postgres&lt;/a&gt; is a patched Postgres kernel with &lt;a href=&#34;https://docs.percona.com/pg-tde/index.html&#34;&gt;&lt;code&gt;pg_tde&lt;/code&gt;&lt;/a&gt; (Transparent Data Encryption) extension.&lt;/p&gt;&#xA;&lt;p&gt;Starting with v4.4.0, Pigsty packages Percona PostgreSQL under the private &lt;code&gt;/usr/pgtde-$v&lt;/code&gt;; v4.5.0 keeps this layout&#xA;prefix (&lt;code&gt;/usr/pgtde-18&lt;/code&gt; for PostgreSQL 18). The &lt;code&gt;pgtde&lt;/code&gt; package alias installs&#xA;both the kernel package and its contrib package, including &lt;code&gt;pg_tde&lt;/code&gt;, PostGIS,&#xA;pgvector, wal2json, pg_repack, pgaudit, and pg_stat_monitor.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://andreas.scherbaum.la/post/2025-06-30_performance-test-for-percona-transparent-data-encryption-tde/&#34;&gt;Performance Test for Percona Transparent Data Encryption (TDE)&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;quick-start&#34;&gt;Quick Start&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Use Pigsty&amp;rsquo;s &lt;a href=&#34;https://pgsty.pro/docs/setup/install/&#34;&gt;&lt;strong&gt;standard installation process&lt;/strong&gt;&lt;/a&gt; with the &lt;a href=&#34;https://github.com/pgsty/pigsty/blob/main/conf/pgtde.yml&#34;&gt;&lt;code&gt;pgtde&lt;/code&gt;&lt;/a&gt; configuration template.&lt;/p&gt;</description>
      </item>
    <item>
        <title>openHalo</title>
        <link>https://pgsty.pro/docs/pgsql/kernel/openhalo/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://pgsty.pro/docs/pgsql/kernel/openhalo/</guid>
        <description>&lt;p&gt;&lt;a href=&#34;https://www.openhalo.org/&#34;&gt;OpenHalo&lt;/a&gt; is an open-source PostgreSQL kernel that provides MySQL wire-protocol compatibility.&lt;/p&gt;&#xA;&lt;p&gt;openHalo is based on PostgreSQL 14.18 and provides wire-level compatibility with MySQL 5.7.32-log / 8.0. Pigsty delivers it through &lt;code&gt;pg_mode: mysql&lt;/code&gt; and the &lt;code&gt;openhalo&lt;/code&gt; package alias.&lt;/p&gt;&#xA;&lt;p&gt;Pigsty supports OpenHalo deployment on all supported Linux platforms.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;RPM build spec: &lt;a href=&#34;https://github.com/pgsty/rpm/blob/main/rpmbuild/SPECS/openhalodb.spec&#34;&gt;github.com/pgsty/rpm/rpmbuild/specs/openhalodb.spec&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;DEB build spec: &lt;a href=&#34;https://github.com/pgsty/deb/tree/main/debbuild/openhalodb&#34;&gt;github.com/pgsty/deb/debbuild/openhalodb&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;quick-start&#34;&gt;Quick Start&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Use Pigsty&amp;rsquo;s &lt;a href=&#34;https://pgsty.pro/docs/setup/install/&#34;&gt;&lt;strong&gt;standard installation flow&lt;/strong&gt;&lt;/a&gt; with the &lt;a href=&#34;https://pgsty.pro/docs/conf/mysql/&#34;&gt;&lt;code&gt;mysql&lt;/code&gt;&lt;/a&gt; template.&lt;/p&gt;&#xA;&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-7cb98979-fence-0&#34; data-td-code data-td-code-auto-id&#xA;     data-td-language=&#34;bash&#34; data-td-line-count=&#34;3&#34;&gt;&#xA;  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-7cb98979-fence-0-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl -fsSL https://repo.pigsty.io/get &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; bash&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; ~/pigsty&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./configure -c mysql    &lt;span class=&#34;c1&#34;&gt;# Use MySQL (openHalo) template&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./deploy.yml            &lt;span class=&#34;c1&#34;&gt;# Install (change passwords in pigsty.yml before production use)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;cluster-config&#34;&gt;Cluster Config&#xA;&lt;/h2&gt;&#xA;&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-7cb98979-fence-1&#34; data-td-code data-td-code-auto-id&#xA;     data-td-language=&#34;yaml&#34; data-td-line-count=&#34;19&#34;&gt;&#xA;  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-7cb98979-fence-1-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;pg-meta&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;hosts&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;10.10.10.10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;{&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;pg_seq&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;1, pg_role&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;primary }&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;vars&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;pg_cluster&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;pg-meta&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;pg_users&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- {&lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;dbuser_meta ,password&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;DBUser.Meta   ,pgbouncer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;true ,roles&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;[dbrole_admin]    ,comment&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;pigsty admin user }&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- {&lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;dbuser_view ,password&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;DBUser.Viewer ,pgbouncer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;true ,roles&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;[dbrole_readonly] ,comment&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;read-only viewer for meta database }&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;pg_databases&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- {&lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;postgres, extensions&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;aux_mysql ]}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# mysql-compatible database&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- {&lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;meta ,baseline&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;cmdb.sql ,comment&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;pigsty meta database ,schemas&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;l&#34;&gt;pigsty]}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;pg_hba_rules&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- {&lt;span class=&#34;nt&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;dbuser_view , db&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;all ,addr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;infra ,auth&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;pwd ,title&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;allow grafana dashboard access cmdb from infra nodes&amp;#39;&lt;/span&gt;}&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;pg_crontab&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;00 01 * * * /pg/bin/pg-backup full&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# full backup at 1 AM daily&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# OpenHalo specific settings&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;pg_mode&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;mysql&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;pg_version&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;pg_packages&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;openhalo, pgsql-common ]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;OpenHalo provides a dedicated extension, &lt;code&gt;aux_mysql&lt;/code&gt;, which includes functions and types needed for MySQL compatibility. Enable it in the &lt;code&gt;postgres&lt;/code&gt; database to get full compatibility behavior.&lt;/p&gt;</description>
      </item>
    <item>
        <title>OrioleDB</title>
        <link>https://pgsty.pro/docs/pgsql/kernel/orioledb/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://pgsty.pro/docs/pgsql/kernel/orioledb/</guid>
        <description>&lt;p&gt;&lt;a href=&#34;https://orioledb.com/&#34;&gt;OrioleDB&lt;/a&gt; is a PostgreSQL storage engine extension that claims to provide 4x OLTP performance, no xid wraparound and table bloat issues, and &amp;ldquo;cloud-native&amp;rdquo; (data stored in S3) capabilities.&lt;/p&gt;&#xA;&lt;p&gt;Pigsty ships OrioleDB as a patched PostgreSQL kernel plus the &lt;a href=&#34;https://github.com/orioledb/orioledb&#34;&gt;OrioleDB extension&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;You can run OrioleDB as an RDS using Pigsty. Current packages support PostgreSQL 16, 17, and 18 on supported Linux platforms. &lt;code&gt;pg_mode&lt;/code&gt; still uses &lt;code&gt;oriole&lt;/code&gt; for the &lt;code&gt;/usr/oriole-$v&lt;/code&gt; install path, while the &lt;code&gt;orioledb&lt;/code&gt; package alias resolves to versioned kernel packages such as &lt;code&gt;orioledb-16&lt;/code&gt;, &lt;code&gt;orioledb-17&lt;/code&gt;, and &lt;code&gt;orioledb-18&lt;/code&gt;.&#xA;The current Pigsty package line is OrioleDB 1.8 beta16.&lt;/p&gt;</description>
      </item>
    <item>
        <title>Cloudberry</title>
        <link>https://pgsty.pro/docs/pgsql/kernel/cloudberry/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://pgsty.pro/docs/pgsql/kernel/cloudberry/</guid>
        <description>&lt;p&gt;&lt;a href=&#34;https://cloudberry.apache.org/&#34;&gt;Cloudberry&lt;/a&gt; is an open-source MPP data warehouse kernel derived from the Greenplum ecosystem, suitable for large-scale parallel analytics workloads.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;overview&#34;&gt;Overview&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;In Pigsty, Cloudberry uses &lt;code&gt;gpsql&lt;/code&gt; mode and shares the same identity model, monitoring logic, and directory conventions as Greenplum / MatrixDB.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Kernel package: &lt;code&gt;cloudberry&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Mode identifier: &lt;code&gt;pg_mode: gpsql&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Role flag: &lt;code&gt;gp_role: master | segment&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Current repo version: &lt;code&gt;Cloudberry 2.1.0&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Current main package version: DEB &lt;code&gt;2.1.0-2PIGSTY&lt;/code&gt;, RPM &lt;code&gt;2.1.0-3PIGSTY&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Default binary directory: &lt;code&gt;/usr/cloudberry&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The important boundary is this: Pigsty currently focuses on package delivery, node management, monitoring onboarding, access control, and configuration orchestration for Cloudberry.&#xA;For MPP cluster initialization, scale-out, rebalance, and other upstream-specific operational actions, you should still use the official Cloudberry toolchain.&lt;/p&gt;</description>
      </item>
    <item>
        <title>AgensGraph</title>
        <link>https://pgsty.pro/docs/pgsql/kernel/agensgraph/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://pgsty.pro/docs/pgsql/kernel/agensgraph/</guid>
        <description>&lt;p&gt;&lt;a href=&#34;https://github.com/skaiworldwide-oss/agensgraph&#34;&gt;AgensGraph&lt;/a&gt; is a property graph database kernel built on PostgreSQL, supporting openCypher queries and mixed Cypher/SQL workflows.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;overview&#34;&gt;Overview&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Pigsty integrates AgensGraph through &lt;code&gt;pg_mode: agens&lt;/code&gt; while preserving most of the standard PostgreSQL operational model.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Kernel package: &lt;code&gt;agensgraph&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Mode identifier: &lt;code&gt;pg_mode: agens&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Current template version: &lt;code&gt;AgensGraph 2.17.0&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Current version string: &lt;code&gt;PostgreSQL 17.10 (AgensGraph 2.17.0)&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Built-in template: &lt;code&gt;agens&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Typical use cases: graph relationship analysis, path queries, knowledge graphs, and risk/association analysis layered onto relational data&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;From the client side, AgensGraph still speaks the PostgreSQL wire protocol, so normal PostgreSQL clients, drivers, and connection pools can connect directly.&#xA;The real difference from vanilla PostgreSQL is not how you connect, but that the database now contains graph objects, Cypher syntax, and the &lt;code&gt;agtype&lt;/code&gt; data type.&lt;/p&gt;</description>
      </item>
    <item>
        <title>pgEdge</title>
        <link>https://pgsty.pro/docs/pgsql/kernel/pgedge/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://pgsty.pro/docs/pgsql/kernel/pgedge/</guid>
        <description>&lt;p&gt;&lt;a href=&#34;https://www.pgedge.com/&#34;&gt;&lt;strong&gt;pgEdge&lt;/strong&gt;&lt;/a&gt; is a distributed PostgreSQL distribution for edge scenarios, built on &lt;a href=&#34;https://docs.pgedge.com/spock-v5&#34;&gt;&lt;strong&gt;Spock&lt;/strong&gt;&lt;/a&gt; multi-master logical replication.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;overview&#34;&gt;Overview&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Pigsty integrates pgEdge through &lt;code&gt;pg_mode: pgedge&lt;/code&gt; and delivers it through the standard PostgreSQL cluster workflow:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;pgedge&lt;/code&gt;: a PG15, PG16, PG17, and PG18 compatible kernel; the template defaults to PG18&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://pigsty.io/ext/e/spock/&#34;&gt;&lt;code&gt;spock&lt;/code&gt;&lt;/a&gt;: Active-active multi-master logical replication&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://pigsty.io/ext/e/snowflake/&#34;&gt;&lt;code&gt;snowflake&lt;/code&gt;&lt;/a&gt;: Distributed unique sequences&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://pigsty.io/ext/e/lolor/&#34;&gt;&lt;code&gt;lolor&lt;/code&gt;&lt;/a&gt;: Large object logical replication compatibility layer&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The current Pigsty repository ships versioned pgEdge kernel packages for &lt;code&gt;pgedge-15&lt;/code&gt;, &lt;code&gt;pgedge-16&lt;/code&gt;, &lt;code&gt;pgedge-17&lt;/code&gt;, and &lt;code&gt;pgedge-18&lt;/code&gt;; the template defaults to &lt;code&gt;pg_version: 18&lt;/code&gt;. The &lt;code&gt;spock&lt;/code&gt;, &lt;code&gt;snowflake&lt;/code&gt;, and &lt;code&gt;lolor&lt;/code&gt; control files, SQL files, and shared libraries are bundled in the &lt;code&gt;pgedge-$v&lt;/code&gt; kernel package, so they are no longer listed as separate &lt;code&gt;pg_extensions&lt;/code&gt; packages to install.&#xA;From the client side, pgEdge is still PostgreSQL wire compatible, so &lt;code&gt;psql&lt;/code&gt;, JDBC/ODBC, DBeaver, and similar tools work as usual.&lt;/p&gt;</description>
      </item>
    <item>
        <title>DocumentDB</title>
        <link>https://pgsty.pro/docs/pgsql/kernel/documentdb/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://pgsty.pro/docs/pgsql/kernel/documentdb/</guid>
        <description>&lt;p&gt;&lt;a href=&#34;https://pigsty.io/ext/e/documentdb&#34;&gt;&lt;strong&gt;DocumentDB&lt;/strong&gt;&lt;/a&gt; is an open-source PostgreSQL document database extension maintained by Microsoft. &lt;a href=&#34;https://github.com/FerretDB/FerretDB&#34;&gt;&lt;strong&gt;FerretDB&lt;/strong&gt;&lt;/a&gt; is a stateless protocol translation proxy built on top of it.&#xA;Together, they expose a MongoDB wire-compatible endpoint from a standard PostgreSQL kernel: applications using MongoDB drivers can connect directly, while requests are translated into PostgreSQL operations.&lt;/p&gt;&#xA;&lt;p&gt;Unlike other kernel variants, this is not a standalone PostgreSQL fork. The data layer runs native PostgreSQL 16–18 and is managed by the standard &lt;code&gt;PGSQL&lt;/code&gt; module.&#xA;Persistence, transactions, high availability, backup, monitoring, and access control remain PostgreSQL responsibilities; FerretDB is deployed as a Pigsty Docker APP and handles only protocol translation.&lt;/p&gt;</description>
      </item>
    <item>
        <title>PG Kernels</title>
        <link>https://pgsty.pro/docs/pgsql/kernel/</link>
        <pubDate>Sun, 23 Jun 2024 00:00:00 +0000</pubDate>
        
        <guid>https://pgsty.pro/docs/pgsql/kernel/</guid>
        <description>&lt;p&gt;In Pigsty, you can replace the native PostgreSQL kernel with different PostgreSQL &amp;ldquo;flavors&amp;rdquo; to unlock specialized capabilities.&lt;/p&gt;&#xA;&lt;p&gt;Pigsty supports multiple PostgreSQL kernels and compatibility branches so you can get compatibility layers, multi-master replication, graph queries, MPP warehousing, transparent encryption, and more inside one operational framework.&lt;/p&gt;&#xA;&lt;p&gt;One thing to keep in mind is that not every kernel has the same delivery depth in Pigsty:&#xA;PostgreSQL, Citus, Babelfish, IvorySQL, PolarDB, AgensGraph, and pgEdge already have relatively clear templates and configuration paths;&#xA;Cloudberry and Greenplum, by contrast, are more often managed through &lt;code&gt;gpsql&lt;/code&gt; mode, and their MPP initialization plus scale-out operations are still better handled with upstream tooling.&lt;/p&gt;</description>
      </item>
    <item>
        <title>Citus</title>
        <link>https://pgsty.pro/docs/pgsql/kernel/citus/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://pgsty.pro/docs/pgsql/kernel/citus/</guid>
        <description>&lt;p&gt;Pigsty natively supports Citus. This is a distributed horizontal scaling extension based on the native PostgreSQL kernel.&lt;/p&gt;&#xA;&lt;img class=&#34;td-image&#34; src=&#34;https://pgsty.pro/img/pigsty/citus.jpg&#34; alt=&#34;Citus&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&lt;hr&gt;&#xA;&lt;h2 id=&#34;installation&#34;&gt;Installation&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Citus is a PostgreSQL &lt;a href=&#34;https://pgsty.pro/docs/pgsql/ext/&#34;&gt;extension plugin&lt;/a&gt; that can be installed and enabled on a native PostgreSQL cluster following the standard plugin installation process.&lt;/p&gt;&#xA;&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-87ea6f73-fence-0&#34; data-td-code data-td-code-auto-id&#xA;     data-td-language=&#34;bash&#34; data-td-line-count=&#34;1&#34;&gt;&#xA;  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-87ea6f73-fence-0-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./pgsql.yml -t pg_extension -e &lt;span class=&#34;s1&#34;&gt;&amp;#39;{&amp;#34;pg_extensions&amp;#34;:[&amp;#34;citus&amp;#34;]}&amp;#39;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;configuration&#34;&gt;Configuration&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;To define a citus cluster, you need to specify the following parameters:&lt;/p&gt;</description>
      </item>
    <item>
        <title>IvorySQL</title>
        <link>https://pgsty.pro/docs/pgsql/kernel/ivorysql/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://pgsty.pro/docs/pgsql/kernel/ivorysql/</guid>
        <description>&lt;p&gt;&lt;a href=&#34;https://www.ivorysql.org/&#34;&gt;IvorySQL&lt;/a&gt; is an open-source PostgreSQL kernel fork that aims to provide &amp;ldquo;Oracle compatibility&amp;rdquo; based on PG.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;overview&#34;&gt;Overview&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;The Pigsty PGSQL repository directly provides IvorySQL 5.4 packages compatible with PostgreSQL 18.4 across the currently supported EL, Debian, Ubuntu, and dual-architecture platforms.&#xA;Online installation uses Pigsty&amp;rsquo;s &lt;code&gt;pgsql&lt;/code&gt; repository; the Professional Edition also provides offline delivery for the corresponding platforms.&lt;/p&gt;&#xA;&lt;img class=&#34;td-image&#34; src=&#34;https://pgsty.pro/img/pigsty/ivory.jpg&#34; alt=&#34;IvorySQL&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&lt;p&gt;Pigsty&amp;rsquo;s &lt;code&gt;ivorysql&lt;/code&gt; package alias points to IvorySQL 5, compatible with PostgreSQL 18. Real package names are mapped by platform variables under &lt;code&gt;roles/node_id/vars/&lt;/code&gt;; for example, EL uses &lt;code&gt;ivorysql5&lt;/code&gt;, while Debian/Ubuntu uses &lt;code&gt;ivorysql-5&lt;/code&gt;.&lt;/p&gt;</description>
      </item>
    <item>
        <title>PolarDB PG</title>
        <link>https://pgsty.pro/docs/pgsql/kernel/polardb/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://pgsty.pro/docs/pgsql/kernel/polardb/</guid>
        <description>&lt;hr&gt;&#xA;&lt;h2 id=&#34;overview&#34;&gt;Overview&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Pigsty allows you to create PostgreSQL clusters with &amp;ldquo;domestic innovation qualification&amp;rdquo; credentials using PolarDB!&lt;/p&gt;&#xA;&lt;p&gt;PolarDB for PostgreSQL now uses PostgreSQL 17 as its base. The &lt;code&gt;polar&lt;/code&gt; template, default path, and extension notes in Pigsty have all been updated to PG17. Any client tool compatible with the PostgreSQL wire protocol can access PolarDB clusters.&lt;/p&gt;&#xA;&lt;p&gt;Pigsty&amp;rsquo;s PGSQL repository provides PolarDB PG open-source installation packages, but they are not downloaded to the local software repository during Pigsty installation.&lt;/p&gt;</description>
      </item>
    <item>
        <title>PolarDB Oracle</title>
        <link>https://pgsty.pro/docs/pgsql/kernel/polardb-o/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://pgsty.pro/docs/pgsql/kernel/polardb-o/</guid>
        <description>&lt;p&gt;Pigsty allows you to create PolarDB for Oracle clusters with &amp;ldquo;domestic innovation qualification&amp;rdquo; credentials using PolarDB!&lt;/p&gt;&#xA;&lt;p&gt;According to the &lt;a href=&#34;http://www.itsec.gov.cn/aqkkcp/cpgg/202312/t20231226_162074.html&#34;&gt;Security and Reliability Evaluation Results Announcement (No. 1, 2023)&lt;/a&gt;, Appendix 3, Centralized Database. PolarDB v2.0 is an autonomous, controllable, secure, and reliable domestic innovation database.&lt;/p&gt;&#xA;&lt;p&gt;PolarDB for Oracle is an Oracle-compatible version developed based on PolarDB for PostgreSQL. Both share the same kernel, distinguished by the &lt;code&gt;--compatibility-mode&lt;/code&gt; parameter.&lt;/p&gt;&#xA;&lt;p&gt;We collaborate with the Alibaba Cloud kernel team to provide a complete database solution based on PolarDB v2.0 kernel and Pigsty. Please contact sales for inquiries, or purchase on Alibaba Cloud Marketplace.&lt;/p&gt;</description>
      </item>
    <item>
        <title>Greenplum</title>
        <link>https://pgsty.pro/docs/pgsql/kernel/greenplum/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://pgsty.pro/docs/pgsql/kernel/greenplum/</guid>
        <description>&lt;p&gt;Pigsty supports deploying Greenplum clusters and its derivative distribution YMatrixDB, and provides the capability to integrate existing Greenplum deployments into Pigsty monitoring.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;overview&#34;&gt;Overview&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Greenplum / YMatrix cluster deployment capabilities are only available in the professional/enterprise editions and are not currently open source.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;installation&#34;&gt;Installation&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Pigsty provides installation packages for Greenplum 6 (@el7) and Greenplum 7 (@el8). Open source users can install and configure them manually.&lt;/p&gt;</description>
      </item>
    <item>
        <title>Neon</title>
        <link>https://pgsty.pro/docs/pgsql/kernel/neon/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://pgsty.pro/docs/pgsql/kernel/neon/</guid>
        <description>&lt;p&gt;&lt;a href=&#34;https://github.com/neondatabase/neon&#34;&gt;&lt;strong&gt;Neon&lt;/strong&gt;&lt;/a&gt; adopts a storage and compute separation architecture, providing seamless autoscaling, scale to zero, and unique database branching capabilities.&lt;/p&gt;&#xA;&lt;p&gt;Neon official website: &lt;a href=&#34;https://neon.tech/&#34;&gt;https://neon.tech/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Neon binaries are currently too large to include in the open-source package set. This support path remains in pilot stage; contact Pigsty sales if you need it.&lt;/p&gt;</description>
      </item>
    
  </channel>
</rss>
