<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>PGSQL on PIGSTY</title><link>https://pigsty.cc/module/pgsql/</link><description>Recent content in PGSQL on PIGSTY</description><generator>Hugo</generator><language>zh-CN</language><lastBuildDate>Mon, 04 May 2026 18:14:22 +0800</lastBuildDate><atom:link href="https://pigsty.cc/module/pgsql/index.xml" rel="self" type="application/rss+xml"/><item><title>被动故障切换</title><link>https://pigsty.cc/docs/concept/ha/failure/passive/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/concept/ha/failure/passive/</guid><description>&lt;div id="infographic-537dd2226714fc6c5830057e9f044ea1" class="infographic-container td-max-width-on-larger-screens"&gt;&lt;/div&gt;

&lt;script&gt;
(function() {
 var containerId = 'infographic-537dd2226714fc6c5830057e9f044ea1';
 var syntax = "````\ninfographic list-row-simple-horizontal-arrow\ndata\n title 租约过期故障切换流程\n desc 当整个节点宕机，Patroni 无法主动释放租约，只能等待 TTL 过期\n items\n - label 租约过期\n desc Patroni 失联，被动等待主库租约 TTL 过期\n icon mingcute/close-circle-fill\n - label 从库检测\n desc 从库从循环中醒来后发现租约过期，开始竞选\n icon mingcute/key-2-fill\n - label 抢锁提拔\n desc 从库相互比较并抢锁，胜利者提升自己的PG\n icon mingcute/radar-fill\n - label 健康检查\n desc HAPROXY 健康检查发现新主上线，分配流量\n icon mingcute/arrow-up-circle-fill\ntheme light\n palette antv\n````";

 function renderInfographic() {
 var dom = document.getElementById(containerId);
 if (!dom) { console.error('Infographic: container not found:', containerId); return; }
 try {
 var ig = new AntVInfographic.Infographic({
 container: '#' + containerId,
 width: dom.offsetWidth || '100%',
 height: 'auto',
 });
 ig.render(syntax);
 } catch (e) {
 console.error('Infographic render error:', e);
 dom.innerHTML = '&lt;pre style="color: red;"&gt;Infographic Error: ' + e.message + '&lt;/pre&gt;';
 }
 }

 
 if (typeof AntVInfographic !== 'undefined') {
 renderInfographic();
 } else if (!window._infographicLoading) {
 window._infographicLoading = true;
 window._infographicCallbacks = [renderInfographic];
 var script = document.createElement('script');
 script.src = '/js/infographic.min.js';
 script.onload = function() {
 window._infographicCallbacks.forEach(function(cb) { cb(); });
 };
 document.head.appendChild(script);
 } else {
 window._infographicCallbacks.push(renderInfographic);
 }
})();
&lt;/script&gt;

&lt;hr&gt;
&lt;h2 id="rto-时序图"&gt;RTO 时序图&lt;/h2&gt;
&lt;div id="echarts-44d24210b099c2088232bbd8c2371226" class="echarts-container td-max-width-on-larger-screens" style="height: 520px;"&gt;&lt;/div&gt;

&lt;script&gt;
(function() {
 var dom = document.getElementById('echarts-44d24210b099c2088232bbd8c2371226');
 if (!dom) return;

 
 window._echartsFns = window._echartsFns || {};

var fmt = function(params) { if (!params || !params.length || params[0].name === '') return ''; return '&lt;b&gt;' + params[0].name + '&lt;/b&gt;&lt;br/&gt;' + params.filter(p =&gt; p.value !== '-' &amp;&amp; p.value != null).map(p =&gt; p.marker + ' ' + p.seriesName + ': ' + p.value + 's').join('&lt;br/&gt;'); };

 window._echartsFns['fmt'] = fmt;
 var theme = document.documentElement.getAttribute('data-bs-theme') === 'dark' ? 'dark' : null;

 var chart = echarts.init(dom, theme);
 var optionsJson = {"grid":{"bottom":32,"left":64,"right":24,"top":40},"legend":{"data":["租约过期","从库检测","抢锁提拔","健康检查"],"itemGap":12,"top":0},"series":[{"barWidth":20,"data":[120,110,100,"-",60,55,50,"-",30,27,25,"-",20,17,15],"emphasis":{"focus":"series"},"itemStyle":{"color":"#e15759"},"name":"租约过期","stack":"main","type":"bar","z":2},{"data":[20,10,0,"-",10,5,0,"-",5,3,0,"-",5,3,0],"emphasis":{"focus":"series"},"itemStyle":{"color":"#edc949"},"name":"从库检测","stack":"main","type":"bar","z":2},{"data":[2,1,0,"-",2,1,0,"-",2,1,0,"-",2,1,0],"emphasis":{"focus":"series"},"itemStyle":{"color":"#59a14f"},"name":"抢锁提拔","stack":"main","type":"bar","z":2},{"data":[8,6,4,"-",6,5,3,"-",4,3,2,"-",2,2,1],"emphasis":{"focus":"series"},"itemStyle":{"color":"#4e79a7"},"name":"健康检查","stack":"main","type":"bar","z":2},{"barGap":"-100%","barWidth":20,"data":[150,127,104,"-",78,66,53,"-",41,34,27,"-",29,23,16],"emphasis":{"itemStyle":{"opacity":0}},"itemStyle":{"color":"#888","opacity":0},"name":"RTO总计","type":"bar","z":1},{"barGap":"-100%","barWidth":20,"data":[150,150,150,"-",90,90,90,"-",45,45,45,"-",30,30,30],"emphasis":{"itemStyle":{"color":"rgba(0,0,0,0.12)"}},"itemStyle":{"color":"rgba(0,0,0,0.08)"},"name":"RTO预算","type":"bar","z":0}],"tooltip":{"axisPointer":{"type":"shadow"},"formatter":"$fn:fmt","trigger":"axis"},"xAxis":{"axisLine":{"show":true},"axisTick":{"show":true},"max":160,"minorSplitLine":{"lineStyle":{"opacity":0.2,"type":"dotted"},"show":true},"minorTick":{"show":true,"splitNumber":5},"name":"秒","nameLocation":"end","splitLine":{"lineStyle":{"opacity":0.5,"type":"dashed"},"show":true},"type":"value"},"yAxis":{"axisLabel":{"fontFamily":"monospace","fontSize":10},"axisLine":{"show":true},"axisTick":{"show":true},"data":["wide-max","wide-avg","wide-min","","safe-max","safe-avg","safe-min","","norm-max","norm-avg","norm-min","","fast-max","fast-avg","fast-min"],"splitLine":{"show":false},"type":"category"}};

 
 function replaceFnRefs(obj) {
 if (typeof obj === 'string' &amp;&amp; obj.startsWith('$fn:')) {
 var fnName = obj.substring(4);
 return window._echartsFns[fnName];
 }
 if (Array.isArray(obj)) {
 return obj.map(replaceFnRefs);
 }
 if (obj &amp;&amp; typeof obj === 'object') {
 var result = {};
 for (var key in obj) {
 result[key] = replaceFnRefs(obj[key]);
 }
 return result;
 }
 return obj;
 }

 var options = replaceFnRefs(optionsJson);
 chart.setOption(options);

 
 window.addEventListener('resize', function() {
 chart.resize();
 });
 var observer = new MutationObserver(function(mutations) {
 mutations.forEach(function(mutation) {
 if (mutation.attributeName === 'data-bs-theme') {
 var newTheme = document.documentElement.getAttribute('data-bs-theme') === 'dark' ? 'dark' : null;
 chart.dispose();
 chart = echarts.init(dom, newTheme);
 chart.setOption(options);
 }
 });
 });
 observer.observe(document.documentElement, { attributes: true, attributeFilter: ['data-bs-theme'] });
})();
&lt;/script&gt;

&lt;hr&gt;
&lt;h2 id="故障模型"&gt;故障模型&lt;/h2&gt;
&lt;table class="full-width"&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th style="text-align: center"&gt;项目&lt;/th&gt;
 &lt;th style="text-align: center"&gt;最好&lt;/th&gt;
 &lt;th style="text-align: center"&gt;最坏&lt;/th&gt;
 &lt;th style="text-align: center"&gt;平均&lt;/th&gt;
 &lt;th style="text-align: left"&gt;说明&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td style="text-align: center"&gt;&lt;strong&gt;租约过期&lt;/strong&gt;&lt;/td&gt;
 &lt;td style="text-align: center"&gt;&lt;code&gt;ttl - loop&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: center"&gt;&lt;code&gt;ttl&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: center"&gt;&lt;code&gt;ttl - loop/2&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;最好：即将刷新时宕机&lt;br/&gt;最坏：刚刷新完就宕机&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: center"&gt;&lt;strong&gt;从库检测&lt;/strong&gt;&lt;/td&gt;
 &lt;td style="text-align: center"&gt;&lt;code&gt;0&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: center"&gt;&lt;code&gt;loop&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: center"&gt;&lt;code&gt;loop / 2&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;最好：恰好在检测点&lt;br/&gt;最坏：刚错过检测点&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: center"&gt;&lt;strong&gt;抢锁提拔&lt;/strong&gt;&lt;/td&gt;
 &lt;td style="text-align: center"&gt;&lt;code&gt;0&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: center"&gt;&lt;code&gt;2&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: center"&gt;&lt;code&gt;1&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;最好：直接抢锁提升&lt;br/&gt;最坏：API 超时+Promote&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: center"&gt;&lt;strong&gt;健康检查&lt;/strong&gt;&lt;/td&gt;
 &lt;td style="text-align: center"&gt;&lt;code&gt;(rise-1) × fastinter&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: center"&gt;&lt;code&gt;(rise-1) × fastinter + inter&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: center"&gt;&lt;code&gt;(rise-1) × fastinter + inter/2&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;最好：检查前状态变化&lt;br/&gt;最坏：检查后瞬间状态变化&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;被动故障与主动故障的核心区别&lt;/strong&gt;：&lt;/p&gt;</description></item><item><title>默认配置模板的参数优化策略说明</title><link>https://pigsty.cc/docs/pgsql/template/tune/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/pgsql/template/tune/</guid><description>&lt;p&gt;Pigsty 默认提供了四套场景化参数模板，可以通过 &lt;a href="https://pigsty.cc/docs/pgsql/param#pg_conf"&gt;&lt;strong&gt;&lt;code&gt;pg_conf&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt; 参数指定并使用。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://pigsty.cc/docs/pgsql/template/tiny"&gt;&lt;strong&gt;&lt;code&gt;tiny.yml&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt;：为小节点、虚拟机、小型演示优化（1-8核，1-16GB）&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pigsty.cc/docs/pgsql/template/oltp"&gt;&lt;strong&gt;&lt;code&gt;oltp.yml&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt;：为 OLTP 工作负载和延迟敏感应用优化（4C8GB+）（默认模板）&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pigsty.cc/docs/pgsql/template/olap"&gt;&lt;strong&gt;&lt;code&gt;olap.yml&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt;：为 OLAP 工作负载和吞吐量优化（4C8G+）&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pigsty.cc/docs/pgsql/template/crit"&gt;&lt;strong&gt;&lt;code&gt;crit.yml&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt;：为数据一致性和关键应用优化（4C8G+）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pigsty 会针对这四种默认场景，采取不同的参数优化策略，如下所示：&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="内存参数调整"&gt;内存参数调整&lt;/h2&gt;
&lt;p&gt;Pigsty 默认会检测系统的内存大小，并以此为依据设定最大连接数量与内存相关参数。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://pigsty.cc/docs/pgsql/param#pg_max_conn"&gt;&lt;strong&gt;&lt;code&gt;pg_max_conn&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt;：postgres 最大连接数，&lt;code&gt;auto&lt;/code&gt; 将使用不同场景下的推荐值&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pigsty.cc/docs/pgsql/param#pg_shared_buffer_ratio"&gt;&lt;strong&gt;&lt;code&gt;pg_shared_buffer_ratio&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt;：内存共享缓冲区比例，默认为 0.25&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;默认情况下，Pigsty 使用 25% 的内存作为 PostgreSQL 共享缓冲区，剩余的 75% 作为操作系统缓存。&lt;/p&gt;
&lt;p&gt;默认情况下，如果用户没有设置一个 &lt;a href="https://pigsty.cc/docs/pgsql/param#pg_max_conn"&gt;&lt;code&gt;pg_max_conn&lt;/code&gt;&lt;/a&gt; 最大连接数，Pigsty 会根据以下规则使用默认值：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;oltp: 500 (pgbouncer) / 1000 (postgres)&lt;/li&gt;
&lt;li&gt;crit: 500 (pgbouncer) / 1000 (postgres)&lt;/li&gt;
&lt;li&gt;tiny: 300&lt;/li&gt;
&lt;li&gt;olap: 300&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;其中对于 OLTP 与 CRIT 模版来说，如果服务没有指向 pgbouncer 连接池，而是直接连接 postgres 数据库，最大连接会翻倍至 1000 条。&lt;/p&gt;
&lt;p&gt;决定最大连接数后，&lt;code&gt;work_mem&lt;/code&gt; 会根据共享内存数量 / 最大连接数计算得到，并限定在 64MB ~ 1GB 的范围内。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{&lt;span class="l"&gt;% raw %}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{&lt;span class="l"&gt;% if pg_max_conn != &amp;#39;auto&amp;#39; and pg_max_conn|int &amp;gt;= 20 %}{% set pg_max_connections = pg_max_conn|int %}{% else %}{% if pg_default_service_dest|default(&amp;#39;postgres&amp;#39;) == &amp;#39;pgbouncer&amp;#39; %}{% set pg_max_connections = 500 %}{% else %}{% set pg_max_connections = 1000 %}{% endif %}{% endif %}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{&lt;span class="l"&gt;% set pg_max_prepared_transactions = pg_max_connections if &amp;#39;citus&amp;#39; in pg_libs else 0 %}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{&lt;span class="l"&gt;% set pg_max_locks_per_transaction = (2 * pg_max_connections)|int if &amp;#39;citus&amp;#39; in pg_libs or &amp;#39;timescaledb&amp;#39; in pg_libs else pg_max_connections %}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{&lt;span class="l"&gt;% set pg_shared_buffers = (node_mem_mb|int * pg_shared_buffer_ratio|float) | round(0, &amp;#39;ceil&amp;#39;) | int %}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{&lt;span class="l"&gt;% set pg_maintenance_mem = (pg_shared_buffers|int * 0.25)|round(0, &amp;#39;ceil&amp;#39;)|int %}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{&lt;span class="l"&gt;% set pg_effective_cache_size = node_mem_mb|int - pg_shared_buffers|int %}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{&lt;span class="l"&gt;% set pg_workmem = ([ ([ (pg_shared_buffers / pg_max_connections)|round(0,&amp;#39;floor&amp;#39;)|int , 64 ])|max|int , 1024])|min|int %}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{&lt;span class="l"&gt;% endraw %}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="cpu参数调整"&gt;CPU参数调整&lt;/h2&gt;
&lt;p&gt;在 PostgreSQL 中，有 4 个与并行查询相关的重要参数，Pigsty 会自动根据当前系统的 CPU 核数进行参数优化。
在所有策略中，总并行进程数量（总预算）通常设置为 CPU 核数 + 8，且保底为 16 个，从而为逻辑复制与扩展预留足够的后台 worker 数量，OLAP 和 TINY 模板根据场景略有不同。&lt;/p&gt;</description></item><item><title>管理 PostgreSQL 数据库集群</title><link>https://pigsty.cc/docs/pgsql/admin/cluster/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/pgsql/admin/cluster/</guid><description>&lt;h2 id="速查手册"&gt;速查手册&lt;/h2&gt;
&lt;table class="full-width"&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th style="text-align: left"&gt;操作&lt;/th&gt;
 &lt;th style="text-align: left"&gt;快捷命令&lt;/th&gt;
 &lt;th style="text-align: left"&gt;说明&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="#%E5%88%9B%E5%BB%BA%E9%9B%86%E7%BE%A4"&gt;&lt;strong&gt;创建集群&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;bin/pgsql-add &amp;lt;cls&amp;gt;&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;创建新的 PostgreSQL 集群&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="#%E6%89%A9%E5%AE%B9%E9%9B%86%E7%BE%A4"&gt;&lt;strong&gt;扩容集群&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;bin/pgsql-add &amp;lt;cls&amp;gt; &amp;lt;ip...&amp;gt;&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;为现有集群添加从库副本&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="#%E7%BC%A9%E5%AE%B9%E9%9B%86%E7%BE%A4"&gt;&lt;strong&gt;缩容集群&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;bin/pgsql-rm &amp;lt;cls&amp;gt; &amp;lt;ip...&amp;gt;&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;从集群中移除指定实例&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="#%E9%94%80%E6%AF%81%E9%9B%86%E7%BE%A4"&gt;&lt;strong&gt;销毁集群&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;bin/pgsql-rm &amp;lt;cls&amp;gt;&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;销毁整个 PostgreSQL 集群&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="#%E5%88%B7%E6%96%B0%E6%9C%8D%E5%8A%A1"&gt;&lt;strong&gt;刷新服务&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;bin/pgsql-svc &amp;lt;cls&amp;gt; [ip...]&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;重载集群的负载均衡配置&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="#%E5%88%B7%E6%96%B0hba"&gt;&lt;strong&gt;刷新HBA&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;bin/pgsql-hba &amp;lt;cls&amp;gt; [ip...]&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;重载集群的 HBA 访问规则&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="#%E5%85%8B%E9%9A%86%E9%9B%86%E7%BE%A4"&gt;&lt;strong&gt;克隆集群&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;-&lt;/td&gt;
 &lt;td style="text-align: left"&gt;通过备份集群或 PITR 克隆&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;其他管理任务，请参考：&lt;a href="https://pigsty.cc/docs/pgsql/admin/patroni"&gt;&lt;strong&gt;高可用管理&lt;/strong&gt;&lt;/a&gt;，&lt;a href="https://pigsty.cc/docs/pgsql/admin/user/"&gt;&lt;strong&gt;管理用户&lt;/strong&gt;&lt;/a&gt;，&lt;a href="https://pigsty.cc/docs/pgsql/admin/db/"&gt;&lt;strong&gt;管理数据库&lt;/strong&gt;&lt;/a&gt;。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="创建集群"&gt;创建集群&lt;/h2&gt;
&lt;p&gt;要创建一个新的 PostgreSQL 集群，请首先在 &lt;a href="https://pigsty.cc/docs/concept/iac/inventory"&gt;&lt;strong&gt;配置清单&lt;/strong&gt;&lt;/a&gt; 中 &lt;a href="https://pigsty.cc/docs/pgsql/config/cluster"&gt;&lt;strong&gt;定义集群&lt;/strong&gt;&lt;/a&gt;，然后 &lt;a href="https://pigsty.cc/docs/node/admin#%E6%B7%BB%E5%8A%A0%E8%8A%82%E7%82%B9"&gt;&lt;strong&gt;纳管节点&lt;/strong&gt;&lt;/a&gt;并进行初始化：&lt;/p&gt;




&lt;ul class="nav nav-tabs" id="tabs-0" role="tablist"&gt;
 &lt;li class="nav-item"&gt;
 &lt;button class="nav-link active"
 id="tabs-00-00-tab" data-bs-toggle="tab" data-bs-target="#tabs-00-00" role="tab"
 data-td-tp-persist="脚本" aria-controls="tabs-00-00" aria-selected="true"&gt;
 脚本
 &lt;/button&gt;
 &lt;/li&gt;&lt;li class="nav-item"&gt;
 &lt;button class="nav-link"
 id="tabs-00-01-tab" data-bs-toggle="tab" data-bs-target="#tabs-00-01" role="tab"
 data-td-tp-persist="剧本" aria-controls="tabs-00-01" aria-selected="false"&gt;
 剧本
 &lt;/button&gt;
 &lt;/li&gt;&lt;li class="nav-item"&gt;
 &lt;button class="nav-link"
 id="tabs-00-02-tab" data-bs-toggle="tab" data-bs-target="#tabs-00-02" role="tab"
 data-td-tp-persist="示例" aria-controls="tabs-00-02" aria-selected="false"&gt;
 示例
 &lt;/button&gt;
 &lt;/li&gt;
&lt;/ul&gt;

&lt;div class="tab-content" id="tabs-0-content"&gt;
 &lt;div class="tab-body tab-pane fade show active"
 id="tabs-00-00" role="tabpanel" aria-labelled-by="tabs-00-00-tab" tabindex="0"&gt;
 &lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;bin/node-add &amp;lt;cls&amp;gt; &lt;span class="c1"&gt;# 添加分组 &amp;lt;cls&amp;gt; 下的节点&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
 &lt;/div&gt;
 &lt;div class="tab-body tab-pane fade"
 id="tabs-00-01" role="tabpanel" aria-labelled-by="tabs-00-01-tab" tabindex="0"&gt;
 &lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./node.yml -l &amp;lt;cls&amp;gt; &lt;span class="c1"&gt;# 直接使用 Ansible 剧本添加分组 &amp;lt;cls&amp;gt; 下的节点&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
 &lt;/div&gt;
 &lt;div class="tab-body tab-pane fade"
 id="tabs-00-02" role="tabpanel" aria-labelled-by="tabs-00-02-tab" tabindex="0"&gt;
 &lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;bin/pgsql-add pg-test &lt;span class="c1"&gt;# 例子，添加 pg-test 分组下的节点，实际执行 ./node.yml -l pg-test&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
 &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;在被纳管的节点上，可以使用以下命令创建集群：（针对 &lt;strong&gt;&lt;code&gt;&amp;lt;cls&amp;gt;&lt;/code&gt;&lt;/strong&gt; 分组执行 &lt;a href="https://pigsty.cc/docs/pgsql/playbook#pgsqlyml"&gt;&lt;strong&gt;&lt;code&gt;pgsql.yml&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt; 剧本）&lt;/p&gt;</description></item><item><title>集群实例</title><link>https://pigsty.cc/docs/pgsql/config/cluster/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/pgsql/config/cluster/</guid><description>&lt;blockquote&gt;
&lt;p&gt;根据需求场景选择合适的实例与集群类型，配置出满足需求的 PostgreSQL 数据库集群。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;您可以定义不同类型的实例和集群，下面是 Pigsty 中常见的几种 PostgreSQL 实例/集群类型：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#%E8%AF%BB%E5%86%99%E4%B8%BB%E5%BA%93"&gt;读写主库&lt;/a&gt;：定义单一实例集群。&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E5%8F%AA%E8%AF%BB%E4%BB%8E%E5%BA%93"&gt;只读从库&lt;/a&gt;：定义具有一个主库和一个副本的基本 HA 集群。&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E7%A6%BB%E7%BA%BF%E4%BB%8E%E5%BA%93"&gt;离线从库&lt;/a&gt;：定义专用于 OLAP/ETL/交互式查询的实例&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E5%90%8C%E6%AD%A5%E5%A4%87%E5%BA%93"&gt;同步备库&lt;/a&gt;：启用同步提交以确保没有数据丢失。&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E6%B3%95%E5%AE%9A%E4%BA%BA%E6%95%B0%E6%8F%90%E4%BA%A4"&gt;法定人数提交&lt;/a&gt;：使用多数同步提交获得更高的一致性级别。&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E5%A4%87%E4%BB%BD%E9%9B%86%E7%BE%A4"&gt;备份集群&lt;/a&gt;：克隆现有集群并跟随它&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E5%BB%B6%E8%BF%9F%E9%9B%86%E7%BE%A4"&gt;延迟集群&lt;/a&gt;：克隆现有集群用于紧急数据恢复&lt;/li&gt;
&lt;li&gt;&lt;a href="#citus%E9%9B%86%E7%BE%A4"&gt;Citus集群&lt;/a&gt;：定义一个 Citus 分布式数据库集群&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="读写主库"&gt;读写主库&lt;/h2&gt;
&lt;p&gt;我们从最简单的情况开始：由一个主库（Primary）组成的单实例集群：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;pg-test&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;hosts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;10.10.10.11&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;{&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_seq: 1, pg_role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;primary }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;vars&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_cluster&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;pg-test&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这段配置言简意赅，自我描述，仅由 &lt;a href="https://pigsty.cc/docs/concept/model/pgsql#%E8%BA%AB%E4%BB%BD%E5%8F%82%E6%95%B0"&gt;&lt;strong&gt;身份参数&lt;/strong&gt;&lt;/a&gt; 构成，请注意 Ansible Group 分组名应当与 &lt;a href="https://pigsty.cc/docs/pgsql/param#pg_cluster"&gt;&lt;code&gt;pg_cluster&lt;/code&gt;&lt;/a&gt; 保持一致。&lt;/p&gt;
&lt;p&gt;使用以下命令创建该集群：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;bin/pgsql-add pg-test
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Demo 展示，开发测试，承载临时需求，进行无关紧要的计算分析任务时，使用单一数据库实例可能并没有太大问题。但这样的单机集群没有 &lt;a href="https://pigsty.cc/docs/concept/ha"&gt;高可用&lt;/a&gt;，当出现硬件故障时，您需要使用 &lt;a href="https://pigsty.cc/docs/concept/pitr"&gt;PITR&lt;/a&gt; 或其他恢复手段来确保集群的 RTO / RPO。为此，您可以考虑为集群添加若干个 &lt;a href="#%E5%8F%AA%E8%AF%BB%E4%BB%8E%E5%BA%93"&gt;只读从库&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="只读从库"&gt;只读从库&lt;/h2&gt;
&lt;p&gt;要添加一台只读从库（Replica）实例，您可以在 &lt;code&gt;pg-test&lt;/code&gt; 中添加一个新节点，并将其 &lt;a href="https://pigsty.cc/docs/pgsql/param#pg_role"&gt;&lt;code&gt;pg_role&lt;/code&gt;&lt;/a&gt; 设置为&lt;code&gt;replica&lt;/code&gt;。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;pg-test&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;hosts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;10.10.10.11&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;{&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_seq: 1, pg_role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;primary }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;10.10.10.12&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;{&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_seq: 2, pg_role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;replica } &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# &amp;lt;--- 新添加的从库&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;vars&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_cluster&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;pg-test&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;如果整个集群不存在，您可以直接 &lt;a href="https://pigsty.cc/docs/pgsql/admin/cluster#%E5%88%9B%E5%BB%BA%E9%9B%86%E7%BE%A4"&gt;创建&lt;/a&gt; 这个完整的集群。 如果集群主库已经初始化好了，那么您可以向现有集群 &lt;a href="https://pigsty.cc/docs/pgsql/admin/cluster#%E6%89%A9%E5%AE%B9%E9%9B%86%E7%BE%A4"&gt;添加&lt;/a&gt; 一个从库：&lt;/p&gt;</description></item><item><title>OLTP 模板</title><link>https://pigsty.cc/docs/pgsql/template/oltp/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/pgsql/template/oltp/</guid><description>&lt;p&gt;&lt;code&gt;oltp.yml&lt;/code&gt; 是 Pigsty 的默认配置模板，针对&lt;strong&gt;在线事务处理&lt;/strong&gt;（OLTP）负载进行了优化。适用于 4-128 核 CPU 的服务器，特点是高并发连接、低延迟响应、高事务吞吐量。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;建议同时使用 &lt;a href="https://pigsty.cc/docs/node/param#node_tune"&gt;&lt;strong&gt;&lt;code&gt;node_tune&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt; = &lt;code&gt;oltp&lt;/code&gt; 进行操作系统级别的配套调优。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="适用场景"&gt;适用场景&lt;/h2&gt;
&lt;p&gt;OLTP 模板适用于以下场景：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;电商系统&lt;/strong&gt;：订单处理、库存管理、用户交易&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;社交应用&lt;/strong&gt;：用户动态、消息推送、关注关系&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;游戏后端&lt;/strong&gt;：玩家数据、排行榜、游戏状态&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SaaS 应用&lt;/strong&gt;：多租户业务系统&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Web 应用&lt;/strong&gt;：常规的 CRUD 操作密集型应用&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;特征负载&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;大量短事务（毫秒级）&lt;/li&gt;
&lt;li&gt;高并发连接（数百到数千）&lt;/li&gt;
&lt;li&gt;读写比例通常在 7:3 到 9:1&lt;/li&gt;
&lt;li&gt;对延迟敏感，要求快速响应&lt;/li&gt;
&lt;li&gt;数据一致性要求高&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="使用方法"&gt;使用方法&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://pigsty.cc/docs/pgsql/template/oltp/"&gt;&lt;strong&gt;&lt;code&gt;oltp.yml&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt; 是默认模板，无需显式指定：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;pg-oltp&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;hosts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;10.10.10.11&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;{&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_seq: 1, pg_role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;primary }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;10.10.10.12&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;{&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_seq: 2, pg_role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;replica }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;vars&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_cluster&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;pg-oltp&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# pg_conf: oltp.yml # PostgreSQL 配置模板（默认值）&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# node_tune: oltp # 操作系统调优模板（默认值）&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;或显式指定：&lt;/p&gt;</description></item><item><title>内核版本</title><link>https://pigsty.cc/docs/pgsql/config/kernel/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/pgsql/config/kernel/</guid><description>&lt;blockquote&gt;
&lt;p&gt;在 Pigsty 中选择&amp;quot;内核&amp;quot;意味着确定 PostgreSQL 大版本、模式/发行版、需要安装的包以及要加载的调优模板。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Pigsty v4.3 当前支持 PostgreSQL 14 - 18，默认使用 18。下方内容展示如何通过配置文件完成这些选择。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="大版本与软件包"&gt;大版本与软件包&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;pg_version&lt;/code&gt;：指定 PostgreSQL 主版本（默认 18）。Pigsty 会根据版本自动映射到正确的包名前缀。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pg_packages&lt;/code&gt;：定义需要安装的核心包集合，支持使用 &lt;a href="https://pigsty.cc/docs/pgsql/config/alias"&gt;包别名&lt;/a&gt;（默认 &lt;code&gt;pgsql-main pgsql-common&lt;/code&gt;，包含内核 + patroni/pgbouncer/pgbackrest 等常用工具）。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pg_extensions&lt;/code&gt;：额外需要安装的扩展包列表，同样支持别名；缺省为空表示只装核心依赖。&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;all&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;vars&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_version&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;18&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_packages&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;pgsql-main pgsql-common ]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_extensions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;postgis, timescaledb, pgvector, pgml ]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;blockquote&gt;
&lt;p&gt;效果：Ansible 在安装阶段会拉取与 &lt;code&gt;pg_version=18&lt;/code&gt; 对应的包，将扩展预装到系统中，随后数据库初始化脚本即可直接 &lt;code&gt;CREATE EXTENSION&lt;/code&gt;。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Pigsty 的离线仓库中不同版本的扩展支持范围不同：14 可用扩展相对较少，17/18 覆盖最广。若某扩展未预打包，可通过 &lt;code&gt;repo_extra_packages&lt;/code&gt; 追加。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="内核模式pg_mode"&gt;内核模式（pg_mode）&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;pg_mode&lt;/code&gt; 控制要部署的内核“风味”，默认 &lt;code&gt;pgsql&lt;/code&gt; 表示标准 PostgreSQL。Pigsty 目前支持以下模式：&lt;/p&gt;
&lt;table class="full-width"&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;模式&lt;/th&gt;
 &lt;th&gt;场景&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;pgsql&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;标准 PostgreSQL，高可用 + 复制&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;citus&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Citus 分布式集群，需要额外的 &lt;code&gt;pg_shard / pg_group&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;gpsql&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Cloudberry / Greenplum / MatrixDB&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;mssql&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Babelfish&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;mysql&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;OpenGauss/HaloDB 兼容 MySQL 协议&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;polar&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;阿里 PolarDB（基于 pg &lt;code&gt;polar&lt;/code&gt; 发行）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;ivory&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;IvorySQL（Oracle 兼容语法）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;oriole&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;OrioleDB 存储引擎&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;agens&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;AgensGraph 图数据库内核&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;pgedge&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;pgEdge 分布式复制内核&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;oracle&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;PostgreSQL + ora 兼容（&lt;code&gt;pg_mode: oracle&lt;/code&gt;）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;选择模式后，Pigsty 会自动加载对应的模板、依赖包与 Patroni 配置。以部署 Citus 为例：&lt;/p&gt;</description></item><item><title>管理 PostgreSQL 业务用户</title><link>https://pigsty.cc/docs/pgsql/admin/user/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/pgsql/admin/user/</guid><description>&lt;h2 id="快速上手"&gt;快速上手&lt;/h2&gt;
&lt;p&gt;Pigsty 使用声明式管理方式，首先在 &lt;a href="https://pigsty.cc/docs/concept/iac/inventory"&gt;&lt;strong&gt;配置清单&lt;/strong&gt;&lt;/a&gt; 中 &lt;a href="https://pigsty.cc/docs/pgsql/config/user"&gt;&lt;strong&gt;定义用户&lt;/strong&gt;&lt;/a&gt;，然后使用 &lt;code&gt;bin/pgsql-user &amp;lt;cls&amp;gt; &amp;lt;username&amp;gt;&lt;/code&gt; 创建或修改用户。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;pg-meta&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;hosts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;{&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;10.10.10.10&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;{&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_seq: 1, pg_role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;primary } }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;vars&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_cluster&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;pg-meta&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_users&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;{&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name: dbuser_app, password: &amp;#39;DBUser.App&amp;#39;, pgbouncer&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;}&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# &amp;lt;--- 在这里定义用户列表！&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;ul class="nav nav-tabs" id="tabs-0" role="tablist"&gt;
 &lt;li class="nav-item"&gt;
 &lt;button class="nav-link active"
 id="tabs-00-00-tab" data-bs-toggle="tab" data-bs-target="#tabs-00-00" role="tab"
 data-td-tp-persist="脚本" aria-controls="tabs-00-00" aria-selected="true"&gt;
 脚本
 &lt;/button&gt;
 &lt;/li&gt;&lt;li class="nav-item"&gt;
 &lt;button class="nav-link"
 id="tabs-00-01-tab" data-bs-toggle="tab" data-bs-target="#tabs-00-01" role="tab"
 data-td-tp-persist="剧本" aria-controls="tabs-00-01" aria-selected="false"&gt;
 剧本
 &lt;/button&gt;
 &lt;/li&gt;&lt;li class="nav-item"&gt;
 &lt;button class="nav-link"
 id="tabs-00-02-tab" data-bs-toggle="tab" data-bs-target="#tabs-00-02" role="tab"
 data-td-tp-persist="示例" aria-controls="tabs-00-02" aria-selected="false"&gt;
 示例
 &lt;/button&gt;
 &lt;/li&gt;
&lt;/ul&gt;

&lt;div class="tab-content" id="tabs-0-content"&gt;
 &lt;div class="tab-body tab-pane fade show active"
 id="tabs-00-00" role="tabpanel" aria-labelled-by="tabs-00-00-tab" tabindex="0"&gt;
 &lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;bin/pgsql-user &amp;lt;cls&amp;gt; &amp;lt;username&amp;gt; &lt;span class="c1"&gt;# 在 &amp;lt;cls&amp;gt; 集群上创建/修改 &amp;lt;username&amp;gt; 用户&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
 &lt;/div&gt;
 &lt;div class="tab-body tab-pane fade"
 id="tabs-00-01" role="tabpanel" aria-labelled-by="tabs-00-01-tab" tabindex="0"&gt;
 &lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./pgsql-user.yml -l pg-meta -e &lt;span class="nv"&gt;username&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;dbuser_app &lt;span class="c1"&gt;# 直接使用剧本在 &amp;lt;cls&amp;gt; 集群上创建/修改 &amp;lt;username&amp;gt; 用户&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
 &lt;/div&gt;
 &lt;div class="tab-body tab-pane fade"
 id="tabs-00-02" role="tabpanel" aria-labelled-by="tabs-00-02-tab" tabindex="0"&gt;
 &lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;bin/pgsql-user pg-meta dbuser_app &lt;span class="c1"&gt;# 在 pg-meta 集群上创建/修改 dbuser_app 用户&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
 &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;关于用户定义参数的完整参考，请查阅 &lt;a href="https://pigsty.cc/docs/pgsql/config/user"&gt;&lt;strong&gt;用户配置&lt;/strong&gt;&lt;/a&gt;。关于用户的访问权限，请参考 &lt;a href="https://pigsty.cc/docs/concept/sec/ac/#%E9%BB%98%E8%AE%A4%E8%A7%92%E8%89%B2%E4%B8%8E%E7%B3%BB%E7%BB%9F%E7%94%A8%E6%88%B7"&gt;&lt;strong&gt;ACL：角色权限&lt;/strong&gt;&lt;/a&gt;。&lt;/p&gt;</description></item><item><title>主动故障检测</title><link>https://pigsty.cc/docs/concept/ha/failure/active/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/concept/ha/failure/active/</guid><description>&lt;div id="infographic-5a27087cd19651a30e413fd22489ae1b" class="infographic-container td-max-width-on-larger-screens"&gt;&lt;/div&gt;

&lt;script&gt;
(function() {
 var containerId = 'infographic-5a27087cd19651a30e413fd22489ae1b';
 var syntax = "````\ninfographic list-row-simple-horizontal-arrow\ndata\n title 崩溃故障切换流程\n desc 当 Patroni 健康，但 PostgreSQL 因故崩溃时的故障切换流程\n items\n - label 故障检测\n desc Patroni 在循环中检测到 PG 崩溃\n icon mingcute/close-circle-fill\n - label 重启超时\n desc Patroni 尝试重启 PG，超时后释放租约\n icon mingcute/refresh-2-fill\n - label 从库检测\n desc 从库从循环中醒来发现租约释放，开始竞选\n icon mingcute/key-2-fill\n - label 抢锁提拔\n desc 从库相互比较并抢锁，胜利者提升自己的 PG\n icon mingcute/radar-fill\n - label 健康检查\n desc HAProxy 健康检查发现新主上线，分配流量\n icon mingcute/arrow-up-circle-fill\ntheme light\n palette antv\n````";

 function renderInfographic() {
 var dom = document.getElementById(containerId);
 if (!dom) { console.error('Infographic: container not found:', containerId); return; }
 try {
 var ig = new AntVInfographic.Infographic({
 container: '#' + containerId,
 width: dom.offsetWidth || '100%',
 height: 'auto',
 });
 ig.render(syntax);
 } catch (e) {
 console.error('Infographic render error:', e);
 dom.innerHTML = '&lt;pre style="color: red;"&gt;Infographic Error: ' + e.message + '&lt;/pre&gt;';
 }
 }

 
 if (typeof AntVInfographic !== 'undefined') {
 renderInfographic();
 } else if (!window._infographicLoading) {
 window._infographicLoading = true;
 window._infographicCallbacks = [renderInfographic];
 var script = document.createElement('script');
 script.src = '/js/infographic.min.js';
 script.onload = function() {
 window._infographicCallbacks.forEach(function(cb) { cb(); });
 };
 document.head.appendChild(script);
 } else {
 window._infographicCallbacks.push(renderInfographic);
 }
})();
&lt;/script&gt;

&lt;hr&gt;
&lt;h2 id="rto-时序图"&gt;RTO 时序图&lt;/h2&gt;
&lt;div id="echarts-7566178edd3ee3c0901186f67235867f" class="echarts-container td-max-width-on-larger-screens" style="height: 520px;"&gt;&lt;/div&gt;

&lt;script&gt;
(function() {
 var dom = document.getElementById('echarts-7566178edd3ee3c0901186f67235867f');
 if (!dom) return;

 
 window._echartsFns = window._echartsFns || {};

var fmt = function(params) { if (!params || !params.length || params[0].name === '') return ''; return '&lt;b&gt;' + params[0].name + '&lt;/b&gt;&lt;br/&gt;' + params.filter(p =&gt; p.value !== '-' &amp;&amp; p.value != null).map(p =&gt; p.marker + ' ' + p.seriesName + ': ' + p.value + 's').join('&lt;br/&gt;'); };

 window._echartsFns['fmt'] = fmt;
 var theme = document.documentElement.getAttribute('data-bs-theme') === 'dark' ? 'dark' : null;

 var chart = echarts.init(dom, theme);
 var optionsJson = {"grid":{"bottom":32,"left":64,"right":24,"top":40},"legend":{"data":["故障检测","重启超时","从库检测","抢锁提拔","健康检查"],"itemGap":12,"top":0},"series":[{"barWidth":20,"data":[20,10,0,"-",10,5,0,"-",5,3,0,"-",5,3,0],"emphasis":{"focus":"series"},"itemStyle":{"color":"#b07aa1"},"name":"故障检测","stack":"main","type":"bar","z":2},{"data":[95,95,0,"-",45,45,0,"-",25,25,0,"-",15,15,0],"emphasis":{"focus":"series"},"itemStyle":{"color":"#f28e2c"},"name":"重启超时","stack":"main","type":"bar","z":2},{"data":[20,10,0,"-",10,5,0,"-",5,3,0,"-",5,3,0],"emphasis":{"focus":"series"},"itemStyle":{"color":"#edc949"},"name":"从库检测","stack":"main","type":"bar","z":2},{"data":[2,1,0,"-",2,1,0,"-",2,1,0,"-",2,1,0],"emphasis":{"focus":"series"},"itemStyle":{"color":"#59a14f"},"name":"抢锁提拔","stack":"main","type":"bar","z":2},{"data":[8,6,4,"-",6,5,3,"-",4,3,2,"-",2,2,1],"emphasis":{"focus":"series"},"itemStyle":{"color":"#4e79a7"},"name":"健康检查","stack":"main","type":"bar","z":2},{"barGap":"-100%","barWidth":20,"data":[145,122,4,"-",73,61,3,"-",41,35,2,"-",29,24,1],"emphasis":{"itemStyle":{"opacity":0}},"itemStyle":{"color":"#888","opacity":0},"name":"RTO总计","type":"bar","z":1},{"barGap":"-100%","barWidth":20,"data":[150,150,150,"-",90,90,90,"-",45,45,45,"-",30,30,30],"emphasis":{"itemStyle":{"color":"rgba(0,0,0,0.12)"}},"itemStyle":{"color":"rgba(0,0,0,0.08)"},"name":"RTO预算","type":"bar","z":0}],"tooltip":{"axisPointer":{"type":"shadow"},"formatter":"$fn:fmt","trigger":"axis"},"xAxis":{"axisLine":{"show":true},"axisTick":{"show":true},"max":160,"minorSplitLine":{"lineStyle":{"opacity":0.2,"type":"dotted"},"show":true},"minorTick":{"show":true,"splitNumber":5},"name":"秒","nameLocation":"end","splitLine":{"lineStyle":{"opacity":0.5,"type":"dashed"},"show":true},"type":"value"},"yAxis":{"axisLabel":{"fontFamily":"monospace","fontSize":10},"axisLine":{"show":true},"axisTick":{"show":true},"data":["wide-max","wide-avg","wide-min","","safe-max","safe-avg","safe-min","","norm-max","norm-avg","norm-min","","fast-max","fast-avg","fast-min"],"splitLine":{"show":false},"type":"category"}};

 
 function replaceFnRefs(obj) {
 if (typeof obj === 'string' &amp;&amp; obj.startsWith('$fn:')) {
 var fnName = obj.substring(4);
 return window._echartsFns[fnName];
 }
 if (Array.isArray(obj)) {
 return obj.map(replaceFnRefs);
 }
 if (obj &amp;&amp; typeof obj === 'object') {
 var result = {};
 for (var key in obj) {
 result[key] = replaceFnRefs(obj[key]);
 }
 return result;
 }
 return obj;
 }

 var options = replaceFnRefs(optionsJson);
 chart.setOption(options);

 
 window.addEventListener('resize', function() {
 chart.resize();
 });
 var observer = new MutationObserver(function(mutations) {
 mutations.forEach(function(mutation) {
 if (mutation.attributeName === 'data-bs-theme') {
 var newTheme = document.documentElement.getAttribute('data-bs-theme') === 'dark' ? 'dark' : null;
 chart.dispose();
 chart = echarts.init(dom, newTheme);
 chart.setOption(options);
 }
 });
 });
 observer.observe(document.documentElement, { attributes: true, attributeFilter: ['data-bs-theme'] });
})();
&lt;/script&gt;

&lt;hr&gt;
&lt;h2 id="故障模型"&gt;故障模型&lt;/h2&gt;
&lt;table class="full-width"&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th style="text-align: center"&gt;项目&lt;/th&gt;
 &lt;th style="text-align: center"&gt;最好&lt;/th&gt;
 &lt;th style="text-align: center"&gt;最坏&lt;/th&gt;
 &lt;th style="text-align: center"&gt;平均&lt;/th&gt;
 &lt;th style="text-align: left"&gt;说明&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td style="text-align: center"&gt;&lt;strong&gt;故障检测&lt;/strong&gt;&lt;/td&gt;
 &lt;td style="text-align: center"&gt;&lt;code&gt;0&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: center"&gt;&lt;code&gt;loop&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: center"&gt;&lt;code&gt;loop/2&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;最好：PG 恰好在检测前崩溃&lt;br/&gt;最坏：PG 刚检测完就崩溃&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: center"&gt;&lt;strong&gt;重启超时&lt;/strong&gt;&lt;/td&gt;
 &lt;td style="text-align: center"&gt;&lt;code&gt;0&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: center"&gt;&lt;code&gt;start&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: center"&gt;&lt;code&gt;start&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;最好：PG 瞬间自愈&lt;br/&gt;最坏：等满 start 超时才释放租约&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: center"&gt;&lt;strong&gt;从库检测&lt;/strong&gt;&lt;/td&gt;
 &lt;td style="text-align: center"&gt;&lt;code&gt;0&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: center"&gt;&lt;code&gt;loop&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: center"&gt;&lt;code&gt;loop/2&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;最好：恰好在检测点&lt;br/&gt;最坏：刚错过检测点&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: center"&gt;&lt;strong&gt;抢锁提拔&lt;/strong&gt;&lt;/td&gt;
 &lt;td style="text-align: center"&gt;&lt;code&gt;0&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: center"&gt;&lt;code&gt;2&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: center"&gt;&lt;code&gt;1&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;最好：直接抢锁提升&lt;br/&gt;最坏：API 超时 + Promote&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: center"&gt;&lt;strong&gt;健康检查&lt;/strong&gt;&lt;/td&gt;
 &lt;td style="text-align: center"&gt;&lt;code&gt;(rise-1) × fastinter&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: center"&gt;&lt;code&gt;(rise-1) × fastinter + inter&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: center"&gt;&lt;code&gt;(rise-1) × fastinter + inter/2&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;最好：检查前状态变化&lt;br/&gt;最坏：检查后瞬间状态变化&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;主动故障与被动故障的核心区别&lt;/strong&gt;：&lt;/p&gt;</description></item><item><title>OLAP 模板</title><link>https://pigsty.cc/docs/pgsql/template/olap/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/pgsql/template/olap/</guid><description>&lt;p&gt;&lt;code&gt;olap.yml&lt;/code&gt; 是针对&lt;strong&gt;在线分析处理&lt;/strong&gt;（OLAP）负载优化的配置模板。适用于 4-128 核 CPU 的服务器，特点是支持大查询、高并行度、宽松的超时设置和激进的 Vacuum 策略。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;建议同时使用 &lt;a href="https://pigsty.cc/docs/node/param#node_tune"&gt;&lt;strong&gt;&lt;code&gt;node_tune&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt; = &lt;code&gt;olap&lt;/code&gt; 进行操作系统级别的配套调优。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="适用场景"&gt;适用场景&lt;/h2&gt;
&lt;p&gt;OLAP 模板适用于以下场景：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;数据仓库&lt;/strong&gt;：历史数据存储、多维分析&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;BI 报表&lt;/strong&gt;：复杂报表查询、仪表盘数据源&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ETL 处理&lt;/strong&gt;：数据抽取、转换、加载&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;数据分析&lt;/strong&gt;：Ad-hoc 查询、数据探索&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;HTAP 混合负载&lt;/strong&gt;：分析型从库&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;特征负载&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;复杂查询（秒级到分钟级）&lt;/li&gt;
&lt;li&gt;低并发连接（数十到数百）&lt;/li&gt;
&lt;li&gt;读密集型，写入通常是批量操作&lt;/li&gt;
&lt;li&gt;对吞吐量敏感，可以容忍较高延迟&lt;/li&gt;
&lt;li&gt;需要扫描大量数据&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="使用方法"&gt;使用方法&lt;/h2&gt;
&lt;p&gt;在集群定义中指定 &lt;a href="https://pigsty.cc/docs/pgsql/param#pg_conf"&gt;&lt;strong&gt;&lt;code&gt;pg_conf&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt; = &lt;code&gt;olap.yml&lt;/code&gt;：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;pg-olap&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;hosts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;10.10.10.11&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;{&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_seq: 1, pg_role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;primary }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;10.10.10.12&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;{&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_seq: 2, pg_role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;replica }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;vars&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_cluster&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;pg-olap&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_conf&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;olap.yml &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# PostgreSQL 分析处理模板&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;node_tune&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;olap &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 操作系统分析处理调优&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;也可以将 &lt;a href="https://pigsty.cc/docs/pgsql/template/olap/"&gt;&lt;strong&gt;&lt;code&gt;olap.yml&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt; 模板用于专用的离线从库：&lt;/p&gt;</description></item><item><title>别名翻译</title><link>https://pigsty.cc/docs/pgsql/config/alias/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/pgsql/config/alias/</guid><description>&lt;p&gt;PostgreSQL 在不同操作系统上的软件包命名规则存在显著差异：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;EL 系统&lt;/strong&gt;（RHEL/Rocky/Alma/&amp;hellip;）使用 &lt;code&gt;pgvector_18&lt;/code&gt;，&lt;code&gt;postgis36_18*&lt;/code&gt; 这样的格式&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Debian/Ubuntu 系统&lt;/strong&gt;使用 &lt;code&gt;postgresql-18-pgvector&lt;/code&gt;，&lt;code&gt;postgresql-18-postgis-3&lt;/code&gt; 这样的格式&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这种差异给用户带来了额外的认知负担：您需要记住不同系统的包名规则，还要处理 PostgreSQL 版本号嵌入的问题。&lt;/p&gt;
&lt;h2 id="软件包别名"&gt;软件包别名&lt;/h2&gt;
&lt;p&gt;Pigsty 通过 &lt;strong&gt;软件包别名（Package Alias）&lt;/strong&gt; 机制解决了这个问题：您只需使用统一的别名，Pigsty 会处理好所有细节：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# 使用别名 —— 简单、统一、跨平台&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;pg_extensions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;postgis, pgvector, timescaledb ]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# 等效于 EL9 + PG18 上的实际包名&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;pg_extensions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;postgis36_18*, pgvector_18*, timescaledb-tsl_18* ]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# 等效于 Ubuntu 24 + PG18 上的实际包名&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;pg_extensions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;postgresql-18-postgis-3, postgresql-18-pgvector, postgresql-18-timescaledb-tsl ]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="别名翻译"&gt;别名翻译&lt;/h2&gt;
&lt;p&gt;别名还可以将一组软件包归类为一个整体，例如 Pigsty 默认安装的软件包 —— &lt;a href="https://pigsty.cc/docs/pgsql/param#pg_packages"&gt;&lt;strong&gt;&lt;code&gt;pg_packages&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt; 的默认值是：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;pg_packages&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# pg packages to be installed, alias can be used&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;pgsql-main pgsql-common&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Pigsty 将查询当前的操作系统别名清单（假设为 &lt;a href="https://github.com/pgsty/pigsty/blob/main/roles/node_id/vars/el10.x86_64.yml#L105"&gt;&lt;strong&gt;&lt;code&gt;el10.x86_64&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt;），将其翻译为 PGSQL 内核，扩展，以及工具包：&lt;/p&gt;</description></item><item><title>管理 PostgreSQL 业务数据库</title><link>https://pigsty.cc/docs/pgsql/admin/db/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/pgsql/admin/db/</guid><description>&lt;h2 id="快速上手"&gt;快速上手&lt;/h2&gt;
&lt;p&gt;Pigsty 使用声明式管理方式，首先在 &lt;a href="https://pigsty.cc/docs/concept/iac/inventory"&gt;&lt;strong&gt;配置清单&lt;/strong&gt;&lt;/a&gt; 中 &lt;a href="https://pigsty.cc/docs/pgsql/config/db"&gt;&lt;strong&gt;定义数据库&lt;/strong&gt;&lt;/a&gt;，然后使用 &lt;code&gt;bin/pgsql-db &amp;lt;cls&amp;gt; &amp;lt;dbname&amp;gt;&lt;/code&gt; 创建或修改数据库。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;pg-meta&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;hosts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;{&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;10.10.10.10&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;{&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_seq: 1, pg_role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;primary } }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;vars&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_cluster&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;pg-meta&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_databases&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;{&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;some_db }] &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# &amp;lt;--- 在这里定义数据库列表！&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;ul class="nav nav-tabs" id="tabs-0" role="tablist"&gt;
 &lt;li class="nav-item"&gt;
 &lt;button class="nav-link active"
 id="tabs-00-00-tab" data-bs-toggle="tab" data-bs-target="#tabs-00-00" role="tab"
 data-td-tp-persist="脚本" aria-controls="tabs-00-00" aria-selected="true"&gt;
 脚本
 &lt;/button&gt;
 &lt;/li&gt;&lt;li class="nav-item"&gt;
 &lt;button class="nav-link"
 id="tabs-00-01-tab" data-bs-toggle="tab" data-bs-target="#tabs-00-01" role="tab"
 data-td-tp-persist="剧本" aria-controls="tabs-00-01" aria-selected="false"&gt;
 剧本
 &lt;/button&gt;
 &lt;/li&gt;&lt;li class="nav-item"&gt;
 &lt;button class="nav-link"
 id="tabs-00-02-tab" data-bs-toggle="tab" data-bs-target="#tabs-00-02" role="tab"
 data-td-tp-persist="示例" aria-controls="tabs-00-02" aria-selected="false"&gt;
 示例
 &lt;/button&gt;
 &lt;/li&gt;
&lt;/ul&gt;

&lt;div class="tab-content" id="tabs-0-content"&gt;
 &lt;div class="tab-body tab-pane fade show active"
 id="tabs-00-00" role="tabpanel" aria-labelled-by="tabs-00-00-tab" tabindex="0"&gt;
 &lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;bin/pgsql-db &amp;lt;cls&amp;gt; &amp;lt;dbname&amp;gt; &lt;span class="c1"&gt;# 在 &amp;lt;cls&amp;gt; 集群上创建/修改 &amp;lt;dbname&amp;gt; 数据库&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
 &lt;/div&gt;
 &lt;div class="tab-body tab-pane fade"
 id="tabs-00-01" role="tabpanel" aria-labelled-by="tabs-00-01-tab" tabindex="0"&gt;
 &lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./pgsql-db.yml -l pg-meta -e &lt;span class="nv"&gt;dbname&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;some_db &lt;span class="c1"&gt;# 直接使用剧本在 &amp;lt;cls&amp;gt; 集群上创建/修改 &amp;lt;dbname&amp;gt; 数据库&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
 &lt;/div&gt;
 &lt;div class="tab-body tab-pane fade"
 id="tabs-00-02" role="tabpanel" aria-labelled-by="tabs-00-02-tab" tabindex="0"&gt;
 &lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;bin/pgsql-db pg-meta some_db &lt;span class="c1"&gt;# 在 pg-meta 集群上创建/修改 some_db 数据库&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
 &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;关于数据库定义参数的完整参考，请查阅 &lt;a href="https://pigsty.cc/docs/pgsql/config/db"&gt;&lt;strong&gt;数据库配置&lt;/strong&gt;&lt;/a&gt;。关于数据库的访问权限，请参考 &lt;a href="https://pigsty.cc/docs/concept/sec/ac/#%E6%95%B0%E6%8D%AE%E5%BA%93%E9%9A%94%E7%A6%BB"&gt;&lt;strong&gt;ACL：数据库权限&lt;/strong&gt;&lt;/a&gt;。&lt;/p&gt;</description></item><item><title>CRIT 模板</title><link>https://pigsty.cc/docs/pgsql/template/crit/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/pgsql/template/crit/</guid><description>&lt;p&gt;&lt;code&gt;crit.yml&lt;/code&gt; 是针对&lt;strong&gt;核心金融业务&lt;/strong&gt;优化的配置模板。适用于 4-128 核 CPU 的服务器，特点是强制同步复制、数据校验和、完整审计日志、严格的安全设置。这个模板牺牲一定的性能来换取最高级别的数据安全性。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;建议同时使用 &lt;a href="https://pigsty.cc/docs/node/param#node_tune"&gt;&lt;strong&gt;&lt;code&gt;node_tune&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt; = &lt;code&gt;crit&lt;/code&gt; 进行操作系统级别的配套调优，优化脏页数量。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="适用场景"&gt;适用场景&lt;/h2&gt;
&lt;p&gt;CRIT 模板适用于以下场景：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;金融交易&lt;/strong&gt;：银行转账、支付清算、证券交易&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;核心账务&lt;/strong&gt;：总账系统、会计系统&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;合规审计&lt;/strong&gt;：需要完整操作记录的业务&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;关键业务&lt;/strong&gt;：任何不能容忍数据丢失的场景&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;特征需求&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;零数据丢失（RPO = 0）&lt;/li&gt;
&lt;li&gt;数据完整性校验&lt;/li&gt;
&lt;li&gt;完整的审计日志&lt;/li&gt;
&lt;li&gt;严格的安全策略&lt;/li&gt;
&lt;li&gt;可以接受一定的性能损失&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="使用方法"&gt;使用方法&lt;/h2&gt;
&lt;p&gt;在集群定义中指定 &lt;a href="https://pigsty.cc/docs/pgsql/param#pg_conf"&gt;&lt;strong&gt;&lt;code&gt;pg_conf&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt; = &lt;code&gt;crit.yml&lt;/code&gt;：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;pg-finance&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;hosts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;10.10.10.11&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;{&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_seq: 1, pg_role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;primary }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;10.10.10.12&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;{&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_seq: 2, pg_role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;replica }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;10.10.10.13&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;{&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_seq: 3, pg_role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;replica }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;vars&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_cluster&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;pg-finance&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_conf&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;crit.yml &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# PostgreSQL 关键业务模板&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;node_tune&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;crit &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 操作系统关键业务调优&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;建议&lt;/strong&gt;：关键业务集群至少配置 3 个节点，以确保在一个节点故障时仍能保持同步复制。&lt;/p&gt;</description></item><item><title>管理 Patroni 高可用</title><link>https://pigsty.cc/docs/pgsql/admin/patroni/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/pgsql/admin/patroni/</guid><description>&lt;h2 id="概览"&gt;概览&lt;/h2&gt;
&lt;p&gt;Pigsty 使用 Patroni 管理 PostgreSQL 集群，它可以用来修改集群配置，查看集群状态，执行主从切换，重启集群，重做从库等操作。&lt;/p&gt;
&lt;p&gt;要使用 Patroni 进行管理，您需要有以下两种身份之一：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;从 &lt;a href="https://pigsty.cc/docs/concept/arch/node#infra%E8%8A%82%E7%82%B9"&gt;&lt;strong&gt;INFRA 节点&lt;/strong&gt;&lt;/a&gt; 上使用 &lt;a href="https://pigsty.cc/docs/deploy/admin"&gt;&lt;strong&gt;管理员用户&lt;/strong&gt;&lt;/a&gt;，可以管理环境中的所有集群。&lt;/li&gt;
&lt;li&gt;从 &lt;a href="https://pigsty.cc/docs/concept/arch/node#pgsql%E8%8A%82%E7%82%B9"&gt;&lt;strong&gt;PGSQL节点&lt;/strong&gt;&lt;/a&gt; 上使用 &lt;a href="https://pigsty.cc/docs/pgsql/param#pg_dbsu"&gt;&lt;strong&gt;&lt;code&gt;pg_dbsu&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt; （默认为 &lt;code&gt;postgres&lt;/code&gt;），可以管理当前集群。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Patroni 提供了 &lt;a href="https://patroni.readthedocs.io/en/latest/patronictl.html"&gt;&lt;strong&gt;&lt;code&gt;patronictl&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt; 命令行工具用于管理，Pigsty 提供了封装的快捷命令 &lt;code&gt;pg&lt;/code&gt; 来简化其操作。&lt;/p&gt;
&lt;details&gt;&lt;summary&gt;通过 pg 别名使用 patronictl&lt;/summary&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pg &lt;span class="o"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;local&lt;/span&gt; &lt;span class="nv"&gt;patroni_conf&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;/infra/conf/patronictl.yml&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; ! -r &lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;patroni_conf&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;patroni_conf&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;/etc/patroni/patroni.yml&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; ! -r &lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;patroni_conf&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;error: patronictl config not found&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; 1&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;fi&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;fi&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; patronictl -c &lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;patroni_conf&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$@&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/details&gt;
&lt;hr&gt;
&lt;h2 id="可用命令"&gt;可用命令&lt;/h2&gt;
&lt;table class="full-width"&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;命令&lt;/th&gt;
 &lt;th&gt;功能&lt;/th&gt;
 &lt;th&gt;说明&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;a href="#%E4%BF%AE%E6%94%B9%E9%85%8D%E7%BD%AE"&gt;&lt;strong&gt;&lt;code&gt;edit-config&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;修改配置&lt;/td&gt;
 &lt;td&gt;交互式修改集群的 Patroni/PostgreSQL 配置&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;a href="#%E6%9F%A5%E7%9C%8B%E7%8A%B6%E6%80%81"&gt;&lt;strong&gt;&lt;code&gt;list&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;查看状态&lt;/td&gt;
 &lt;td&gt;列出集群成员及其状态&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;a href="#%E4%B8%BB%E5%8A%A8%E5%88%87%E6%8D%A2"&gt;&lt;strong&gt;&lt;code&gt;switchover&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;主动切换&lt;/td&gt;
 &lt;td&gt;将主库角色切换到指定从库（计划内维护）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;a href="#%E6%95%85%E9%9A%9C%E5%88%87%E6%8D%A2"&gt;&lt;strong&gt;&lt;code&gt;failover&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;故障切换&lt;/td&gt;
 &lt;td&gt;强制故障转移到指定从库（紧急情况）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;a href="#%E9%87%8D%E5%90%AF%E5%AE%9E%E4%BE%8B"&gt;&lt;strong&gt;&lt;code&gt;restart&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;重启实例&lt;/td&gt;
 &lt;td&gt;重启 PostgreSQL 实例以应用需要重启的参数&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;a href="#%E9%87%8D%E8%BD%BD%E9%85%8D%E7%BD%AE"&gt;&lt;strong&gt;&lt;code&gt;reload&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;重载配置&lt;/td&gt;
 &lt;td&gt;重载 Patroni 配置（无需重启）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;a href="#%E9%87%8D%E5%81%9A%E4%BB%8E%E5%BA%93"&gt;&lt;strong&gt;&lt;code&gt;reinit&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;重做从库&lt;/td&gt;
 &lt;td&gt;重新初始化从库（擦除数据并重新复制）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;a href="#%E6%9A%82%E5%81%9C%E8%87%AA%E5%8A%A8%E5%88%87%E6%8D%A2"&gt;&lt;strong&gt;&lt;code&gt;pause&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;暂停自动切换&lt;/td&gt;
 &lt;td&gt;暂停 Patroni 的自动故障转移功能&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;a href="#%E6%81%A2%E5%A4%8D%E8%87%AA%E5%8A%A8%E5%88%87%E6%8D%A2"&gt;&lt;strong&gt;&lt;code&gt;resume&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;恢复自动切换&lt;/td&gt;
 &lt;td&gt;恢复 Patroni 的自动故障转移功能&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;a href="#%E6%9F%A5%E7%9C%8B%E5%8E%86%E5%8F%B2"&gt;&lt;strong&gt;&lt;code&gt;history&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;查看历史&lt;/td&gt;
 &lt;td&gt;显示集群的故障转移历史记录&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;a href="#%E6%98%BE%E7%A4%BA%E9%85%8D%E7%BD%AE"&gt;&lt;strong&gt;&lt;code&gt;show-config&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;显示配置&lt;/td&gt;
 &lt;td&gt;显示集群当前的配置（只读）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;a href="#%E6%89%A7%E8%A1%8C%E6%9F%A5%E8%AF%A2"&gt;&lt;strong&gt;&lt;code&gt;query&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;执行查询&lt;/td&gt;
 &lt;td&gt;在集群成员上执行 SQL 查询&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;a href="#%E6%9F%A5%E7%9C%8B%E6%8B%93%E6%89%91"&gt;&lt;strong&gt;&lt;code&gt;topology&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;查看拓扑&lt;/td&gt;
 &lt;td&gt;显示集群的复制拓扑结构&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;a href="#%E6%9F%A5%E7%9C%8B%E7%89%88%E6%9C%AC"&gt;&lt;strong&gt;&lt;code&gt;version&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;查看版本&lt;/td&gt;
 &lt;td&gt;显示 Patroni 版本信息&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;a href="#%E7%A7%BB%E9%99%A4%E6%88%90%E5%91%98"&gt;&lt;strong&gt;&lt;code&gt;remove&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;移除成员&lt;/td&gt;
 &lt;td&gt;从 DCS 中移除集群成员（危险操作）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="修改配置"&gt;修改配置&lt;/h2&gt;
&lt;p&gt;使用 &lt;a href="https://patroni.readthedocs.io/en/latest/patronictl.html#patronictl-edit-config"&gt;&lt;strong&gt;&lt;code&gt;edit-config&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt; 子命令可以交互式修改集群的 Patroni 与 PostgreSQL 配置。该命令会打开一个编辑器，让您修改存储在 DCS（分布式配置存储）中的集群配置，修改后会自动应用到所有集群成员。您可以更改 Patroni 本身的参数（如 &lt;code&gt;ttl&lt;/code&gt;、&lt;code&gt;loop_wait&lt;/code&gt;、&lt;code&gt;synchronous_mode&lt;/code&gt; 等），以及 &lt;code&gt;postgresql.parameters&lt;/code&gt; 中的 PostgreSQL 参数。&lt;/p&gt;</description></item><item><title>用户/角色</title><link>https://pigsty.cc/docs/pgsql/config/user/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/pgsql/config/user/</guid><description>&lt;blockquote&gt;
&lt;p&gt;在本文中，&amp;ldquo;用户&amp;rdquo;（User） 指的是使用 SQL 命令 &lt;code&gt;CREATE USER/ROLE&lt;/code&gt; 创建的，数据库集簇内的逻辑对象。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;在 PostgreSQL 中，用户直接隶属于数据库集簇而非某个具体的数据库。因此在创建业务数据库和业务用户时，应当遵循&amp;quot;先用户，后数据库&amp;quot;的原则。&lt;/p&gt;
&lt;p&gt;Pigsty 通过两个配置参数定义数据库集群中的角色与用户：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://pigsty.cc/docs/pgsql/param#pg_default_roles"&gt;&lt;strong&gt;&lt;code&gt;pg_default_roles&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt;：定义全局统一使用的角色和用户&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pigsty.cc/docs/pgsql/param#pg_users"&gt;&lt;strong&gt;&lt;code&gt;pg_users&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt;：在数据库集群层面定义业务用户和角色&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;前者用于定义整套环境中共用的角色与用户，后者定义单个集群中特有的业务角色与用户。二者形式相同，均为用户定义对象的数组。
用户/角色按数组顺序逐一创建，因此后定义的用户可以属于先定义的角色。&lt;/p&gt;
&lt;p&gt;默认情况下，所有带有 &lt;code&gt;pgbouncer: true&lt;/code&gt; 标记的用户都会被添加到 &lt;a href="https://pigsty.cc/docs/concept/arch/pgsql#pgbouncer"&gt;&lt;strong&gt;Pgbouncer&lt;/strong&gt;&lt;/a&gt; 连接池用户列表中。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="定义用户"&gt;定义用户&lt;/h2&gt;
&lt;p&gt;下面是 Pigsty 演示环境中默认集群 &lt;code&gt;pg-meta&lt;/code&gt; 中的业务用户定义：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;pg-meta&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;hosts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;{&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;10.10.10.10&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;{&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_seq: 1, pg_role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;primary } }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;vars&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_cluster&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;pg-meta&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_users&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- {&lt;span class="nt"&gt;name: dbuser_meta ,password: DBUser.Meta ,pgbouncer: true ,roles: [dbrole_admin] ,comment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;pigsty admin user }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- {&lt;span class="nt"&gt;name: dbuser_view ,password: DBUser.Viewer ,pgbouncer: true ,roles: [dbrole_readonly] ,comment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;read-only viewer for meta database }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- {&lt;span class="nt"&gt;name: dbuser_grafana ,password: DBUser.Grafana ,pgbouncer: true ,roles: [dbrole_admin] ,comment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;admin user for grafana database }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- {&lt;span class="nt"&gt;name: dbuser_bytebase ,password: DBUser.Bytebase ,pgbouncer: true ,roles: [dbrole_admin] ,comment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;admin user for bytebase database }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- {&lt;span class="nt"&gt;name: dbuser_kong ,password: DBUser.Kong ,pgbouncer: true ,roles: [dbrole_admin] ,comment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;admin user for kong api gateway }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- {&lt;span class="nt"&gt;name: dbuser_gitea ,password: DBUser.Gitea ,pgbouncer: true ,roles: [dbrole_admin] ,comment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;admin user for gitea service }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- {&lt;span class="nt"&gt;name: dbuser_wiki ,password: DBUser.Wiki ,pgbouncer: true ,roles: [dbrole_admin] ,comment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;admin user for wiki.js service }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- {&lt;span class="nt"&gt;name: dbuser_noco ,password: DBUser.Noco ,pgbouncer: true ,roles: [dbrole_admin] ,comment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;admin user for nocodb service }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- {&lt;span class="nt"&gt;name: dbuser_remove ,state: absent } # 使用 state&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;absent 删除用户&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;每个用户/角色定义都是一个复杂对象，可能包括以下字段，除了 &lt;code&gt;name&lt;/code&gt; 字段外，其他字段均为可选字段：&lt;/p&gt;</description></item><item><title>TINY 模板</title><link>https://pigsty.cc/docs/pgsql/template/tiny/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/pgsql/template/tiny/</guid><description>&lt;p&gt;&lt;code&gt;tiny.yml&lt;/code&gt; 是针对&lt;strong&gt;微型实例&lt;/strong&gt;和资源受限环境优化的配置模板。适用于 1-3 核 CPU 的服务器，特点是最小化资源占用、保守的内存分配、禁用并行查询。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;建议同时使用 &lt;a href="https://pigsty.cc/docs/node/param#node_tune"&gt;&lt;strong&gt;&lt;code&gt;node_tune&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt; = &lt;code&gt;tiny&lt;/code&gt; 进行操作系统级别的配套调优。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="适用场景"&gt;适用场景&lt;/h2&gt;
&lt;p&gt;TINY 模板适用于以下场景：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;开发测试&lt;/strong&gt;：本地开发环境、CI/CD 测试&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;低配虚拟机&lt;/strong&gt;：1-2 核 CPU、1-4GB 内存的云主机&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;边缘计算&lt;/strong&gt;：树莓派、嵌入式设备&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Demo 演示&lt;/strong&gt;：快速体验 Pigsty 功能&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;个人项目&lt;/strong&gt;：资源有限的个人博客、小型应用&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;资源限制&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1-3 核 CPU&lt;/li&gt;
&lt;li&gt;1-8 GB 内存&lt;/li&gt;
&lt;li&gt;有限的磁盘空间&lt;/li&gt;
&lt;li&gt;可能与其他服务共享资源&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="使用方法"&gt;使用方法&lt;/h2&gt;
&lt;p&gt;在集群定义中指定 &lt;a href="https://pigsty.cc/docs/pgsql/param#pg_conf"&gt;&lt;strong&gt;&lt;code&gt;pg_conf&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt; = &lt;code&gt;tiny.yml&lt;/code&gt;：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;pg-dev&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;hosts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;10.10.10.11&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;{&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_seq: 1, pg_role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;primary }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;vars&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_cluster&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;pg-dev&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_conf&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;tiny.yml &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# PostgreSQL 微型实例模板&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;node_tune&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;tiny &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 操作系统微型实例调优&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;单节点开发环境：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;pg-local&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;hosts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;127.0.0.1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;{&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_seq: 1, pg_role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;primary }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;vars&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_cluster&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;pg-local&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_conf&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;tiny.yml &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# PostgreSQL 微型实例模板&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;node_tune&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;tiny &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 操作系统微型实例调优&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="参数详解"&gt;参数详解&lt;/h2&gt;
&lt;h3 id="连接管理"&gt;连接管理&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;max_connections: 250 # OLTP&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;500-1000&lt;/span&gt;&lt;span class="l"&gt;，减少连接开销&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;superuser_reserved_connections&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;微型实例不需要处理大量并发连接，250 个连接足以应对开发测试场景。&lt;/p&gt;</description></item><item><title>Pgbouncer 连接池管理</title><link>https://pigsty.cc/docs/pgsql/admin/pgbouncer/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/pgsql/admin/pgbouncer/</guid><description>&lt;h2 id="概览"&gt;概览&lt;/h2&gt;
&lt;p&gt;Pigsty 使用 &lt;a href="https://www.pgbouncer.org/"&gt;&lt;strong&gt;Pgbouncer&lt;/strong&gt;&lt;/a&gt; 作为 PostgreSQL 的连接池中间件，默认监听 &lt;code&gt;6432&lt;/code&gt; 端口，代理访问本机 &lt;code&gt;5432&lt;/code&gt; 端口上的 PostgreSQL 实例。&lt;/p&gt;
&lt;p&gt;这是一个 &lt;strong&gt;可选组件&lt;/strong&gt;，如果您并没有海量连接，也不需要事务池化与查询监控指标，可以关闭连接池，直连数据库，或者保留但不使用。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="用户与数据库管理"&gt;用户与数据库管理&lt;/h2&gt;
&lt;p&gt;Pgbouncer 中的用户和数据库由 Pigsty 自动管理，并在 &lt;a href="https://pigsty.cc/docs/pgsql/admin/db"&gt;&lt;strong&gt;创建数据库&lt;/strong&gt;&lt;/a&gt; 与 &lt;a href="https://pigsty.cc/docs/pgsql/admin/user"&gt;&lt;strong&gt;创建用户&lt;/strong&gt;&lt;/a&gt; 时自动应用 &lt;a href="https://pigsty.cc/docs/pgsql/config/db"&gt;&lt;strong&gt;数据库配置&lt;/strong&gt;&lt;/a&gt; 与 &lt;a href="https://pigsty.cc/docs/pgsql/config/user"&gt;&lt;strong&gt;用户配置&lt;/strong&gt;&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;数据库管理&lt;/strong&gt;：在 &lt;a href="https://pigsty.cc/docs/pgsql/param#pg_databases"&gt;&lt;strong&gt;&lt;code&gt;pg_databases&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt; 中定义的数据库，默认会自动添加到 Pgbouncer。设置 &lt;a href="https://pigsty.cc/docs/pgsql/admin/db#%E8%BF%9E%E6%8E%A5%E6%B1%A0%E7%AE%A1%E7%90%86"&gt;&lt;strong&gt;&lt;code&gt;pgbouncer: false&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt; 可以排除特定数据库。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;pg_databases&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;mydb &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 默认加入连接池&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pool_auth_user&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;dbuser_meta&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 可选，认证查询用户（配合 pgbouncer_auth_query）&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pool_mode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;transaction &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 数据库级池化模式&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pool_size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;64&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 默认池大小&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pool_reserve&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;32&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 保留池大小&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pool_size_min&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 最小池大小&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pool_connlimit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;100&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 最大数据库连接数&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;internal&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pgbouncer&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 不加入连接池&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;用户管理&lt;/strong&gt;：在 &lt;a href="https://pigsty.cc/docs/pgsql/param#pg_users"&gt;&lt;strong&gt;&lt;code&gt;pg_users&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt; 中定义的用户，需要显式设置 &lt;a href="https://pigsty.cc/docs/pgsql/admin/user#%E8%BF%9E%E6%8E%A5%E6%B1%A0%E7%AE%A1%E7%90%86"&gt;&lt;strong&gt;&lt;code&gt;pgbouncer: true&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt; 才会加入连接池用户列表。&lt;/p&gt;</description></item><item><title>数据库</title><link>https://pigsty.cc/docs/pgsql/config/db/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/pgsql/config/db/</guid><description>&lt;blockquote&gt;
&lt;p&gt;在本文中，“数据库”（Database） 指的是使用 SQL 命令 &lt;code&gt;CREATE DATABASE&lt;/code&gt; 创建的，数据库集簇内的逻辑对象。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;一组 PostgreSQL 服务器可以同时服务于多个 &lt;strong&gt;数据库&lt;/strong&gt; （Database）。在 Pigsty 中，你可以在集群配置中 &lt;a href="#%E5%AE%9A%E4%B9%89%E6%95%B0%E6%8D%AE%E5%BA%93"&gt;&lt;strong&gt;定义&lt;/strong&gt;&lt;/a&gt; 好所需的数据库。&lt;/p&gt;
&lt;p&gt;Pigsty 会对默认模板数据库&lt;code&gt;template1&lt;/code&gt;进行修改与定制，创建默认模式，安装默认扩展，配置默认权限，新创建的数据库默认会从&lt;code&gt;template1&lt;/code&gt;继承这些设置。
您也可以通过 &lt;a href="#template"&gt;&lt;strong&gt;&lt;code&gt;template&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt; 参数指定其他模板数据库，实现瞬间 &lt;a href="https://pigsty.cc/docs/pgsql/admin/db#%E5%85%8B%E9%9A%86%E6%95%B0%E6%8D%AE%E5%BA%93"&gt;&lt;strong&gt;数据库克隆&lt;/strong&gt;&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;默认情况下，所有业务数据库都会被 1:1 添加到 &lt;a href="https://pigsty.cc/docs/concept/arch/pgsql#pgbouncer"&gt;&lt;strong&gt;Pgbouncer&lt;/strong&gt;&lt;/a&gt; &lt;a href="#%E8%BF%9E%E6%8E%A5%E6%B1%A0"&gt;&lt;strong&gt;连接池&lt;/strong&gt;&lt;/a&gt; 中；&lt;a href="https://pigsty.cc/docs/concept/arch/pgsql#pg_exporter"&gt;&lt;strong&gt;&lt;code&gt;pg_exporter&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt; 默认会通过 &lt;strong&gt;自动发现&lt;/strong&gt; 机制查找所有业务数据库并进行库内对象监控。
所有数据库也会添加到所有 &lt;a href="https://pigsty.cc/docs/concept/arch/node#infra%E8%8A%82%E7%82%B9"&gt;&lt;strong&gt;INFRA节点&lt;/strong&gt;&lt;/a&gt; 上的 &lt;a href="https://pigsty.cc/docs/concept/arch/infra#grafana"&gt;&lt;strong&gt;Grafana&lt;/strong&gt;&lt;/a&gt; 中，
注册为 PostgreSQL 数据源供 PGCAT 监控面板使用。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="定义数据库"&gt;定义数据库&lt;/h2&gt;
&lt;p&gt;业务数据库定义在数据库集群参数 &lt;a href="https://pigsty.cc/docs/pgsql/param#pg_databases"&gt;&lt;strong&gt;&lt;code&gt;pg_databases&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt; 中，这是一个数据库定义构成的对象数组。
在集群初始化时，数组内的数据库按照 &lt;strong&gt;定义顺序&lt;/strong&gt; 依次创建，因此后面定义的数据库可以使用先前定义的数据库作为&lt;strong&gt;模板&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;下面是 Pigsty 演示环境中默认集群 &lt;code&gt;pg-meta&lt;/code&gt; 中的数据库定义：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;pg-meta&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;hosts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;{&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;10.10.10.10&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;{&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_seq: 1, pg_role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;primary } }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;vars&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_cluster&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;pg-meta&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_databases&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- {&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name: meta ,baseline: cmdb.sql ,comment: pigsty meta database ,schemas: [pigsty] ,extensions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;{&lt;span class="nt"&gt;name: postgis, schema&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;public}, {name: timescaledb}]}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- {&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name: grafana ,owner: dbuser_grafana ,revokeconn: true ,comment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;grafana primary database }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- {&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name: bytebase ,owner: dbuser_bytebase ,revokeconn: true ,comment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;bytebase primary database }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- {&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name: kong ,owner: dbuser_kong ,revokeconn: true ,comment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;kong the api gateway database }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- {&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name: gitea ,owner: dbuser_gitea ,revokeconn: true ,comment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gitea meta database }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- {&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name: wiki ,owner: dbuser_wiki ,revokeconn: true ,comment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;wiki meta database }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- {&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name: noco ,owner: dbuser_noco ,revokeconn: true ,comment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;nocodb database }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;每个数据库定义都是一个复杂对象，可能包括以下字段，除了 &lt;code&gt;name&lt;/code&gt; 字段外，其他字段均为可选字段：&lt;/p&gt;</description></item><item><title>HBA 规则</title><link>https://pigsty.cc/docs/pgsql/config/hba/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/pgsql/config/hba/</guid><description>&lt;h2 id="概述"&gt;概述&lt;/h2&gt;
&lt;p&gt;HBA（Host-Based Authentication）控制&amp;quot;谁可以从哪里、以什么方式连接到数据库&amp;quot;。
Pigsty 通过 &lt;a href="#pg_default_hba_rules"&gt;&lt;strong&gt;&lt;code&gt;pg_default_hba_rules&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt; 与 &lt;a href="#pg_hba_rules"&gt;&lt;strong&gt;&lt;code&gt;pg_hba_rules&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt; 让 HBA 规则也能以声明式配置形式管理。&lt;/p&gt;
&lt;p&gt;Pigsty 在集群初始化或 HBA 刷新时渲染以下配置文件：&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th style="text-align: left"&gt;配置文件&lt;/th&gt;
 &lt;th style="text-align: left"&gt;路径&lt;/th&gt;
 &lt;th style="text-align: left"&gt;说明&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;PostgreSQL HBA&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;/pg/data/pg_hba.conf&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;PostgreSQL 服务器的 HBA 规则&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;Pgbouncer HBA&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;/etc/pgbouncer/pgb_hba.conf&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;连接池 Pgbouncer 的 HBA 规则&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;HBA 规则由以下参数控制：&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th style="text-align: left"&gt;参数&lt;/th&gt;
 &lt;th style="text-align: left"&gt;层级&lt;/th&gt;
 &lt;th style="text-align: left"&gt;说明&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="#pg_default_hba_rules"&gt;&lt;code&gt;pg_default_hba_rules&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;G&lt;/td&gt;
 &lt;td style="text-align: left"&gt;PostgreSQL 全局默认 HBA 规则&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="#pg_hba_rules"&gt;&lt;code&gt;pg_hba_rules&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;G/C/I&lt;/td&gt;
 &lt;td style="text-align: left"&gt;PostgreSQL 集群/实例级追加规则&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="#pgb_default_hba_rules"&gt;&lt;code&gt;pgb_default_hba_rules&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;G&lt;/td&gt;
 &lt;td style="text-align: left"&gt;Pgbouncer 全局默认 HBA 规则&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="#pgb_hba_rules"&gt;&lt;code&gt;pgb_hba_rules&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;G/C/I&lt;/td&gt;
 &lt;td style="text-align: left"&gt;Pgbouncer 集群/实例级追加规则&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;规则支持以下特性：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;按角色过滤&lt;/strong&gt;：规则支持 &lt;code&gt;role&lt;/code&gt; 字段，根据实例的 &lt;code&gt;pg_role&lt;/code&gt; 自动筛选生效&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;按顺序排序&lt;/strong&gt;：规则支持 &lt;code&gt;order&lt;/code&gt; 字段，控制规则在最终配置文件中的位置&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;两种写法&lt;/strong&gt;：支持别名形式（简化语法）和原始形式（直接 HBA 文本）&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="刷新-hba"&gt;刷新 HBA&lt;/h2&gt;
&lt;p&gt;修改配置后，需要重新渲染配置文件并让服务重载：&lt;/p&gt;</description></item><item><title>参数配置</title><link>https://pigsty.cc/docs/pgsql/config/param/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/pgsql/config/param/</guid><description>&lt;p&gt;PostgreSQL 参数可以在多个层级进行配置，不同层级的参数设置具有不同的作用范围和优先级。
Pigsty 支持在四个层级配置 PostgreSQL 参数，从全局到局部依次为：&lt;/p&gt;
&lt;table class="full-width"&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;层级&lt;/th&gt;
 &lt;th&gt;作用范围&lt;/th&gt;
 &lt;th&gt;配置方式&lt;/th&gt;
 &lt;th&gt;存储位置&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;a href="#%E9%9B%86%E7%BE%A4%E7%BA%A7%E5%8F%82%E6%95%B0"&gt;&lt;strong&gt;集群级&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;整个集群所有实例&lt;/td&gt;
 &lt;td&gt;Patroni DCS / 调优模板&lt;/td&gt;
 &lt;td&gt;etcd + &lt;code&gt;postgresql.conf&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;a href="#%E5%AE%9E%E4%BE%8B%E7%BA%A7%E5%8F%82%E6%95%B0"&gt;&lt;strong&gt;实例级&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;单个 PostgreSQL 实例&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;pg_parameters&lt;/code&gt; / &lt;code&gt;ALTER SYSTEM&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;postgresql.auto.conf&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;a href="#%E6%95%B0%E6%8D%AE%E5%BA%93%E7%BA%A7%E5%8F%82%E6%95%B0"&gt;&lt;strong&gt;数据库级&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;特定数据库的所有会话&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;pg_databases[].parameters&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;pg_db_role_setting&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;a href="#%E7%94%A8%E6%88%B7%E7%BA%A7%E5%8F%82%E6%95%B0"&gt;&lt;strong&gt;用户级&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;特定用户的所有会话&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;pg_users[].parameters&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;pg_db_role_setting&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;参数优先级从低到高：&lt;strong&gt;集群级 &amp;lt; 实例级 &amp;lt; 数据库级 &amp;lt; 用户级 &amp;lt; 会话级&lt;/strong&gt;（&lt;code&gt;SET&lt;/code&gt; 命令）。
高优先级的设置会覆盖低优先级的设置。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;关于 PostgreSQL 参数的完整说明，请参阅 &lt;a href="https://www.postgresql.org/docs/current/runtime-config.html"&gt;&lt;strong&gt;PostgreSQL 官方文档：服务器配置&lt;/strong&gt;&lt;/a&gt;。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="集群级参数"&gt;集群级参数&lt;/h2&gt;
&lt;p&gt;集群级参数是整个 PostgreSQL 集群共享的配置，所有实例（主库和从库）都会使用相同的参数值。
在 Pigsty 中，集群级参数通过 &lt;a href="https://pigsty.cc/docs/pgsql/admin/patroni"&gt;&lt;strong&gt;Patroni&lt;/strong&gt;&lt;/a&gt; 管理，存储在分布式配置存储（DCS，默认为 etcd）中。&lt;/p&gt;
&lt;p&gt;Pigsty 提供了四种预置的 &lt;a href="https://pigsty.cc/docs/pgsql/template"&gt;&lt;strong&gt;Patroni 参数优化模板&lt;/strong&gt;&lt;/a&gt;，针对不同的使用场景进行了优化，通过 &lt;a href="https://pigsty.cc/docs/pgsql/param#pg_conf"&gt;&lt;strong&gt;&lt;code&gt;pg_conf&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt; 参数指定：&lt;/p&gt;
&lt;table class="full-width"&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;模板&lt;/th&gt;
 &lt;th&gt;适用场景&lt;/th&gt;
 &lt;th&gt;特点&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;a href="https://pigsty.cc/docs/pgsql/template/oltp"&gt;&lt;strong&gt;&lt;code&gt;oltp.yml&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;在线事务处理&lt;/td&gt;
 &lt;td&gt;低延迟、高并发，默认推荐&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;a href="https://pigsty.cc/docs/pgsql/template/olap"&gt;&lt;strong&gt;&lt;code&gt;olap.yml&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;在线分析处理&lt;/td&gt;
 &lt;td&gt;大查询、高吞吐，适合数仓&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;a href="https://pigsty.cc/docs/pgsql/template/crit"&gt;&lt;strong&gt;&lt;code&gt;crit.yml&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;核心金融业务&lt;/td&gt;
 &lt;td&gt;最大持久性，牺牲部分性能换取安全&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;a href="https://pigsty.cc/docs/pgsql/template/tiny"&gt;&lt;strong&gt;&lt;code&gt;tiny.yml&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;微型实例&lt;/td&gt;
 &lt;td&gt;资源受限环境，适合开发测试&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;调优模板文件位于 Pigsty 安装目录的 &lt;code&gt;roles/pgsql/templates/&lt;/code&gt; 目录下，包含了根据硬件规格自动计算的参数值。
这些模板会在集群初始化时渲染为 Patroni 配置文件 &lt;code&gt;/etc/patroni/patroni.yml&lt;/code&gt;。更多详情请参阅 &lt;a href="https://pigsty.cc/docs/pgsql/template"&gt;&lt;strong&gt;场景模板&lt;/strong&gt;&lt;/a&gt;。&lt;/p&gt;</description></item><item><title>访问控制</title><link>https://pigsty.cc/docs/pgsql/config/acl/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/pgsql/config/acl/</guid><description>&lt;blockquote&gt;
&lt;p&gt;访问控制由“角色体系 + 权限模板 + HBA”共同决定。本节聚焦于如何通过配置参数声明角色与对象权限。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Pigsty 预置了一套精简的 ACL 模型，全部通过以下参数描述：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;pg_default_roles&lt;/code&gt;：系统角色与系统用户。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pg_users&lt;/code&gt;：业务用户与角色。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pg_default_privileges&lt;/code&gt;：管理员/属主新建对象时的默认权限。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pg_revoke_public&lt;/code&gt;、&lt;code&gt;pg_default_schemas&lt;/code&gt;、&lt;code&gt;pg_default_extensions&lt;/code&gt;：控制 &lt;code&gt;template1&lt;/code&gt; 的默认行为。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;理解这些参数后，你就可以写出完全可复现的权限配置。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="默认角色体系pg_default_roles"&gt;默认角色体系（pg_default_roles）&lt;/h2&gt;
&lt;p&gt;默认包含 4 个业务角色 + 4 个系统用户：&lt;/p&gt;
&lt;table class="full-width"&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;名称&lt;/th&gt;
 &lt;th&gt;类型&lt;/th&gt;
 &lt;th&gt;说明&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;dbrole_readonly&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;NOLOGIN&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;所有业务共用，拥有 SELECT/USAGE&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;dbrole_readwrite&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;NOLOGIN&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;继承只读角色，并拥有 INSERT/UPDATE/DELETE&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;dbrole_admin&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;NOLOGIN&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;继承 &lt;code&gt;pg_monitor&lt;/code&gt; + 读写角色，可建对象和触发器&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;dbrole_offline&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;NOLOGIN&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;受限只读角色，仅允许访问离线实例&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;postgres&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;用户&lt;/td&gt;
 &lt;td&gt;系统超级用户，与 &lt;code&gt;pg_dbsu&lt;/code&gt; 同名&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;replicator&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;用户&lt;/td&gt;
 &lt;td&gt;用于流复制与备份，继承监控与只读权限&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;dbuser_dba&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;用户&lt;/td&gt;
 &lt;td&gt;主要管理员账号，同时同步到 pgbouncer&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;dbuser_monitor&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;用户&lt;/td&gt;
 &lt;td&gt;监控账号，具备 &lt;code&gt;pg_monitor&lt;/code&gt; 权限，默认记录慢 SQL&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;这些定义位于 &lt;code&gt;pg_default_roles&lt;/code&gt;，理论上可以自定义，但若要替换名称，必须同步更新 HBA/ACL/脚本中的引用。&lt;/p&gt;
&lt;p&gt;示例：为离线任务额外加一个 &lt;code&gt;dbrole_etl&lt;/code&gt;：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;pg_default_roles&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- {&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name: dbrole_etl, login: false, roles: [dbrole_offline], comment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;etl read-only role&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;}&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- {&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name: dbrole_admin, login: false, roles&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="l"&gt;pg_monitor, dbrole_readwrite, dbrole_etl] }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;blockquote&gt;
&lt;p&gt;效果：所有继承 &lt;code&gt;dbrole_admin&lt;/code&gt; 的用户自动拥有 &lt;code&gt;dbrole_etl&lt;/code&gt; 权限，可访问 offline 实例并执行 ETL。&lt;/p&gt;</description></item><item><title>管理 PostgreSQL 组件服务</title><link>https://pigsty.cc/docs/pgsql/admin/component/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/pgsql/admin/component/</guid><description>&lt;h2 id="概述"&gt;概述&lt;/h2&gt;
&lt;p&gt;Pigsty 的 PGSQL 模块由多个组件构成，每个组件都以 systemd 服务的形式运行在节点上。（&lt;a href="https://pigsty.cc/docs/concept/arch/pgsql#pgbackrest"&gt;&lt;strong&gt;pgbackrest&lt;/strong&gt;&lt;/a&gt; 除外）&lt;/p&gt;
&lt;p&gt;了解这些组件及其管理方式，对于维护生产环境中的 PostgreSQL 集群非常重要。&lt;/p&gt;
&lt;table class="full-width"&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th style="text-align: left"&gt;组件&lt;/th&gt;
 &lt;th style="text-align: left"&gt;端口&lt;/th&gt;
 &lt;th style="text-align: left"&gt;服务名&lt;/th&gt;
 &lt;th style="text-align: left"&gt;说明&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;Patroni&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;strong&gt;&lt;code&gt;8008&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;patroni&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;高可用管理器，负责 PostgreSQL 的生命周期管理&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;PostgreSQL&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;strong&gt;&lt;code&gt;5432&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;postgres&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;占位服务，默认不使用，应急使用&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;Pgbouncer&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;strong&gt;&lt;code&gt;6432&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;pgbouncer&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;连接池中间件，业务流量入口&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;PgBackRest&lt;/td&gt;
 &lt;td style="text-align: left"&gt;-&lt;/td&gt;
 &lt;td style="text-align: left"&gt;-&lt;/td&gt;
 &lt;td style="text-align: left"&gt;pgBackRest 没有守护服务&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;HAProxy&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;strong&gt;&lt;code&gt;543x&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;haproxy&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;负载均衡器，暴露数据库服务&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;pg_exporter&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;strong&gt;&lt;code&gt;9630&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;pg_exporter&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;PostgreSQL 监控指标导出器&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;pgbouncer_exporter&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;strong&gt;&lt;code&gt;9631&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;pgbouncer_exporter&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;Pgbouncer 监控指标导出器&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;vip-manager&lt;/td&gt;
 &lt;td style="text-align: left"&gt;-&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;vip-manager&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;可选，管理 L2 VIP 地址漂移&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="alert alert-warning" role="alert"&gt;&lt;div class="h4 alert-heading" role="heading"&gt;重要提示&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;不要直接使用 systemctl 管理 PostgreSQL 服务&lt;/strong&gt;。PostgreSQL 由 Patroni 托管，应通过 &lt;a href="https://pigsty.cc/docs/pgsql/admin/patroni"&gt;&lt;strong&gt;&lt;code&gt;patronictl&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt; 命令进行管理。
直接操作 PostgreSQL 可能导致 Patroni 状态不一致，触发意外的故障转移。&lt;code&gt;postgres&lt;/code&gt; 服务是 Patroni 服务失效时的应急逃生窗口。&lt;/p&gt;</description></item><item><title>管理 PostgreSQL 定时任务</title><link>https://pigsty.cc/docs/pgsql/admin/crontab/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/pgsql/admin/crontab/</guid><description>&lt;p&gt;Pigsty 使用 crontab 来管理定时任务，用于执行例行备份，冻结老化事务，重整膨胀表索引等维护工作。&lt;/p&gt;
&lt;h2 id="速查手册"&gt;速查手册&lt;/h2&gt;
&lt;table class="full-width"&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th style="text-align: left"&gt;操作&lt;/th&gt;
 &lt;th style="text-align: left"&gt;快捷命令&lt;/th&gt;
 &lt;th style="text-align: left"&gt;说明&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="#%E9%85%8D%E7%BD%AE%E5%AE%9A%E6%97%B6%E4%BB%BB%E5%8A%A1"&gt;&lt;strong&gt;配置定时任务&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;./pgsql.yml -t pg_crontab -l &amp;lt;cls&amp;gt;&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;应用 pg_crontab 配置&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="#%E6%9F%A5%E7%9C%8B%E5%AE%9A%E6%97%B6%E4%BB%BB%E5%8A%A1"&gt;&lt;strong&gt;查看定时任务&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;crontab -l&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;以 postgres 用户查看&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="#pg-backup"&gt;&lt;strong&gt;物理备份&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;pg-backup [full|diff|incr]&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;使用 pgBackRest 执行备份&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="#pg-vacuum"&gt;&lt;strong&gt;事务冻结&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;pg-vacuum [database...]&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;冻结老化事务，预防 XID 回卷&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="#pg-repack"&gt;&lt;strong&gt;膨胀治理&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;pg-repack [database...]&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;在线重整膨胀的表与索引&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;其他管理任务，请参考：&lt;a href="https://pigsty.cc/docs/pgsql/backup/"&gt;&lt;strong&gt;备份管理&lt;/strong&gt;&lt;/a&gt;，&lt;a href="https://pigsty.cc/docs/pgsql/monitor/"&gt;&lt;strong&gt;监控系统&lt;/strong&gt;&lt;/a&gt;，&lt;a href="https://pigsty.cc/docs/pgsql/admin/patroni"&gt;&lt;strong&gt;高可用管理&lt;/strong&gt;&lt;/a&gt;。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="配置定时任务"&gt;配置定时任务&lt;/h2&gt;
&lt;p&gt;使用 &lt;a href="https://pigsty.cc/docs/pgsql/param/#pg_crontab"&gt;&lt;strong&gt;&lt;code&gt;pg_crontab&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt; 参数配置 PostgreSQL 数据库超级用户（&lt;a href="https://pigsty.cc/docs/pgsql/param#pg_dbsu"&gt;&lt;strong&gt;&lt;code&gt;pg_dbsu&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt;，默认 &lt;code&gt;postgres&lt;/code&gt;）的定时任务。&lt;/p&gt;
&lt;p&gt;下面 &lt;code&gt;pg-meta&lt;/code&gt; 集群配置了每天凌晨1点进行全量备份的定时任务，&lt;code&gt;pg-test&lt;/code&gt; 配置了每周一全量备份，其余日期增量备份的定时任务。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;pg-meta&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;hosts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;{&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;10.10.10.10&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;{&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_seq: 1, pg_role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;primary } }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;vars&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_cluster&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;pg-meta&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_crontab&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="s1"&gt;&amp;#39;00 01 * * * /pg/bin/pg-backup&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;pg-test&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;hosts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;10.10.10.11&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;{&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_seq: 1, pg_role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;primary }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;10.10.10.12&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;{&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_seq: 2, pg_role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;replica }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;vars&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_cluster&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;pg-test&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_crontab&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="s1"&gt;&amp;#39;00 01 * * 1 /pg/bin/pg-backup full&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="s1"&gt;&amp;#39;00 01 * * 2,3,4,5,6,7 /pg/bin/pg-backup&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;推荐的维护计划&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>升级 PostgreSQL 大小版本</title><link>https://pigsty.cc/docs/pgsql/admin/upgrade/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/pgsql/admin/upgrade/</guid><description>&lt;h2 id="快速上手"&gt;快速上手&lt;/h2&gt;
&lt;p&gt;PostgreSQL 版本升级分为两种类型：&lt;strong&gt;小版本升级&lt;/strong&gt; 和 &lt;strong&gt;大版本升级&lt;/strong&gt;，两者的风险和复杂度差异很大。&lt;/p&gt;
&lt;table class="full-width"&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th style="text-align: left"&gt;类型&lt;/th&gt;
 &lt;th style="text-align: left"&gt;示例&lt;/th&gt;
 &lt;th style="text-align: left"&gt;停机时间&lt;/th&gt;
 &lt;th style="text-align: left"&gt;数据兼容性&lt;/th&gt;
 &lt;th style="text-align: left"&gt;风险等级&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;小版本升级&lt;/td&gt;
 &lt;td style="text-align: left"&gt;17.2 → 17.3&lt;/td&gt;
 &lt;td style="text-align: left"&gt;秒级（滚动重启）&lt;/td&gt;
 &lt;td style="text-align: left"&gt;完全兼容&lt;/td&gt;
 &lt;td style="text-align: left"&gt;低&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;大版本升级&lt;/td&gt;
 &lt;td style="text-align: left"&gt;17 → 18&lt;/td&gt;
 &lt;td style="text-align: left"&gt;分钟级&lt;/td&gt;
 &lt;td style="text-align: left"&gt;需要升级数据目录&lt;/td&gt;
 &lt;td style="text-align: left"&gt;中&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;




&lt;ul class="nav nav-tabs" id="tabs-0" role="tablist"&gt;
 &lt;li class="nav-item"&gt;
 &lt;button class="nav-link active"
 id="tabs-00-00-tab" data-bs-toggle="tab" data-bs-target="#tabs-00-00" role="tab"
 data-td-tp-persist="小版本" aria-controls="tabs-00-00" aria-selected="true"&gt;
 小版本
 &lt;/button&gt;
 &lt;/li&gt;&lt;li class="nav-item"&gt;
 &lt;button class="nav-link"
 id="tabs-00-01-tab" data-bs-toggle="tab" data-bs-target="#tabs-00-01" role="tab"
 data-td-tp-persist="大版本" aria-controls="tabs-00-01" aria-selected="false"&gt;
 大版本
 &lt;/button&gt;
 &lt;/li&gt;&lt;li class="nav-item"&gt;
 &lt;button class="nav-link"
 id="tabs-00-02-tab" data-bs-toggle="tab" data-bs-target="#tabs-00-02" role="tab"
 data-td-tp-persist="扩展" aria-controls="tabs-00-02" aria-selected="false"&gt;
 扩展
 &lt;/button&gt;
 &lt;/li&gt;
&lt;/ul&gt;

&lt;div class="tab-content" id="tabs-0-content"&gt;
 &lt;div class="tab-body tab-pane fade show active"
 id="tabs-00-00" role="tabpanel" aria-labelled-by="tabs-00-00-tab" tabindex="0"&gt;
 &lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 滚动升级：先从库后主库&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ansible &amp;lt;cls&amp;gt; -b -a &lt;span class="s1"&gt;&amp;#39;yum upgrade -y postgresql17*&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pg restart --role replica --force &amp;lt;cls&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pg switchover &amp;lt;cls&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pg restart &amp;lt;cls&amp;gt; &amp;lt;old-primary&amp;gt; --force
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
 &lt;/div&gt;
 &lt;div class="tab-body tab-pane fade"
 id="tabs-00-01" role="tabpanel" aria-labelled-by="tabs-00-01-tab" tabindex="0"&gt;
 &lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 推荐：逻辑复制迁移&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;bin/pgsql-add pg-new &lt;span class="c1"&gt;# 创建新版本集群&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 配置逻辑复制同步数据...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 切换流量到新集群&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
 &lt;/div&gt;
 &lt;div class="tab-body tab-pane fade"
 id="tabs-00-02" role="tabpanel" aria-labelled-by="tabs-00-02-tab" tabindex="0"&gt;
 &lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ansible &amp;lt;cls&amp;gt; -b -a &lt;span class="s1"&gt;&amp;#39;yum upgrade -y postgis36_17*&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;psql -c &lt;span class="s1"&gt;&amp;#39;ALTER EXTENSION postgis UPDATE;&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
 &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;关于在线迁移的详细流程，请参考 &lt;a href="https://pigsty.cc/docs/pgsql/migration"&gt;&lt;strong&gt;在线迁移&lt;/strong&gt;&lt;/a&gt; 文档。&lt;/p&gt;</description></item><item><title>管理 PostgreSQL 扩展插件</title><link>https://pigsty.cc/docs/pgsql/admin/ext/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/pgsql/admin/ext/</guid><description>&lt;h2 id="快速上手"&gt;快速上手&lt;/h2&gt;
&lt;p&gt;Pigsty 提供 &lt;a href="https://pigsty.cc/ext/list/"&gt;&lt;strong&gt;510 扩展&lt;/strong&gt;&lt;/a&gt;，使用扩展涉及四个步骤：&lt;strong&gt;下载&lt;/strong&gt;、&lt;strong&gt;安装&lt;/strong&gt;、&lt;strong&gt;配置&lt;/strong&gt;、&lt;strong&gt;启用&lt;/strong&gt;。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;pg-meta&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;hosts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;{&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;10.10.10.10&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;{&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_seq: 1, pg_role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;primary } }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;vars&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_cluster&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;pg-meta&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_extensions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;postgis, timescaledb, pgvector ] &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# &amp;lt;--- 安装扩展软件包&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_libs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;timescaledb, pg_stat_statements, auto_explain&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# &amp;lt;--- 配置预加载扩展&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_databases&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;meta&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;extensions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;postgis, timescaledb, vector ] &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# &amp;lt;--- 在数据库中启用&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;ul class="nav nav-tabs" id="tabs-0" role="tablist"&gt;
 &lt;li class="nav-item"&gt;
 &lt;button class="nav-link active"
 id="tabs-00-00-tab" data-bs-toggle="tab" data-bs-target="#tabs-00-00" role="tab"
 data-td-tp-persist="脚本" aria-controls="tabs-00-00" aria-selected="true"&gt;
 脚本
 &lt;/button&gt;
 &lt;/li&gt;&lt;li class="nav-item"&gt;
 &lt;button class="nav-link"
 id="tabs-00-01-tab" data-bs-toggle="tab" data-bs-target="#tabs-00-01" role="tab"
 data-td-tp-persist="剧本" aria-controls="tabs-00-01" aria-selected="false"&gt;
 剧本
 &lt;/button&gt;
 &lt;/li&gt;&lt;li class="nav-item"&gt;
 &lt;button class="nav-link"
 id="tabs-00-02-tab" data-bs-toggle="tab" data-bs-target="#tabs-00-02" role="tab"
 data-td-tp-persist="示例" aria-controls="tabs-00-02" aria-selected="false"&gt;
 示例
 &lt;/button&gt;
 &lt;/li&gt;
&lt;/ul&gt;

&lt;div class="tab-content" id="tabs-0-content"&gt;
 &lt;div class="tab-body tab-pane fade show active"
 id="tabs-00-00" role="tabpanel" aria-labelled-by="tabs-00-00-tab" tabindex="0"&gt;
 &lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;bin/pgsql-ext &amp;lt;cls&amp;gt; &lt;span class="c1"&gt;# 在 &amp;lt;cls&amp;gt; 集群上安装配置中定义的扩展&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;bin/pgsql-ext &amp;lt;cls&amp;gt; &lt;span class="o"&gt;[&lt;/span&gt;ext...&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="c1"&gt;# 在 &amp;lt;cls&amp;gt; 集群上安装命令行参数给出的扩展&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
 &lt;/div&gt;
 &lt;div class="tab-body tab-pane fade"
 id="tabs-00-01" role="tabpanel" aria-labelled-by="tabs-00-01-tab" tabindex="0"&gt;
 &lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./pgsql.yml -l pg-meta -t pg_ext &lt;span class="c1"&gt;# 使用剧本安装扩展&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
 &lt;/div&gt;
 &lt;div class="tab-body tab-pane fade"
 id="tabs-00-02" role="tabpanel" aria-labelled-by="tabs-00-02-tab" tabindex="0"&gt;
 &lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;bin/pgsql-ext pg-meta &lt;span class="c1"&gt;# 在 pg-meta 集群上安装定义的扩展&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;bin/pgsql-ext pg-meta pg_duckdb pg_mooncake &lt;span class="c1"&gt;# 安装指定扩展&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
 &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;关于扩展的完整参考，请查阅 &lt;a href="https://pigsty.cc/docs/pgsql/ext/"&gt;&lt;strong&gt;扩展插件&lt;/strong&gt;&lt;/a&gt; 章节。关于可用扩展列表，请参考 &lt;a href="https://pigsty.cc/ext/list/"&gt;&lt;strong&gt;扩展目录&lt;/strong&gt;&lt;/a&gt;。&lt;/p&gt;</description></item><item><title>PG 高可用</title><link>https://pigsty.cc/docs/concept/ha/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/concept/ha/</guid><description>&lt;hr&gt;
&lt;h2 id="概览"&gt;概览&lt;/h2&gt;
&lt;p&gt;Pigsty 的 PostgreSQL 集群带有开箱即用的高可用方案，由 &lt;a href="https://pigsty.cc/docs/patroni"&gt;&lt;strong&gt;Patroni&lt;/strong&gt;&lt;/a&gt;、&lt;a href="https://etcd.io/"&gt;&lt;strong&gt;Etcd&lt;/strong&gt;&lt;/a&gt; 和 &lt;a href="http://www.haproxy.org/"&gt;&lt;strong&gt;HAProxy&lt;/strong&gt;&lt;/a&gt; 提供核心能力。&lt;/p&gt;
&lt;p&gt;当您的 PostgreSQL 集群含有两个或更多实例时，您无需任何配置即拥有了硬件故障自愈的数据库高可用能力 —— 只要集群中有任意实例存活，集群就可以对外提供完整的服务，而客户端只要连接至集群中的任意节点，即可获得完整的服务，而无需关心主从拓扑变化。&lt;/p&gt;
&lt;p&gt;在默认配置下，主库故障恢复时间目标 RTO ≈ 45s，数据恢复点目标 RPO &amp;lt; 1MB；从库故障 RPO = 0，RTO ≈ 0 (闪断)；在一致性优先模式下，可确保故障切换数据零损失：
RPO = 0。以上指标均可通过参数，根据您的实际硬件条件与可靠性要求 &lt;a href="https://pigsty.cc/docs/concept/ha/rto"&gt;&lt;strong&gt;按需配置&lt;/strong&gt;&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;Pigsty 内置了 HAProxy 负载均衡器用于自动流量切换，提供 DNS/VIP/LVS 等多种接入方式供客户端选用。故障切换与主动切换对业务侧除零星闪断外几乎无感知，应用不需要修改连接串重启。
极小的维护窗口需求带来了极大的灵活便利：您完全可以在无需应用配合的情况下滚动维护升级整个集群。硬件故障可以等到第二天再抽空善后处置的特性，让研发，运维与 DBA 都能在故障时安心睡个好觉。&lt;/p&gt;
&lt;p&gt;&lt;del&gt;&lt;img src="https://pigsty.cc/img/pigsty/ha.png" alt="pigsty-ha"&gt;&lt;/del&gt;&lt;/p&gt;
&lt;p&gt;许多大型组织与核心机构已经在生产环境中长时间使用 Pigsty，最大的部署有 25K CPU 核心与 220+ PostgreSQL 超大规格实例（64c / 512g / 3TB NVMe SSD）；在这一部署案例中，五年内经历了数十次硬件故障与各类事故，但依然可以保持高于 &lt;strong&gt;99.999%&lt;/strong&gt; 的总体可用性战绩。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;高可用（High-Availability）解决什么问题？&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;将数据安全 C/IA 中的可用性提高到一个新高度：RPO ≈ 0, RTO &amp;lt; 45s。&lt;/li&gt;
&lt;li&gt;获得无缝滚动维护的能力，最小化维护窗口需求，带来极大便利。&lt;/li&gt;
&lt;li&gt;硬件故障可以立即自愈，无需人工介入，运维 DBA 可以睡个好觉。&lt;/li&gt;
&lt;li&gt;从库可以用于承载只读请求，分担主库负载，让资源得以充分利用。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;高可用有什么代价？&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;基础设施依赖：高可用需要依赖 DCS (etcd/zk/consul) 提供共识。&lt;/li&gt;
&lt;li&gt;起步门槛增加：一个有意义的高可用部署环境至少需要 &lt;strong&gt;三个节点&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;额外的资源消耗：一个新从库就要消耗一份额外资源，不算大问题。&lt;/li&gt;
&lt;li&gt;复杂度代价显著升高：备份成本显著加大，需要使用工具压制复杂度。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;高可用的局限性&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>RPO 利弊权衡</title><link>https://pigsty.cc/docs/concept/ha/rpo/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/concept/ha/rpo/</guid><description>&lt;p&gt;&lt;strong&gt;RPO&lt;/strong&gt;（Recovery Point Objective，恢复点目标）定义了在主库发生故障时，&lt;strong&gt;允许丢失的最大数据量&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;对于金融交易这类数据完整性至关重要的场景，通常要求 RPO = 0，即不允许任何数据丢失；&lt;/p&gt;
&lt;p&gt;然而更为严格的 RPO 指标是有代价的，它会引入更高的写入延迟，降低系统吞吐量，并且存在从库故障导致主库不可用的风险。
因此对于常规场景，通常可以接受一定量的数据丢失（例如允许丢失不超过 1MB 的数据），以换取更高的可用性与性能。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="利弊权衡"&gt;利弊权衡&lt;/h2&gt;
&lt;p&gt;通常在异步复制场景下，从库和主库之间会存在一定的复制延迟（取决于网络和吞吐量，正常在 10KB-100KB / 100µs-10ms 的数量级），
这意味着当主库发生故障时，从库可能还没有完全同步主库的最新数据。这时候如果出现故障切换，新的主库可能会丢失一些尚未复制的数据。&lt;/p&gt;
&lt;p&gt;潜在数据丢失量的上限由 &lt;a href="https://pigsty.cc/docs/pgsql/param#pg_rpo"&gt;&lt;strong&gt;&lt;code&gt;pg_rpo&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt; 参数控制，默认为 &lt;code&gt;1048576&lt;/code&gt; （&lt;code&gt;1MB&lt;/code&gt;），这意味着在故障转移期间最多可以容忍 1MiB 的数据丢失。&lt;/p&gt;
&lt;p&gt;当集群主库宕机时，如果有任何一个从库的复制延迟在这个值以内，Pigsty 将自动提升该从库为新的主库。
然而当所有从库副本的复制延迟都超出这个阈值时，Pigsty 将拒绝进行 [&lt;strong&gt;自动故障切换&lt;/strong&gt;] 以避免数据丢失。
此时需要人工介入进行决策 —— 等待主库恢复（可能永远也不会恢复），还是接受数据损失并强制提升一个从库为新的主库。&lt;/p&gt;
&lt;p&gt;您需要根据业务的需求偏好配置这个值，在 &lt;strong&gt;可用性&lt;/strong&gt; 和 &lt;strong&gt;一致性&lt;/strong&gt; 之间进行 &lt;strong&gt;利弊权衡&lt;/strong&gt;。
增大这个值可以提高自动故障切换的成功率，但也会增加潜在的数据丢失量上限。&lt;/p&gt;
&lt;p&gt;当您指定 &lt;a href="https://pigsty.cc/docs/pgsql/param#pg_rpo"&gt;&lt;strong&gt;&lt;code&gt;pg_rpo&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt; = 0 时，Pigsty 将启用 &lt;strong&gt;同步复制&lt;/strong&gt;，确保主库在确认至少一个从库持久化数据后才返回写入成功。
这种配置能确保没有复制延迟，但会带来显著的写入延迟，并降低整体的吞吐量。&lt;/p&gt;
&lt;pre class="mermaid"&gt;flowchart LR
 A([主库故障]) --&amp;gt; B{同步复制?}

 B --&amp;gt;|否| C{延迟 &amp;lt; RPO?}
 B --&amp;gt;|是| D{同步从库&amp;lt;br/&amp;gt;可用?}

 C --&amp;gt;|是| E[有损自动故障切换&amp;lt;br/&amp;gt;RPO &amp;lt; 1MB]
 C --&amp;gt;|否| F[拒绝自动切换&amp;lt;br/&amp;gt;等待主库恢复&amp;lt;br/&amp;gt;或人工介入决策]

 D --&amp;gt;|是| G[无损自动故障切换&amp;lt;br/&amp;gt;RPO = 0]
 D --&amp;gt;|否| H{严格模式?}

 H --&amp;gt;|否| C
 H --&amp;gt;|是| F

 style A fill:#dc3545,stroke:#b02a37,color:#fff
 style E fill:#F0AD4E,stroke:#146c43,color:#fff
 style G fill:#198754,stroke:#146c43,color:#fff
 style F fill:#BE002F,stroke:#565e64,color:#fff&lt;/pre&gt;
&lt;hr&gt;
&lt;h2 id="保护模式"&gt;保护模式&lt;/h2&gt;
&lt;p&gt;Pigsty 提供三种保护模式，以帮助用户在不同的 RPO 要求下进行利弊权衡，类似于 &lt;a href="https://docs.oracle.com/en/database/oracle/oracle-database/21/sbydb/oracle-data-guard-protection-modes.html"&gt;&lt;strong&gt;Oracle Data Guard&lt;/strong&gt;&lt;/a&gt; 的数据保护模式。&lt;/p&gt;</description></item><item><title>PGSQL 架构</title><link>https://pigsty.cc/docs/concept/arch/pgsql/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/concept/arch/pgsql/</guid><description>&lt;p&gt;PGSQL 模块在生产环境中以 &lt;strong&gt;集群&lt;/strong&gt; 的形式组织，这些 &lt;strong&gt;集群&lt;/strong&gt; 是由一组通过 &lt;strong&gt;主-备&lt;/strong&gt; 关联的数据库 &lt;strong&gt;实例&lt;/strong&gt; 组成的 &lt;strong&gt;逻辑实体&lt;/strong&gt;。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="概览"&gt;概览&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://pigsty.cc/docs/pgsql"&gt;&lt;strong&gt;PGSQL 模块&lt;/strong&gt;&lt;/a&gt; 包含下列组件，协同提供生产级 PostgreSQL 高可用集群服务：&lt;/p&gt;
&lt;table class="full-width"&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th style="text-align: left"&gt;组件&lt;/th&gt;
 &lt;th&gt;简介&lt;/th&gt;
 &lt;th style="text-align: left"&gt;描述&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="#postgresql"&gt;&lt;strong&gt;&lt;code&gt;postgres&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;数据库&lt;/td&gt;
 &lt;td style="text-align: left"&gt;世界上最先进的开源关系型数据库，PGSQL 模块的核心。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="#patroni"&gt;&lt;strong&gt;&lt;code&gt;patroni&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;高可用&lt;/td&gt;
 &lt;td style="text-align: left"&gt;托管 PostgreSQL 进程，协调故障转移、选主、配置变更。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="#pgbouncer"&gt;&lt;strong&gt;&lt;code&gt;pgbouncer&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;连接池&lt;/td&gt;
 &lt;td style="text-align: left"&gt;轻量级连接池中间件，复用连接、降低开销、提供额外灵活性。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="#pgbackrest"&gt;&lt;strong&gt;&lt;code&gt;pgbackrest&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;备份恢复&lt;/td&gt;
 &lt;td style="text-align: left"&gt;全量/增量备份与 WAL 归档，支持本地与对象存储。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="#pg_exporter"&gt;&lt;strong&gt;&lt;code&gt;pg_exporter&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;指标导出&lt;/td&gt;
 &lt;td style="text-align: left"&gt;导出 PostgreSQL 监控指标供 Prometheus 抓取。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="#pgbouncer_exporter"&gt;&lt;strong&gt;&lt;code&gt;pgbouncer_exporter&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;指标导出&lt;/td&gt;
 &lt;td style="text-align: left"&gt;导出 &lt;a href="#pgbouncer"&gt;&lt;strong&gt;Pgbouncer&lt;/strong&gt;&lt;/a&gt; 连接池指标。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="#pgbackrest_exporter"&gt;&lt;strong&gt;&lt;code&gt;pgbackrest_exporter&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;指标导出&lt;/td&gt;
 &lt;td style="text-align: left"&gt;导出 &lt;a href="#pgbackrest"&gt;&lt;strong&gt;pgBackrest&lt;/strong&gt;&lt;/a&gt; 备份状态指标。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="#vip-manager"&gt;&lt;strong&gt;&lt;code&gt;vip-manager&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;VIP 管理&lt;/td&gt;
 &lt;td style="text-align: left"&gt;将 L2 VIP 绑定到当前主库节点，实现透明漂移。【可选】&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;其中 &lt;a href="#vip-manager"&gt;&lt;strong&gt;&lt;code&gt;vip-manager&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt; 为按需启用的组件。此外，PGSQL 还会使用到其他模块中的组件：&lt;/p&gt;
&lt;table class="full-width"&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;组件&lt;/th&gt;
 &lt;th style="text-align: left"&gt;模块&lt;/th&gt;
 &lt;th&gt;简介&lt;/th&gt;
 &lt;th style="text-align: left"&gt;描述&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;a href="#haproxy"&gt;&lt;strong&gt;&lt;code&gt;haproxy&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://pigsty.cc/docs/node"&gt;&lt;strong&gt;NODE&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;负载均衡&lt;/td&gt;
 &lt;td style="text-align: left"&gt;对外暴露服务端口，根据角色分发流量至主库或从库。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;a href="#vector"&gt;&lt;strong&gt;&lt;code&gt;vector&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://pigsty.cc/docs/node"&gt;&lt;strong&gt;NODE&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;日志采集&lt;/td&gt;
 &lt;td style="text-align: left"&gt;收集 PostgreSQL、&lt;a href="#patroni"&gt;Patroni&lt;/a&gt;、&lt;a href="#pgbouncer"&gt;Pgbouncer&lt;/a&gt; 等日志推送至中心。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;a href="#etcd"&gt;&lt;strong&gt;&lt;code&gt;etcd&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://pigsty.cc/docs/etcd"&gt;&lt;strong&gt;ETCD&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;DCS&lt;/td&gt;
 &lt;td style="text-align: left"&gt;分布式一致性存储，用于保存集群元数据与领导者信息。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;如果用类比来形容，&lt;a href="#postgresql"&gt;PostgreSQL&lt;/a&gt; 数据库内核就是 CPU，而整个 PGSQL 模块将其封装为一台完整的计算机。
&lt;a href="#patroni"&gt;Patroni&lt;/a&gt; 与 &lt;a href="#etcd"&gt;Etcd&lt;/a&gt; 组成 &lt;a href="#%E9%AB%98%E5%8F%AF%E7%94%A8%E5%AD%90%E7%B3%BB%E7%BB%9F"&gt;高可用子系统&lt;/a&gt;，&lt;a href="#pgbackrest"&gt;pgBackRest&lt;/a&gt; 与 MinIO 组成 &lt;a href="#%E5%A4%87%E4%BB%BD%E6%81%A2%E5%A4%8D%E5%AD%90%E7%B3%BB%E7%BB%9F"&gt;备份恢复子系统&lt;/a&gt;。
&lt;a href="#haproxy"&gt;HAProxy&lt;/a&gt; 与 &lt;a href="#pgbouncer"&gt;Pgbouncer&lt;/a&gt;、&lt;a href="#vip-manager"&gt;vip-manager&lt;/a&gt; 组成 &lt;a href="#%E6%9C%8D%E5%8A%A1%E6%8E%A5%E5%85%A5%E5%AD%90%E7%B3%BB%E7%BB%9F"&gt;接入子系统&lt;/a&gt;。
各种 Exporter 与 &lt;a href="#vector"&gt;Vector&lt;/a&gt; 构成 &lt;a href="#%E5%8F%AF%E8%A7%82%E6%B5%8B%E6%80%A7%E5%AD%90%E7%B3%BB%E7%BB%9F"&gt;可观测性子系统&lt;/a&gt;；
最后还可以替换不同的 &lt;a href="https://pigsty.cc/docs/pgsql/kernel"&gt;&lt;strong&gt;内核 CPU&lt;/strong&gt;&lt;/a&gt; 与 &lt;a href="https://pigsty.cc/docs/pgsql/ext"&gt;&lt;strong&gt;扩展卡&lt;/strong&gt;&lt;/a&gt;。&lt;/p&gt;</description></item><item><title>RTO 利弊权衡</title><link>https://pigsty.cc/docs/concept/ha/rto/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/concept/ha/rto/</guid><description>&lt;p&gt;&lt;strong&gt;RTO&lt;/strong&gt;（Recovery Time Objective，恢复时间目标）定义了在主库发生故障时，&lt;strong&gt;系统恢复写入能力所需的最长时间&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;对于核心交易系统这类可用性至关重要的场景，通常要求 RTO 尽可能短，例如一分钟内。&lt;/p&gt;
&lt;p&gt;然而更短的 RTO 指标是有代价的，它会增加误切风险：网络抖动可能被误判为故障，导致不必要的故障切换。
因此对于跨机房/跨地域部署的场景，通常需要放宽 RTO 要求（例如 1-2 分钟），以降低误切风险。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="利弊权衡"&gt;利弊权衡&lt;/h2&gt;
&lt;p&gt;故障切换时的不可用时长上限由 &lt;a href="https://pigsty.cc/docs/pgsql/param#pg_rto"&gt;&lt;strong&gt;&lt;code&gt;pg_rto&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt; 参数控制。Pigsty 提供了四种预设的 RTO 模式：
&lt;code&gt;fast&lt;/code&gt;、&lt;code&gt;norm&lt;/code&gt;、&lt;code&gt;safe&lt;/code&gt;、&lt;code&gt;wide&lt;/code&gt;，分别针对不同的网络条件与部署场景进行了优化，默认使用 &lt;code&gt;norm&lt;/code&gt; 模式（约 45 秒）。
您也可以使用秒数直接指定 RTO 上限，系统会自动映射到最接近的模式。&lt;/p&gt;
&lt;p&gt;当主库发生故障时，整个恢复流程涉及多个阶段：Patroni 检测故障、DCS 锁过期、新主选举、执行 promote、HAProxy 感知新主。
减小 RTO 意味着缩短各阶段的超时时间，这会使集群对网络抖动更加敏感，从而增加误切风险。&lt;/p&gt;
&lt;p&gt;您需要根据实际网络条件选择合适的模式，在 &lt;strong&gt;恢复速度&lt;/strong&gt; 与 &lt;strong&gt;误切风险&lt;/strong&gt; 之间取得平衡。
网络质量越差，越应该选择保守的模式；网络质量越好，越可以选择激进的模式。&lt;/p&gt;
&lt;pre class="mermaid"&gt;flowchart LR
 A([主库故障]) --&amp;gt; B{Patroni&amp;lt;br/&amp;gt;检测到?}

 B --&amp;gt;|PG崩溃| C[尝试本地重启]
 B --&amp;gt;|节点宕机| D[等待 TTL 过期]

 C --&amp;gt;|成功| E([本地恢复])
 C --&amp;gt;|失败/超时| F[释放 Leader 锁]

 D --&amp;gt; F
 F --&amp;gt; G[从库竞选]
 G --&amp;gt; H[执行 Promote]
 H --&amp;gt; I[HAProxy 感知]
 I --&amp;gt; J([服务恢复])

 style A fill:#dc3545,stroke:#b02a37,color:#fff
 style E fill:#198754,stroke:#146c43,color:#fff
 style J fill:#198754,stroke:#146c43,color:#fff&lt;/pre&gt;
&lt;hr&gt;
&lt;h2 id="四种模式"&gt;四种模式&lt;/h2&gt;
&lt;p&gt;Pigsty 提供四种 RTO 模式，以帮助用户在不同的网络条件下进行利弊权衡。&lt;/p&gt;</description></item><item><title>故障切换模型</title><link>https://pigsty.cc/docs/concept/ha/failure/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/concept/ha/failure/</guid><description>&lt;p&gt;Patroni 故障按故障对象分类可以分为以下 10 类，按照检测路径不同，可以进一步归纳为五类，在本节内详细展开。&lt;/p&gt;
&lt;table class="full-width"&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;#&lt;/th&gt;
 &lt;th&gt;故障场景&lt;/th&gt;
 &lt;th&gt;描述&lt;/th&gt;
 &lt;th&gt;最终走哪条路径&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;PG 进程崩溃&lt;/td&gt;
 &lt;td&gt;crash、OOM killed&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;主动检测&lt;/strong&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;2&lt;/td&gt;
 &lt;td&gt;PG 拒绝连接&lt;/td&gt;
 &lt;td&gt;max_connections&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;主动检测&lt;/strong&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;3&lt;/td&gt;
 &lt;td&gt;PG 假活&lt;/td&gt;
 &lt;td&gt;进程在但无响应&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;主动检测&lt;/strong&gt; (检测超时)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;4&lt;/td&gt;
 &lt;td&gt;Patroni 进程崩溃&lt;/td&gt;
 &lt;td&gt;kill -9、OOM&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;被动检测&lt;/strong&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;5&lt;/td&gt;
 &lt;td&gt;Patroni 假活&lt;/td&gt;
 &lt;td&gt;进程在但卡住&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;Watchdog&lt;/strong&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;6&lt;/td&gt;
 &lt;td&gt;节点宕机&lt;/td&gt;
 &lt;td&gt;断电、硬件故障&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;被动检测&lt;/strong&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;7&lt;/td&gt;
 &lt;td&gt;节点假活&lt;/td&gt;
 &lt;td&gt;IO hang、CPU 饥饿&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;Watchdog&lt;/strong&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;8&lt;/td&gt;
 &lt;td&gt;主库 ↔ DCS 网络中断&lt;/td&gt;
 &lt;td&gt;防火墙、交换机故障&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;网络分区&lt;/strong&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;9&lt;/td&gt;
 &lt;td&gt;存储故障&lt;/td&gt;
 &lt;td&gt;磁盘坏、磁盘满、挂载失败&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;主动检测&lt;/strong&gt; 或 &lt;strong&gt;Watchdog&lt;/strong&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;10&lt;/td&gt;
 &lt;td&gt;手动切换&lt;/td&gt;
 &lt;td&gt;Switchover/Failover&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;手动触发&lt;/strong&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;但是在 RTO 计算上，最终所有故障都会收敛到两条路径上，本节深入探讨了这两种情况下的 RTO 上下限与均值。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://pigsty.cc/docs/concept/ha/failure/passive"&gt;&lt;strong&gt;Patroni 失联后被动触发选举&lt;/strong&gt;&lt;/a&gt;：&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pigsty.cc/docs/concept/ha/failure/active"&gt;&lt;strong&gt;Patroni 主动检测故障并切换&lt;/strong&gt;&lt;/a&gt;:&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class="mermaid"&gt;flowchart LR
 A([主库故障]) --&amp;gt; B{Patroni&amp;lt;br/&amp;gt;检测到?}

 B --&amp;gt;|PG崩溃| C[尝试本地重启]
 B --&amp;gt;|节点宕机| D[等待 TTL 过期]

 C --&amp;gt;|成功| E([本地恢复])
 C --&amp;gt;|失败/超时| F[释放 Leader 锁]

 D --&amp;gt; F
 F --&amp;gt; G[从库竞选]
 G --&amp;gt; H[执行 Promote]
 H --&amp;gt; I[HAProxy 感知]
 I --&amp;gt; J([服务恢复])

 style A fill:#dc3545,stroke:#b02a37,color:#fff
 style E fill:#198754,stroke:#146c43,color:#fff
 style J fill:#198754,stroke:#146c43,color:#fff&lt;/pre&gt;</description></item><item><title>时间点恢复</title><link>https://pigsty.cc/docs/concept/pitr/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/concept/pitr/</guid><description>&lt;blockquote&gt;
&lt;p&gt;当您不小心删除了数据、表、甚至整个数据库时，PITR 能力让您回到过去任意时刻，避免软件缺陷与人为失误导致的数据损失。&lt;/p&gt;
&lt;p&gt;—— 这个曾经只有资深 DBA 才能施展的『魔法』，现在对所有用户都可以轻松做到零配置开箱即用。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="概览"&gt;概览&lt;/h2&gt;
&lt;p&gt;Pigsty 的 PostgreSQL 集群带有自动配置的时间点恢复（PITR）方案，基于 &lt;a href="https://pgbackrest.org/"&gt;&lt;strong&gt;pgBackRest&lt;/strong&gt;&lt;/a&gt; 与可选的对象存储仓库 &lt;a href="https://min.io/"&gt;&lt;strong&gt;MinIO&lt;/strong&gt;&lt;/a&gt; 提供。&lt;/p&gt;
&lt;p&gt;&lt;a href="https://pigsty.cc/docs/concept/ha"&gt;&lt;strong&gt;高可用方案&lt;/strong&gt;&lt;/a&gt; 可以解决硬件故障，但却对软件缺陷与人为失误导致的数据删除/覆盖写入/删库等问题却无能为力。
对于这种情况，Pigsty 提供了开箱即用的 &lt;strong&gt;时间点恢复&lt;/strong&gt;（Point in Time Recovery, PITR）能力，无需额外配置即默认启用。&lt;/p&gt;
&lt;p&gt;Pigsty 为您提供了基础备份与 WAL 归档的默认配置，您可以使用本地目录与磁盘，亦或专用的 MinIO 集群或 S3 对象存储服务来存储备份并实现异地容灾。
当您使用本地磁盘时，默认保留恢复至过去一天内的任意时间点的能力。当您使用 MinIO 或 S3 时，默认保留恢复至过去一周内的任意时间点的能力。
只要存储空间管够，您尽可保留任意长地可恢复时间段，丰俭由人。&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="时间点恢复解决什么问题"&gt;时间点恢复解决什么问题？&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;容灾能⼒增强：&lt;strong&gt;RPO&lt;/strong&gt; 从 ∞ 降⾄ ⼗⼏MB， &lt;strong&gt;RTO&lt;/strong&gt; 从 ∞ 降⾄ ⼏⼩时/⼏刻钟。&lt;/li&gt;
&lt;li&gt;确保数据安全：C/I/A 中的 &lt;strong&gt;数据完整性&lt;/strong&gt;：避免误删导致的数据⼀致性问题。&lt;/li&gt;
&lt;li&gt;确保数据安全：C/I/A 中的 &lt;strong&gt;数据可⽤性&lt;/strong&gt;：提供对“永久不可⽤”这种灾难情况的兜底&lt;/li&gt;
&lt;/ul&gt;
&lt;table class="full-width"&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;单实例配置策略&lt;/th&gt;
 &lt;th style="text-align: center"&gt;事件&lt;/th&gt;
 &lt;th&gt;RTO&lt;/th&gt;
 &lt;th style="text-align: left"&gt;RPO&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;i class="fa-solid fa-music text-danger"&gt;&lt;/i&gt; 什么也不做&lt;/td&gt;
 &lt;td style="text-align: center"&gt;宕机&lt;/td&gt;
 &lt;td&gt;&lt;i class="fas fa-circle-xmark text-danger"&gt;&lt;/i&gt; &lt;strong&gt;永久丢失&lt;/strong&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;i class="fas fa-circle-xmark text-danger"&gt;&lt;/i&gt; &lt;strong&gt;全部丢失&lt;/strong&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;i class="fa-solid fa-copy text-secondary"&gt;&lt;/i&gt; 基础备份&lt;/td&gt;
 &lt;td style="text-align: center"&gt;宕机&lt;/td&gt;
 &lt;td&gt;&lt;i class="fa-solid fa-triangle-exclamation text-secondary"&gt;&lt;/i&gt; 取决于备份大小与带宽（几小时）&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;i class="fa-solid fa-triangle-exclamation text-secondary"&gt;&lt;/i&gt; 丢失上一次备份后的数据（几个小时到几天）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;i class="fa-solid fa-copy text-primary"&gt;&lt;/i&gt; 基础备份 + &lt;i class="fa-solid fa-clock-rotate-left text-primary"&gt;&lt;/i&gt; WAL 归档&lt;/td&gt;
 &lt;td style="text-align: center"&gt;宕机&lt;/td&gt;
 &lt;td&gt;&lt;i class="fa-solid fa-triangle-exclamation text-primary"&gt;&lt;/i&gt; 取决于备份大小与带宽（几小时）&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;i class="fa-solid fa-triangle-exclamation text-primary"&gt;&lt;/i&gt; 丢失最后尚未归档的数据（几十 MB）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="时间点恢复有什么代价"&gt;时间点恢复有什么代价？&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;降低数据安全中的 C：&lt;strong&gt;机密性&lt;/strong&gt;，产生额外泄漏点，需要额外对备份进⾏保护。&lt;/li&gt;
&lt;li&gt;额外的资源消耗：本地存储或⽹络流量 / 带宽开销，通常并不是⼀个问题。&lt;/li&gt;
&lt;li&gt;复杂度代价升⾼：⽤户需要付出备份管理成本。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="时间点恢复的局限性"&gt;时间点恢复的局限性&lt;/h3&gt;
&lt;p&gt;如果只有 PITR 用于故障恢复，则 RTO 与 RPO 指标相比 &lt;a href="https://pigsty.cc/docs/concept/ha/"&gt;&lt;strong&gt;高可用方案&lt;/strong&gt;&lt;/a&gt; 更为逊色，通常应两者组合使用。&lt;/p&gt;</description></item><item><title>时间点恢复的工作原理</title><link>https://pigsty.cc/docs/concept/pitr/mechanism/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/concept/pitr/mechanism/</guid><description>&lt;p&gt;时间点恢复（PITR）的核心原理是：&lt;strong&gt;基础备份 + WAL 归档 = 任意时间点恢复能力&lt;/strong&gt;。
在 Pigsty 中，这一能力由 &lt;strong&gt;pgBackRest&lt;/strong&gt; 实现，并通过 &lt;strong&gt;定时备份 + WAL 归档&lt;/strong&gt; 自动运行。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="三要素"&gt;三要素&lt;/h2&gt;
&lt;table class="full-width"&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th style="text-align: left"&gt;要素&lt;/th&gt;
 &lt;th style="text-align: left"&gt;作用&lt;/th&gt;
 &lt;th style="text-align: left"&gt;Pigsty 实现&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;strong&gt;基础备份&lt;/strong&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;提供一致的物理快照，决定恢复起点&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;pg-backup&lt;/code&gt; + &lt;code&gt;pgbackrest&lt;/code&gt; + &lt;a href="https://pigsty.cc/docs/pgsql/param#pg_crontab"&gt;&lt;code&gt;pg_crontab&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;strong&gt;WAL 归档&lt;/strong&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;记录备份后的所有变更，决定恢复路径&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;archive_mode=on&lt;/code&gt; + &lt;code&gt;archive_command=pgbackrest ... archive-push&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;strong&gt;恢复目标&lt;/strong&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;指定恢复停止位置&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;pg_pitr&lt;/code&gt; 参数 / &lt;code&gt;pg-pitr&lt;/code&gt; 脚本 / &lt;code&gt;pgbackrest restore&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="基础备份"&gt;基础备份&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;基础备份&lt;/strong&gt;是数据库在某一时刻的物理快照，是 PITR 的恢复起点。Pigsty 通过 &lt;code&gt;pgBackRest&lt;/code&gt; 生成基础备份，并提供 &lt;code&gt;pg-backup&lt;/code&gt; 脚本封装常用操作。&lt;/p&gt;
&lt;h3 id="备份类型"&gt;备份类型&lt;/h3&gt;
&lt;table class="full-width"&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th style="text-align: left"&gt;类型&lt;/th&gt;
 &lt;th style="text-align: left"&gt;说明&lt;/th&gt;
 &lt;th style="text-align: left"&gt;恢复开销&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;strong&gt;全量备份&lt;/strong&gt;（Full）&lt;/td&gt;
 &lt;td style="text-align: left"&gt;复制全部数据文件&lt;/td&gt;
 &lt;td style="text-align: left"&gt;恢复最快，空间占用最大&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;strong&gt;差异备份&lt;/strong&gt;（Differential）&lt;/td&gt;
 &lt;td style="text-align: left"&gt;相对最近一次全量备份的变化&lt;/td&gt;
 &lt;td style="text-align: left"&gt;恢复需要全量 + 差异&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;strong&gt;增量备份&lt;/strong&gt;（Incremental）&lt;/td&gt;
 &lt;td style="text-align: left"&gt;相对最近一次任意备份的变化&lt;/td&gt;
 &lt;td style="text-align: left"&gt;空间最省，恢复需要完整链路&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="pigsty-的默认行为"&gt;Pigsty 的默认行为&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;pg-backup&lt;/code&gt; &lt;strong&gt;默认执行增量备份&lt;/strong&gt;，若不存在全量备份会自动补一次全量。&lt;/li&gt;
&lt;li&gt;备份任务通过 &lt;a href="https://pigsty.cc/docs/pgsql/param#pg_crontab"&gt;&lt;code&gt;pg_crontab&lt;/code&gt;&lt;/a&gt; 配置，写入 &lt;code&gt;postgres&lt;/code&gt; 用户的 crontab。&lt;/li&gt;
&lt;li&gt;脚本会自动识别节点角色，&lt;strong&gt;只有主库实际执行&lt;/strong&gt;，从库会直接退出。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;备份频率越高，需要重放的 WAL 越少，恢复速度越快。
更多细节请参阅 &lt;a href="https://pigsty.cc/docs/pgsql/backup/mechanism/"&gt;&lt;strong&gt;备份机制&lt;/strong&gt;&lt;/a&gt; 与 &lt;a href="https://pigsty.cc/docs/pgsql/backup/policy/"&gt;&lt;strong&gt;备份策略&lt;/strong&gt;&lt;/a&gt;。&lt;/p&gt;</description></item><item><title>时间点恢复的实现架构</title><link>https://pigsty.cc/docs/concept/pitr/arch/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/concept/pitr/arch/</guid><description>&lt;p&gt;Pigsty 使用 &lt;a href="https://pgbackrest.org/"&gt;&lt;strong&gt;pgBackRest&lt;/strong&gt;&lt;/a&gt; 作为 PostgreSQL 备份与恢复引擎，提供开箱即用的时间点恢复（PITR）能力。&lt;/p&gt;
&lt;p&gt;本文从架构层面说明：&lt;strong&gt;备份由谁执行、数据流向哪里、仓库如何组织、故障切换后如何保持连续性&lt;/strong&gt;。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="概览"&gt;概览&lt;/h2&gt;
&lt;p&gt;PITR 架构由三条主线构成：&lt;strong&gt;备份执行链路&lt;/strong&gt;、&lt;strong&gt;WAL 归档链路&lt;/strong&gt;、&lt;strong&gt;恢复执行链路&lt;/strong&gt;。&lt;/p&gt;
&lt;table class="full-width"&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th style="text-align: left"&gt;链路&lt;/th&gt;
 &lt;th style="text-align: left"&gt;入口&lt;/th&gt;
 &lt;th style="text-align: left"&gt;引擎&lt;/th&gt;
 &lt;th style="text-align: left"&gt;终点&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;备份&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;pg-backup&lt;/code&gt; + &lt;code&gt;pg_crontab&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;pgbackrest backup&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;备份仓库 &lt;code&gt;backup/&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;WAL 归档&lt;/td&gt;
 &lt;td style="text-align: left"&gt;PostgreSQL &lt;code&gt;archive_command&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;pgbackrest archive-push&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;备份仓库 &lt;code&gt;archive/&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;恢复&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;pg_pitr&lt;/code&gt; / &lt;code&gt;pg-pitr&lt;/code&gt; / &lt;code&gt;pgsql-pitr.yml&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;pgbackrest restore&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;目标数据目录&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;更多执行细节见 &lt;a href="https://pigsty.cc/docs/pgsql/backup/mechanism/"&gt;&lt;strong&gt;备份机制&lt;/strong&gt;&lt;/a&gt; 与 &lt;a href="https://pigsty.cc/docs/pgsql/backup/restore/"&gt;&lt;strong&gt;恢复操作&lt;/strong&gt;&lt;/a&gt;。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="组件与职责"&gt;组件与职责&lt;/h2&gt;
&lt;table class="full-width"&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th style="text-align: left"&gt;组件&lt;/th&gt;
 &lt;th style="text-align: left"&gt;角色&lt;/th&gt;
 &lt;th style="text-align: left"&gt;描述&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;strong&gt;PostgreSQL&lt;/strong&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;数据源&lt;/td&gt;
 &lt;td style="text-align: left"&gt;产生数据文件与 WAL 归档流&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;strong&gt;pgBackRest&lt;/strong&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;备份引擎&lt;/td&gt;
 &lt;td style="text-align: left"&gt;执行备份、接收/拉取 WAL、执行恢复&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;strong&gt;pg-backup&lt;/strong&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;备份入口&lt;/td&gt;
 &lt;td style="text-align: left"&gt;Pigsty 封装脚本，执行 &lt;code&gt;pgbackrest backup&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;strong&gt;pg_pitr / pg-pitr&lt;/strong&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;恢复入口&lt;/td&gt;
 &lt;td style="text-align: left"&gt;Pigsty 封装参数/脚本，执行 &lt;code&gt;pgbackrest restore&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;strong&gt;备份仓库&lt;/strong&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;存储后端&lt;/td&gt;
 &lt;td style="text-align: left"&gt;保存 &lt;code&gt;backup/&lt;/code&gt; 与 &lt;code&gt;archive/&lt;/code&gt;，支持 &lt;code&gt;local&lt;/code&gt; / &lt;code&gt;minio&lt;/code&gt; / &lt;code&gt;s3&lt;/code&gt; 等仓库&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;strong&gt;pgbackrest_exporter&lt;/strong&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;监控输出&lt;/td&gt;
 &lt;td style="text-align: left"&gt;导出备份状态指标，默认监听 &lt;code&gt;9854&lt;/code&gt; 端口&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="数据流"&gt;数据流&lt;/h2&gt;
&lt;pre class="mermaid"&gt;flowchart TB
 subgraph cluster[&amp;#34;PostgreSQL 集群&amp;#34;]
 direction TB
 primary[&amp;#34;Primary&amp;lt;br/&amp;gt;PostgreSQL&amp;#34;]
 pb[&amp;#34;pgBackRest&amp;#34;]
 cron[&amp;#34;pg-backup / pg_crontab&amp;#34;]
 end
 repo[&amp;#34;备份仓库&amp;lt;br/&amp;gt;local / minio / s3&amp;#34;]
 restore[&amp;#34;恢复目标数据目录&amp;#34;]

 cron --&amp;gt; pb
 primary --&amp;gt;|base backup| pb
 primary --&amp;gt;|WAL archive| pb
 pb --&amp;gt;|backup/archive| repo
 repo --&amp;gt;|restore/archive-get| pb
 pb --&amp;gt;|restore| restore&lt;/pre&gt;
&lt;p&gt;要点：&lt;/p&gt;</description></item><item><title>时间点恢复的策略权衡</title><link>https://pigsty.cc/docs/concept/pitr/tradeoff/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/concept/pitr/tradeoff/</guid><description>&lt;p&gt;设计 PITR 策略时，最核心的权衡来自三个维度：
&lt;strong&gt;备份仓库位置&lt;/strong&gt;、&lt;strong&gt;恢复窗口长度&lt;/strong&gt;、&lt;strong&gt;恢复速度与空间成本&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;本文帮助您在这些维度之间做出可操作的选择。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="本地-vs-远程"&gt;本地 vs 远程&lt;/h2&gt;
&lt;p&gt;备份仓库的位置是 PITR 策略设计的第一步。&lt;/p&gt;
&lt;h3 id="本地仓库"&gt;本地仓库&lt;/h3&gt;
&lt;p&gt;将备份存储在主库本地磁盘（&lt;code&gt;pgbackrest_method = local&lt;/code&gt;）：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;优势&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;配置简单，开箱即用&lt;/li&gt;
&lt;li&gt;恢复速度快（本地 I/O）&lt;/li&gt;
&lt;li&gt;无外部依赖&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;劣势&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;无异地容灾能力，主机故障时备份可能一同丢失&lt;/li&gt;
&lt;li&gt;受限于本地磁盘容量&lt;/li&gt;
&lt;li&gt;备份与生产数据位于同一故障域&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="远程仓库"&gt;远程仓库&lt;/h3&gt;
&lt;p&gt;将备份存储到 MinIO / S3 等对象存储（&lt;code&gt;pgbackrest_method = minio|s3&lt;/code&gt;）：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;优势&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;异地容灾，备份独立于数据库主机&lt;/li&gt;
&lt;li&gt;容量几乎无限，多集群可共享&lt;/li&gt;
&lt;li&gt;可配合加密、版本控制等安全策略&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;劣势&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;恢复速度受网络带宽影响&lt;/li&gt;
&lt;li&gt;依赖对象存储的可用性&lt;/li&gt;
&lt;li&gt;部署与运维成本更高&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="如何选择"&gt;如何选择&lt;/h3&gt;
&lt;table class="full-width"&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th style="text-align: left"&gt;场景&lt;/th&gt;
 &lt;th style="text-align: left"&gt;推荐仓库&lt;/th&gt;
 &lt;th style="text-align: left"&gt;理由&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;开发测试&lt;/td&gt;
 &lt;td style="text-align: left"&gt;local&lt;/td&gt;
 &lt;td style="text-align: left"&gt;简单够用，容灾要求低&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;单机生产&lt;/td&gt;
 &lt;td style="text-align: left"&gt;minio / s3&lt;/td&gt;
 &lt;td style="text-align: left"&gt;主机故障仍可恢复&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;集群生产&lt;/td&gt;
 &lt;td style="text-align: left"&gt;local + minio&lt;/td&gt;
 &lt;td style="text-align: left"&gt;兼顾恢复速度与异地容灾&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;关键业务&lt;/td&gt;
 &lt;td style="text-align: left"&gt;多远程仓库&lt;/td&gt;
 &lt;td style="text-align: left"&gt;多地容灾，最高保护&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;仓库配置细节请参阅 &lt;a href="https://pigsty.cc/docs/pgsql/backup/repository/"&gt;&lt;strong&gt;备份仓库&lt;/strong&gt;&lt;/a&gt;。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="空间-vs-窗口"&gt;空间 vs 窗口&lt;/h2&gt;
&lt;p&gt;恢复窗口越长，所需存储空间越大。窗口长度由 &lt;strong&gt;备份保留策略 + WAL 归档保留&lt;/strong&gt; 决定。&lt;/p&gt;</description></item><item><title>时间点恢复的典型场景</title><link>https://pigsty.cc/docs/concept/pitr/scenarios/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/concept/pitr/scenarios/</guid><description>&lt;p&gt;PITR 的价值不在于“回滚数据库”本身，而在于&lt;strong&gt;把不可逆的人为/软件错误变回可恢复的问题&lt;/strong&gt;。
它覆盖的场景从“误删一张表”到“整个机房不可用”，本质上解决的是&lt;strong&gt;逻辑错误与灾难恢复&lt;/strong&gt;。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="整体认知overview"&gt;整体认知（Overview）&lt;/h2&gt;
&lt;p&gt;PITR 解决以下问题：&lt;/p&gt;
&lt;table class="full-width"&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th style="text-align: left"&gt;场景类型&lt;/th&gt;
 &lt;th style="text-align: left"&gt;典型问题&lt;/th&gt;
 &lt;th style="text-align: left"&gt;推荐策略&lt;/th&gt;
 &lt;th style="text-align: left"&gt;恢复目标&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;误删/误更新数据（DML）&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;DELETE/UPDATE&lt;/code&gt; 无条件执行，脚本误操作&lt;/td&gt;
 &lt;td style="text-align: left"&gt;分支恢复优先&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;time&lt;/code&gt; / &lt;code&gt;xid&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;误删表/库/Schema（DDL）&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;DROP TABLE/DATABASE&lt;/code&gt;、错误迁移&lt;/td&gt;
 &lt;td style="text-align: left"&gt;分支恢复&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;time&lt;/code&gt; / &lt;code&gt;name&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;批量错误/发布事故&lt;/td&gt;
 &lt;td style="text-align: left"&gt;Bug 批量污染数据，修复脚本失败&lt;/td&gt;
 &lt;td style="text-align: left"&gt;分支恢复 + 验证&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;time&lt;/code&gt; / &lt;code&gt;xid&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;数据审计/问题复盘&lt;/td&gt;
 &lt;td style="text-align: left"&gt;需要查看历史状态，核对差异&lt;/td&gt;
 &lt;td style="text-align: left"&gt;分支恢复（只读）&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;time&lt;/code&gt; / &lt;code&gt;lsn&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;机房级灾难/全量丢失&lt;/td&gt;
 &lt;td style="text-align: left"&gt;硬件故障、勒索、机房断电&lt;/td&gt;
 &lt;td style="text-align: left"&gt;原地恢复或重建集群&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;latest&lt;/code&gt; / &lt;code&gt;time&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="一个简单的判断原则"&gt;一个简单的判断原则&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;只要写入已经造成业务错误，就应该考虑 PITR&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;需要在线验证或只恢复部分数据 → 分支恢复&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;必须尽快恢复服务 → 原地恢复&lt;/strong&gt;（可接受停机）。&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class="mermaid"&gt;flowchart TD
 A[&amp;#34;发现问题&amp;#34;] --&amp;gt; B{&amp;#34;能否停机？&amp;#34;}
 B --&amp;gt;|能| C[&amp;#34;原地恢复&amp;lt;br/&amp;gt;最短恢复路径&amp;#34;]
 B --&amp;gt;|不能| D[&amp;#34;分支恢复&amp;lt;br/&amp;gt;先验证后切换&amp;#34;]
 C --&amp;gt; E[&amp;#34;恢复成功后重建备份&amp;#34;]
 D --&amp;gt; F[&amp;#34;验证/导出/切流量&amp;#34;]&lt;/pre&gt;
&lt;hr&gt;
&lt;h2 id="场景详情"&gt;场景详情&lt;/h2&gt;
&lt;h3 id="误删误更新数据dml"&gt;误删/误更新数据（DML）&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;典型问题&lt;/strong&gt;：&lt;/p&gt;</description></item><item><title>安全合规</title><link>https://pigsty.cc/docs/concept/sec/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/concept/sec/</guid><description>&lt;p&gt;Pigsty 的安全目标是 &lt;strong&gt;CIA 三元组&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;机密性&lt;/strong&gt;：防止未授权访问与泄露&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;完整性&lt;/strong&gt;：防止数据被篡改或静默损坏&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;可用性&lt;/strong&gt;：防止故障导致业务中断&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pigsty 的安全理念：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;默认安全&lt;/strong&gt;：开箱即用的安全基线，配置少、覆盖广。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;纵深防御&lt;/strong&gt;：多层保护叠加，单点失守不致系统失守。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;最小权限&lt;/strong&gt;：角色与权限模型贯彻最小授权原则。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;可合规&lt;/strong&gt;：安全能力与流程结合即可通过合规检查。&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="默认安全基线解决什么问题"&gt;默认安全基线（解决什么问题）&lt;/h2&gt;
&lt;table class="full-width"&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th style="text-align: left"&gt;安全选项&lt;/th&gt;
 &lt;th style="text-align: left"&gt;默认值&lt;/th&gt;
 &lt;th style="text-align: left"&gt;解决的问题&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;密码加密&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;pg_pwd_enc: scram-sha-256&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;防止弱哈希与明文泄露&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;数据校验&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;pg_checksum: true&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;检测静默数据损坏&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;HBA 分层&lt;/td&gt;
 &lt;td style="text-align: left"&gt;管理员外网必须 &lt;code&gt;ssl&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;防止外网明文访问&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;本地 CA&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;ca_create: true&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;统一证书信任链&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;备份恢复&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;pgbackrest_enabled: true&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;防止误删误改不可恢复&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;Nginx HTTPS&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;nginx_sslmode: enable&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;防止 Web 入口明文泄露&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;MinIO HTTPS&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;minio_https: true&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;防止备份链路窃听&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;OS 基线&lt;/td&gt;
 &lt;td style="text-align: left"&gt;SELinux &lt;code&gt;permissive&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;为强制模式预留基础&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote&gt;
&lt;p&gt;默认配置以“可用、可扩展”为先，生产环境应根据合规要求加固。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="加固路线图"&gt;加固路线图&lt;/h2&gt;
&lt;p&gt;Pigsty 提供安全增强模板 &lt;code&gt;conf/ha/safe.yml&lt;/code&gt;，可快速将默认基线升级到更高安全级别：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;强制 SSL 与证书认证&lt;/li&gt;
&lt;li&gt;密码强度与过期策略&lt;/li&gt;
&lt;li&gt;连接与断开日志&lt;/li&gt;
&lt;li&gt;防火墙与 SELinux 加固&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="本章内容"&gt;本章内容&lt;/h2&gt;
&lt;table class="full-width"&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th style="text-align: left"&gt;章节&lt;/th&gt;
 &lt;th style="text-align: left"&gt;说明&lt;/th&gt;
 &lt;th style="text-align: left"&gt;核心问题&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://pigsty.cc/docs/concept/sec/level"&gt;&lt;strong&gt;纵深防御&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;七层安全模型与基线&lt;/td&gt;
 &lt;td style="text-align: left"&gt;安全体系整体如何落地？&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://pigsty.cc/docs/concept/sec/auth"&gt;&lt;strong&gt;身份认证&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;HBA 规则、密码策略、证书认证&lt;/td&gt;
 &lt;td style="text-align: left"&gt;如何验证用户身份？&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://pigsty.cc/docs/concept/sec/ac"&gt;&lt;strong&gt;访问控制&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;角色系统、权限模型、数据库隔离&lt;/td&gt;
 &lt;td style="text-align: left"&gt;如何控制用户权限？&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://pigsty.cc/docs/concept/sec/ca"&gt;&lt;strong&gt;加密通信&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;TLS、本地 CA、证书管理&lt;/td&gt;
 &lt;td style="text-align: left"&gt;如何保护传输与证书？&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://pigsty.cc/docs/concept/sec/data"&gt;&lt;strong&gt;数据安全&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;校验和、备份、加密与恢复&lt;/td&gt;
 &lt;td style="text-align: left"&gt;数据如何完整可恢复？&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://pigsty.cc/docs/concept/sec/compliance"&gt;&lt;strong&gt;合规清单&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;等保三级与 SOC2 对照&lt;/td&gt;
 &lt;td style="text-align: left"&gt;如何满足合规要求？&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="相关话题"&gt;相关话题&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;♾️ &lt;a href="https://pigsty.cc/docs/concept/ha/"&gt;&lt;strong&gt;高可用&lt;/strong&gt;&lt;/a&gt;：业务连续性保障&lt;/li&gt;
&lt;li&gt;⏰ &lt;a href="https://pigsty.cc/docs/concept/pitr/"&gt;&lt;strong&gt;备份恢复&lt;/strong&gt;&lt;/a&gt;：PITR 与灾难恢复&lt;/li&gt;
&lt;li&gt;📊 &lt;a href="https://pigsty.cc/docs/concept/monitor/"&gt;&lt;strong&gt;可观测性&lt;/strong&gt;&lt;/a&gt;：安全事件监控&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>七层安全模型</title><link>https://pigsty.cc/docs/concept/sec/level/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/concept/sec/level/</guid><description>&lt;p&gt;安全不是一道墙，而是一座城。Pigsty 采用&lt;strong&gt;纵深防御&lt;/strong&gt;策略，在七个层次上构建多重保护，即使某一层被突破，仍有其他层提供保护。&lt;/p&gt;
&lt;p&gt;这种分层思路解决三类核心风险：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;边界被突破&lt;/strong&gt;：降低“单点失守导致全盘失守”的概率。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;内部滥用&lt;/strong&gt;：即使内部账号被盗，也能通过最小权限限制破坏范围。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;不可预期故障&lt;/strong&gt;：硬件、软件、人为错误都能被“多层兜底”。&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="概览"&gt;概览&lt;/h2&gt;
&lt;div id="infographic-296a28376e55bf0bd7d2bce937b065d7" class="infographic-container td-max-width-on-larger-screens"&gt;&lt;/div&gt;

&lt;script&gt;
(function() {
 var containerId = 'infographic-296a28376e55bf0bd7d2bce937b065d7';
 var syntax = "````\ninfographic sequence-pyramid-simple\ndata\n title 七层安全模型\n desc Pigsty 纵深防御体系：从物理到用户的多层保护\n items\n - label 物理与介质\n value 100\n desc 数据校验和 · 介质盗取防护\n time L1\n icon mingcute/building-4-fill\n illus server-cluster\n - label 网络安全\n value 95\n desc 防火墙 · 监听收敛 · TLS\n time L2\n icon mingcute/earth-2-fill\n illus secure-server\n - label 边界安全\n value 90\n desc HAProxy · Nginx · 统一入口\n time L3\n icon mingcute/shield-fill\n illus firewall-protection\n - label 主机安全\n value 85\n desc SELinux · 最小权限 · 系统加固\n time L4\n icon mingcute/computer-fill\n illus server-status\n - label 应用安全\n value 80\n desc HBA · SCRAM · 密码策略\n time L5\n icon mingcute/safe-box-fill\n illus database-security\n - label 数据安全\n value 75\n desc 备份加密 · PITR · 审计\n time L6\n icon mingcute/lock-fill\n illus data-encryption\n - label 用户安全\n value 70\n desc RBAC · 默认权限 · 隔离\n time L7\n icon mingcute/user-security-fill\n illus user-flow\ntheme light\n palette pigsty\n````";

 function renderInfographic() {
 var dom = document.getElementById(containerId);
 if (!dom) { console.error('Infographic: container not found:', containerId); return; }
 try {
 var ig = new AntVInfographic.Infographic({
 container: '#' + containerId,
 width: dom.offsetWidth || '100%',
 height: 'auto',
 });
 ig.render(syntax);
 } catch (e) {
 console.error('Infographic render error:', e);
 dom.innerHTML = '&lt;pre style="color: red;"&gt;Infographic Error: ' + e.message + '&lt;/pre&gt;';
 }
 }

 
 if (typeof AntVInfographic !== 'undefined') {
 renderInfographic();
 } else if (!window._infographicLoading) {
 window._infographicLoading = true;
 window._infographicCallbacks = [renderInfographic];
 var script = document.createElement('script');
 script.src = '/js/infographic.min.js';
 script.onload = function() {
 window._infographicCallbacks.forEach(function(cb) { cb(); });
 };
 document.head.appendChild(script);
 } else {
 window._infographicCallbacks.push(renderInfographic);
 }
})();
&lt;/script&gt;

&lt;hr&gt;
&lt;h2 id="l1-物理与介质安全"&gt;L1 物理与介质安全&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;物理层失守时，唯一的对抗手段是数据本身的自我保护。&lt;/p&gt;</description></item><item><title>身份认证</title><link>https://pigsty.cc/docs/concept/sec/auth/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/concept/sec/auth/</guid><description>&lt;p&gt;身份认证解决三个核心问题：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;你是谁&lt;/strong&gt;：身份是否唯一可识别？&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;你怎么证明&lt;/strong&gt;：密码/证书是否足够安全？&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;你从哪里来&lt;/strong&gt;：来源是否受控？&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pigsty 使用 &lt;strong&gt;HBA 规则 + 密码/证书&lt;/strong&gt; 完成身份认证，并以 SCRAM 为默认密码哈希方案。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="认证链路"&gt;认证链路&lt;/h2&gt;
&lt;pre class="mermaid"&gt;flowchart LR
 C[客户端] --&amp;gt; HBA[HBA 规则]
 HBA --&amp;gt; A1[密码 SCRAM]
 HBA --&amp;gt; A2[证书认证]
 HBA --&amp;gt; A3[本地 ident/peer]
 A1 --&amp;gt; RBAC[角色与权限]
 A2 --&amp;gt; RBAC
 A3 --&amp;gt; RBAC&lt;/pre&gt;
&lt;p&gt;HBA 决定“&lt;strong&gt;谁能从哪里来&lt;/strong&gt;”，认证方式决定“&lt;strong&gt;如何证明身份&lt;/strong&gt;”。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="hba-分层模型"&gt;HBA 分层模型&lt;/h2&gt;
&lt;p&gt;Pigsty 默认 HBA 规则已经分层：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;本地&lt;/strong&gt;使用 &lt;code&gt;ident/peer&lt;/code&gt;，最安全。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;内网&lt;/strong&gt;使用 &lt;code&gt;scram&lt;/code&gt; 密码认证。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;外网管理员&lt;/strong&gt;必须走 &lt;code&gt;ssl&lt;/code&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这解决了“&lt;strong&gt;同一个用户在不同来源使用不同认证强度&lt;/strong&gt;”的问题。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;HBA 规则的关键能力&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;顺序优先&lt;/strong&gt;：支持 &lt;code&gt;order&lt;/code&gt; 排序，数值越小优先级越高。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;地址别名&lt;/strong&gt;：&lt;code&gt;local&lt;/code&gt; / &lt;code&gt;localhost&lt;/code&gt; / &lt;code&gt;intra&lt;/code&gt; / &lt;code&gt;world&lt;/code&gt; 等。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;角色条件&lt;/strong&gt;：&lt;code&gt;primary/replica/offline&lt;/code&gt; 可精细化控制。&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="密码认证"&gt;密码认证&lt;/h2&gt;
&lt;p&gt;默认密码哈希算法：&lt;/p&gt;</description></item><item><title>访问控制</title><link>https://pigsty.cc/docs/concept/sec/ac/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/concept/sec/ac/</guid><description>&lt;p&gt;访问控制解决两个核心问题：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;你能做什么&lt;/strong&gt;：读/写/DDL 的权限边界&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;你能访问哪些数据&lt;/strong&gt;：跨库、跨模式的隔离边界&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pigsty 通过 &lt;strong&gt;RBAC 角色体系 + 默认权限策略&lt;/strong&gt; 将“最小权限”落实为默认行为。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="四层角色模型"&gt;四层角色模型&lt;/h2&gt;
&lt;pre class="mermaid"&gt;flowchart TB
 subgraph Admin[&amp;#34;dbrole_admin（管理员）&amp;#34;]
 A1[&amp;#34;可执行 DDL / CREATE / ALTER&amp;#34;]
 A2[&amp;#34;继承 dbrole_readwrite&amp;#34;]
 end
 subgraph RW[&amp;#34;dbrole_readwrite（读写）&amp;#34;]
 RW1[&amp;#34;可 INSERT/UPDATE/DELETE&amp;#34;]
 RW2[&amp;#34;继承 dbrole_readonly&amp;#34;]
 end
 subgraph RO[&amp;#34;dbrole_readonly（只读）&amp;#34;]
 RO1[&amp;#34;可 SELECT 所有表&amp;#34;]
 end
 subgraph Offline[&amp;#34;dbrole_offline（离线）&amp;#34;]
 OFF1[&amp;#34;仅离线实例可用&amp;#34;]
 end

 Admin --&amp;gt; RW --&amp;gt; RO&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;解决的问题&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;生产账号天然拥有过高权限&lt;/li&gt;
&lt;li&gt;DDL 与 DML 不分离导致误操作风险&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="默认角色与系统用户"&gt;默认角色与系统用户&lt;/h2&gt;
&lt;p&gt;Pigsty 默认提供四个角色与四个系统用户（来自源码默认值）：&lt;/p&gt;
&lt;table class="full-width"&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;角色/用户&lt;/th&gt;
 &lt;th&gt;属性&lt;/th&gt;
 &lt;th&gt;继承/角色&lt;/th&gt;
 &lt;th&gt;描述&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;dbrole_readonly&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;NOLOGIN&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;-&lt;/td&gt;
 &lt;td&gt;全局只读访问&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;dbrole_offline&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;NOLOGIN&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;-&lt;/td&gt;
 &lt;td&gt;受限只读（离线实例）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;dbrole_readwrite&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;NOLOGIN&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;dbrole_readonly&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;全局读写访问&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;dbrole_admin&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;NOLOGIN&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;pg_monitor, dbrole_readwrite&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;管理员 / 对象创建&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;postgres&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;SUPERUSER&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;-&lt;/td&gt;
 &lt;td&gt;系统超级用户&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;replicator&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;REPLICATION&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;pg_monitor, dbrole_readonly&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;复制用户&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;dbuser_dba&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;SUPERUSER&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;dbrole_admin&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;管理员用户&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;dbuser_monitor&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;-&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;pg_monitor, dbrole_readonly&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;监控用户&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;这套默认角色可以覆盖绝大多数业务场景。&lt;/p&gt;</description></item><item><title>加密通信与本地 CA</title><link>https://pigsty.cc/docs/concept/sec/ca/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/concept/sec/ca/</guid><description>&lt;p&gt;加密通信解决三个问题：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;窃听&lt;/strong&gt;：防止明文流量被监听&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;篡改&lt;/strong&gt;：防止中间人修改数据&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;冒充&lt;/strong&gt;：防止服务端/客户端被伪造&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pigsty 通过 &lt;strong&gt;本地 CA + TLS&lt;/strong&gt; 为数据库与基础设施组件提供统一的信任根。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="本地-ca-的作用"&gt;本地 CA 的作用&lt;/h2&gt;
&lt;p&gt;Pigsty 默认会在管理节点生成自签 CA：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;files/pki/ca/ca.key # CA 私钥（必须严格保护）
files/pki/ca/ca.crt # CA 根证书（可分发）
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;源码默认值：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ca_create: true&lt;/code&gt;：找不到 CA 时自动生成。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ca_cn: pigsty-ca&lt;/code&gt;：CA 证书 CN 固定为 &lt;code&gt;pigsty-ca&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;根证书有效期约 100 年（自签）。&lt;/li&gt;
&lt;li&gt;由 CA 签发的服务器/客户端证书有效期 &lt;code&gt;cert_validity: 7300d&lt;/code&gt;（20 年）。&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="证书覆盖范围"&gt;证书覆盖范围&lt;/h2&gt;
&lt;p&gt;本地 CA 会签发多种组件证书，统一信任链：&lt;/p&gt;
&lt;table class="full-width"&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;组件&lt;/th&gt;
 &lt;th&gt;目的&lt;/th&gt;
 &lt;th&gt;典型路径&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;PostgreSQL / PgBouncer&lt;/td&gt;
 &lt;td&gt;连接加密&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;/pg/cert/&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Patroni&lt;/td&gt;
 &lt;td&gt;API 通信&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;/pg/cert/&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;etcd&lt;/td&gt;
 &lt;td&gt;DCS 加密&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;/etc/etcd/&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;MinIO&lt;/td&gt;
 &lt;td&gt;对象存储 HTTPS&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;~minio/.minio/certs/&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Nginx&lt;/td&gt;
 &lt;td&gt;Web 入口 HTTPS&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;/etc/nginx/conf.d/cert/&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;解决的问题&lt;/strong&gt;：不同组件自建证书会产生信任碎片，统一 CA 可以一次分发，多处复用。&lt;/p&gt;</description></item><item><title>数据安全</title><link>https://pigsty.cc/docs/concept/sec/data/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/concept/sec/data/</guid><description>&lt;p&gt;数据安全关注三件事：&lt;strong&gt;完整性、可恢复性、保密性&lt;/strong&gt;。Pigsty 在默认配置中已启用关键能力，并支持按需加固。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="数据完整性"&gt;数据完整性&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;解决的问题&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;磁盘坏块、内存错误导致的静默损坏&lt;/li&gt;
&lt;li&gt;意外写入导致的数据污染&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Pigsty 支持&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;数据校验和&lt;/strong&gt;：默认 &lt;code&gt;pg_checksum: true&lt;/code&gt;，初始化时启用 &lt;code&gt;data-checksums&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;副本兜底&lt;/strong&gt;：主库坏块可从从库恢复（与 HA 配合使用）。&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="可恢复性备份与-pitr"&gt;可恢复性（备份与 PITR）&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;解决的问题&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;误删误改&lt;/li&gt;
&lt;li&gt;灾难性故障导致数据丢失&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Pigsty 支持&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;pgBackRest 默认启用&lt;/strong&gt;：&lt;code&gt;pgbackrest_enabled: true&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;本地仓库&lt;/strong&gt;：默认保留 2 份完整备份。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;远程仓库&lt;/strong&gt;：可接入 MinIO，支持对象存储与多副本。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;PITR&lt;/strong&gt;：结合 WAL 归档进行任意时间点恢复。&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="数据保密性"&gt;数据保密性&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;解决的问题&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;备份被窃导致数据外泄&lt;/li&gt;
&lt;li&gt;介质被盗导致明文数据泄露&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Pigsty 支持&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;备份加密&lt;/strong&gt;：MinIO 仓库支持 AES-256-CBC（&lt;code&gt;cipher_type&lt;/code&gt;）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;透明加密（可选）&lt;/strong&gt;：通过 &lt;code&gt;pg_tde&lt;/code&gt; 等扩展实现数据静态加密。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;密钥隔离&lt;/strong&gt;：建议将 &lt;code&gt;cipher_pass&lt;/code&gt; 与 CA 私钥分离管理。&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="审计与可追溯"&gt;审计与可追溯&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;解决的问题&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;无法追责与还原操作&lt;/li&gt;
&lt;li&gt;合规审计缺少证据&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Pigsty 支持&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;日志收集&lt;/strong&gt;：模板默认启用 &lt;code&gt;logging_collector&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;DDL 审计&lt;/strong&gt;：&lt;code&gt;log_statement: ddl&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;慢查询&lt;/strong&gt;：&lt;code&gt;log_min_duration_statement&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;连接日志&lt;/strong&gt;：&lt;code&gt;log_connections&lt;/code&gt;（PG18+）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;审计扩展&lt;/strong&gt;：&lt;code&gt;pgaudit&lt;/code&gt;、&lt;code&gt;pgauditlogtofile&lt;/code&gt; 可选。&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="加固建议"&gt;加固建议&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;对远程备份强制加密与专用密钥。&lt;/li&gt;
&lt;li&gt;定期演练 PITR，验证恢复链路。&lt;/li&gt;
&lt;li&gt;对关键业务启用 &lt;code&gt;pgaudit&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;结合 &lt;a href="https://pigsty.cc/docs/concept/ha/"&gt;高可用&lt;/a&gt; 形成“备份 + 副本”双层兜底。&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="接下来"&gt;接下来&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;🔐 &lt;a href="https://pigsty.cc/docs/concept/sec/ca"&gt;&lt;strong&gt;加密通信&lt;/strong&gt;&lt;/a&gt;：证书管理与 TLS&lt;/li&gt;
&lt;li&gt;✅ &lt;a href="https://pigsty.cc/docs/concept/sec/compliance"&gt;&lt;strong&gt;合规清单&lt;/strong&gt;&lt;/a&gt;：审计与合规要求&lt;/li&gt;
&lt;li&gt;⏰ &lt;a href="https://pigsty.cc/docs/concept/pitr/"&gt;&lt;strong&gt;备份恢复&lt;/strong&gt;&lt;/a&gt;：PITR 机制与实践&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>合规清单</title><link>https://pigsty.cc/docs/concept/sec/compliance/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/concept/sec/compliance/</guid><description>&lt;p&gt;合规不是“开关”，而是 &lt;strong&gt;配置 + 流程 + 证据&lt;/strong&gt; 的组合：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;配置&lt;/strong&gt;：安全能力是否启用（HBA/TLS/审计/备份）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;流程&lt;/strong&gt;：是否有权限管理、变更、备份演练等制度&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;证据&lt;/strong&gt;：日志、配置快照、备份报告、监控告警&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;本页以 SOC2 与等保三级为切入点，说明 Pigsty 的安全能力与合规映射。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="默认凭证清单必须修改"&gt;默认凭证清单（必须修改）&lt;/h2&gt;
&lt;p&gt;来自源码默认值：&lt;/p&gt;
&lt;table class="full-width"&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;组件&lt;/th&gt;
 &lt;th&gt;默认用户名&lt;/th&gt;
 &lt;th&gt;默认密码&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;PostgreSQL 管理员&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;dbuser_dba&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;DBUser.DBA&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;PostgreSQL 监控&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;dbuser_monitor&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;DBUser.Monitor&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;PostgreSQL 复制&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;replicator&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;DBUser.Replicator&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Patroni API&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;postgres&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;Patroni.API&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;HAProxy 管理&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;admin&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;pigsty&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Grafana 管理&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;admin&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;pigsty&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;MinIO Root&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;minioadmin&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;S3User.MinIO&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;etcd Root&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;root&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;Etcd.Root&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;生产环境必须修改。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="证据准备建议"&gt;证据准备（建议）&lt;/h2&gt;
&lt;table class="full-width"&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;证据类型&lt;/th&gt;
 &lt;th&gt;说明&lt;/th&gt;
 &lt;th&gt;Pigsty 支持&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;配置快照&lt;/td&gt;
 &lt;td&gt;HBA、角色、TLS、备份策略&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;pigsty.yml&lt;/code&gt; / inventory 配置&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;访问控制&lt;/td&gt;
 &lt;td&gt;角色与权限&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;pg_default_roles&lt;/code&gt; / &lt;code&gt;pg_default_privileges&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;连接审计&lt;/td&gt;
 &lt;td&gt;连接、断开、DDL&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;log_connections&lt;/code&gt; / &lt;code&gt;log_statement&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;备份报告&lt;/td&gt;
 &lt;td&gt;完整备份与恢复记录&lt;/td&gt;
 &lt;td&gt;pgBackRest 日志与任务&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;监控告警&lt;/td&gt;
 &lt;td&gt;异常事件记录&lt;/td&gt;
 &lt;td&gt;Prometheus + Grafana&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;证书管理&lt;/td&gt;
 &lt;td&gt;CA/证书分发记录&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;files/pki/&lt;/code&gt; / &lt;code&gt;/etc/pki/ca.crt&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="soc2-视角示例映射"&gt;SOC2 视角（示例映射）&lt;/h2&gt;
&lt;p&gt;SOC2 的核心是 &lt;strong&gt;安全、可用性、机密性&lt;/strong&gt;。以下为常见控制点的概念映射：&lt;/p&gt;</description></item><item><title>快速上手 PostgreSQL</title><link>https://pigsty.cc/docs/setup/pgsql/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/setup/pgsql/</guid><description>&lt;p&gt;&lt;a href="https://www.postgresql.org/"&gt;&lt;strong&gt;PostgreSQL&lt;/strong&gt;&lt;/a&gt;（简称 PG）是世界上最先进、最流行的开源关系型数据库，你可以用它来存储和检索多模态数据。&lt;/p&gt;
&lt;p&gt;本指南面向有基础 Linux 基本命令行操作经验、但对 PostgreSQL 不太熟悉的开发者，带你快速上手 Pigsty 中的 PG。&lt;/p&gt;
&lt;p&gt;我们假设您是个人用户，使用默认单机模式进行部署。关于生产环境多节点高可用集群的使用，请参考 &lt;a href="https://pigsty.cc/docs/pgsql/service/"&gt;&lt;strong&gt;生产服务接入&lt;/strong&gt;&lt;/a&gt;。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="基本知识"&gt;基本知识&lt;/h2&gt;
&lt;p&gt;默认 &lt;a href="https://pigsty.cc/docs/setup/install"&gt;&lt;strong&gt;单机安装&lt;/strong&gt;&lt;/a&gt; 模板下，您将在当前节点上创建一个名为 &lt;code&gt;pg-meta&lt;/code&gt; 的 PostgreSQL 数据库集群，只有一个主库实例。&lt;/p&gt;
&lt;p&gt;PostgreSQL 监听在 &lt;code&gt;5432&lt;/code&gt; 端口，集群中带有一个预置的数据库 &lt;code&gt;meta&lt;/code&gt; 可供使用。&lt;/p&gt;
&lt;p&gt;您可以在安装完毕后退出当前管理用户 ssh 会话，并重新登陆刷新环境变量后，
通过简单地敲一个 &lt;code&gt;pp&lt;/code&gt; 回车，通过命令行工具 &lt;code&gt;psql&lt;/code&gt; 访问该数据库集群：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;vagrant@pg-meta-1:~$ pp
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;psql &lt;span class="o"&gt;(&lt;/span&gt;18.2 &lt;span class="o"&gt;(&lt;/span&gt;Ubuntu 18.2-1.pgdg24.04+2&lt;span class="o"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Type &lt;span class="s2"&gt;&amp;#34;help&amp;#34;&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; help.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;postgres&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="c1"&gt;#&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;您也可以切换为操作系统的 &lt;code&gt;postgres&lt;/code&gt; 用户，直接执行 &lt;code&gt;psql&lt;/code&gt; 命令，即可连接到默认的 &lt;code&gt;postgres&lt;/code&gt; 管理数据库上。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="连接数据库"&gt;连接数据库&lt;/h2&gt;
&lt;p&gt;想要访问 PostgreSQL 数据库，您需要使用 命令行工具 或者 图形化客户端 工具，填入 PostgreSQL 的 &lt;strong&gt;连接字符串&lt;/strong&gt;：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;postgres://username:password@host:port/dbname
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;一些驱动和工具也可能会要求你分别填写这些参数，通常以下五项为必选项：&lt;/p&gt;
&lt;table class="full-width"&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;参数&lt;/th&gt;
 &lt;th&gt;说明&lt;/th&gt;
 &lt;th&gt;示例值&lt;/th&gt;
 &lt;th&gt;备注&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;host&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;数据库服务器地址&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;10.10.10.10&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;换为你的节点 IP 地址或域名，本机可以省略&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;port&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;端口号&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;5432&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;PG 默认端口，可以省略&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;username&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;用户名&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;dbuser_dba&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Pigsty 默认的数据库管理员&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;password&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;密码&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;DBUser.DBA&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Pigsty 默认的管理员密码，（&lt;strong&gt;请修改密码&lt;/strong&gt;）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;dbname&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;数据库名&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;meta&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;默认模板的数据库名称&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;个人使用时可以直接使用 Pigsty 默认的数据库超级用户 &lt;code&gt;dbuser_dba&lt;/code&gt; 进行连接和管理，数据库管理用户 &lt;code&gt;dbuser_dba&lt;/code&gt; 拥有数据库的全部权限。
默认情况下，如果您在配置 Pigsty 时指定了 &lt;code&gt;configure -g&lt;/code&gt; 参数，密码会随机生成，并保存在 &lt;code&gt;~/pigsty/pigsty.yml&lt;/code&gt; 文件中，可以通过以下命令查看：&lt;/p&gt;</description></item><item><title>运维 SOP 索引</title><link>https://pigsty.cc/docs/sop/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/sop/</guid><description>&lt;h2 id="上手路线"&gt;上手路线&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th style="text-align: left"&gt;顺序&lt;/th&gt;
 &lt;th style="text-align: left"&gt;要解决的问题&lt;/th&gt;
 &lt;th style="text-align: left"&gt;入口&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;1&lt;/td&gt;
 &lt;td style="text-align: left"&gt;Pigsty 由哪些模块组成？&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://pigsty.cc/docs/concept/arch/"&gt;&lt;strong&gt;积木式架构&lt;/strong&gt;&lt;/a&gt;，&lt;a href="https://pigsty.cc/docs/concept/arch/pgsql/"&gt;&lt;strong&gt;PGSQL 架构&lt;/strong&gt;&lt;/a&gt;，&lt;a href="https://pigsty.cc/docs/concept/model/pgsql/"&gt;&lt;strong&gt;PGSQL 集群模型&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;2&lt;/td&gt;
 &lt;td style="text-align: left"&gt;怎么先跑起来？&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://pigsty.cc/docs/setup/install/"&gt;&lt;strong&gt;快速上手&lt;/strong&gt;&lt;/a&gt;，&lt;a href="https://pigsty.cc/docs/setup/webui/"&gt;&lt;strong&gt;图形界面&lt;/strong&gt;&lt;/a&gt;，&lt;a href="https://pigsty.cc/docs/setup/pgsql/"&gt;&lt;strong&gt;快速上手 PostgreSQL&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;3&lt;/td&gt;
 &lt;td style="text-align: left"&gt;配置文件该怎么看？&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://pigsty.cc/docs/concept/iac/"&gt;&lt;strong&gt;声明式配置&lt;/strong&gt;&lt;/a&gt;，&lt;a href="https://pigsty.cc/docs/setup/config/"&gt;&lt;strong&gt;配置清单&lt;/strong&gt;&lt;/a&gt;，&lt;a href="https://pigsty.cc/docs/concept/iac/parameter/"&gt;&lt;strong&gt;配置参数&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;4&lt;/td&gt;
 &lt;td style="text-align: left"&gt;生产部署要准备什么？&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://pigsty.cc/docs/deploy/planning/"&gt;&lt;strong&gt;架构规划&lt;/strong&gt;&lt;/a&gt;，&lt;a href="https://pigsty.cc/docs/deploy/prepare/"&gt;&lt;strong&gt;资源准备&lt;/strong&gt;&lt;/a&gt;，&lt;a href="https://pigsty.cc/docs/deploy/admin/"&gt;&lt;strong&gt;管理机制&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;5&lt;/td&gt;
 &lt;td style="text-align: left"&gt;怎么部署多节点集群？&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://pigsty.cc/docs/deploy/install/"&gt;&lt;strong&gt;生产部署&lt;/strong&gt;&lt;/a&gt;，&lt;a href="https://pigsty.cc/docs/setup/playbook/"&gt;&lt;strong&gt;执行剧本&lt;/strong&gt;&lt;/a&gt;，&lt;a href="https://pigsty.cc/docs/pgsql/playbook/"&gt;&lt;strong&gt;PGSQL 剧本&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;6&lt;/td&gt;
 &lt;td style="text-align: left"&gt;日常怎么管库？&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://pigsty.cc/docs/pgsql/admin/"&gt;&lt;strong&gt;PGSQL 日常管理&lt;/strong&gt;&lt;/a&gt;，&lt;a href="https://pigsty.cc/docs/pgsql/admin/cluster/"&gt;&lt;strong&gt;集群管理&lt;/strong&gt;&lt;/a&gt;，&lt;a href="https://pigsty.cc/docs/pgsql/admin/user/"&gt;&lt;strong&gt;用户管理&lt;/strong&gt;&lt;/a&gt;，&lt;a href="https://pigsty.cc/docs/pgsql/admin/db/"&gt;&lt;strong&gt;数据库管理&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;7&lt;/td&gt;
 &lt;td style="text-align: left"&gt;怎么验证可靠性？&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://pigsty.cc/docs/concept/ha/"&gt;&lt;strong&gt;PG 高可用&lt;/strong&gt;&lt;/a&gt;，&lt;a href="https://pigsty.cc/docs/pgsql/admin/patroni/"&gt;&lt;strong&gt;Patroni 管理&lt;/strong&gt;&lt;/a&gt;，&lt;a href="https://pigsty.cc/docs/pgsql/backup/"&gt;&lt;strong&gt;备份恢复&lt;/strong&gt;&lt;/a&gt;，&lt;a href="https://pigsty.cc/docs/pgsql/backup/restore/"&gt;&lt;strong&gt;恢复操作&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="任务索引"&gt;任务索引&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th style="text-align: left"&gt;任务&lt;/th&gt;
 &lt;th style="text-align: left"&gt;先看&lt;/th&gt;
 &lt;th style="text-align: left"&gt;操作入口&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;准备服务器、磁盘、网络、VIP&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://pigsty.cc/docs/deploy/prepare/"&gt;&lt;strong&gt;资源准备&lt;/strong&gt;&lt;/a&gt;，&lt;a href="https://pigsty.cc/docs/deploy/planning/"&gt;&lt;strong&gt;架构规划&lt;/strong&gt;&lt;/a&gt;，&lt;a href="https://pigsty.cc/docs/ref/linux/"&gt;&lt;strong&gt;Linux 兼容性&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://pigsty.cc/docs/deploy/install/"&gt;&lt;strong&gt;生产部署&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;准备 SSH、Sudo、管理用户&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://pigsty.cc/docs/deploy/admin/"&gt;&lt;strong&gt;管理机制&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://pigsty.cc/docs/deploy/install/"&gt;&lt;strong&gt;生产部署&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;本地或云上搭沙箱&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://pigsty.cc/docs/deploy/sandbox/"&gt;&lt;strong&gt;沙箱环境&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://pigsty.cc/docs/deploy/vagrant/"&gt;&lt;strong&gt;Vagrant&lt;/strong&gt;&lt;/a&gt;，&lt;a href="https://pigsty.cc/docs/deploy/terraform/"&gt;&lt;strong&gt;Terraform&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;单机体验&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://pigsty.cc/docs/setup/install/"&gt;&lt;strong&gt;快速上手&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;./configure -g&lt;/code&gt;，&lt;code&gt;./deploy.yml&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;多节点生产部署&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://pigsty.cc/docs/deploy/"&gt;&lt;strong&gt;部署&lt;/strong&gt;&lt;/a&gt;，&lt;a href="https://pigsty.cc/docs/deploy/install/"&gt;&lt;strong&gt;生产部署&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;./deploy.yml&lt;/code&gt;，&lt;code&gt;./pgsql.yml&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;离线环境部署&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://pigsty.cc/docs/setup/offline/"&gt;&lt;strong&gt;离线安装&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://pigsty.cc/docs/infra/admin/repo/"&gt;&lt;strong&gt;软件仓库管理&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;选择配置模板&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://pigsty.cc/docs/concept/iac/template/"&gt;&lt;strong&gt;配置模板&lt;/strong&gt;&lt;/a&gt;，&lt;a href="https://pigsty.cc/docs/conf/"&gt;&lt;strong&gt;模板列表&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;./configure -c &amp;lt;template&amp;gt;&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;规划集群名、库名、用户名&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://pigsty.cc/docs/concept/model/pgsql/"&gt;&lt;strong&gt;PGSQL 集群模型&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;pg_cluster&lt;/code&gt;，&lt;code&gt;pg_databases&lt;/code&gt;，&lt;code&gt;pg_users&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;创建数据库集群&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://pigsty.cc/docs/pgsql/config/cluster/"&gt;&lt;strong&gt;集群实例配置&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://pigsty.cc/docs/pgsql/admin/cluster/"&gt;&lt;strong&gt;集群管理&lt;/strong&gt;&lt;/a&gt;，&lt;code&gt;./pgsql.yml -l &amp;lt;cluster&amp;gt;&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;新增业务用户&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://pigsty.cc/docs/pgsql/config/user/"&gt;&lt;strong&gt;用户/角色配置&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://pigsty.cc/docs/pgsql/admin/user/"&gt;&lt;strong&gt;用户管理&lt;/strong&gt;&lt;/a&gt;，&lt;code&gt;./pgsql-user.yml -l &amp;lt;cluster&amp;gt;&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;新增业务数据库&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://pigsty.cc/docs/pgsql/config/db/"&gt;&lt;strong&gt;数据库配置&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://pigsty.cc/docs/pgsql/admin/db/"&gt;&lt;strong&gt;数据库管理&lt;/strong&gt;&lt;/a&gt;，&lt;code&gt;./pgsql-db.yml -l &amp;lt;cluster&amp;gt;&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;配置访问入口&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://pigsty.cc/docs/pgsql/service/"&gt;&lt;strong&gt;服务/接入&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;pg_services&lt;/code&gt;，&lt;code&gt;pg_default_services&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;修改 HBA&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://pigsty.cc/docs/pgsql/config/hba/"&gt;&lt;strong&gt;HBA 配置&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://pigsty.cc/docs/pgsql/admin/hba/"&gt;&lt;strong&gt;HBA 管理&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;主从切换&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://pigsty.cc/docs/pgsql/admin/patroni/"&gt;&lt;strong&gt;Patroni 管理&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;patronictl switchover&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;HA 故障演练&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://pigsty.cc/docs/concept/ha/"&gt;&lt;strong&gt;PG 高可用&lt;/strong&gt;&lt;/a&gt;，&lt;a href="https://pigsty.cc/docs/concept/ha/rpo/"&gt;&lt;strong&gt;RPO&lt;/strong&gt;&lt;/a&gt;，&lt;a href="https://pigsty.cc/docs/concept/ha/rto/"&gt;&lt;strong&gt;RTO&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://pigsty.cc/docs/pgsql/tutorial/drill/"&gt;&lt;strong&gt;3坏2应急处理&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;配置 VIP&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://pigsty.cc/docs/concept/ha/svc/"&gt;&lt;strong&gt;HA 服务接入&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://pigsty.cc/docs/pgsql/tutorial/pg-vip/"&gt;&lt;strong&gt;配置 PG VIP&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;配置备份策略&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://pigsty.cc/docs/pgsql/backup/policy/"&gt;&lt;strong&gt;备份策略&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://pigsty.cc/docs/pgsql/backup/admin/"&gt;&lt;strong&gt;备份管理命令&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;做 PITR 时间点恢复&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://pigsty.cc/docs/concept/pitr/"&gt;&lt;strong&gt;时间点恢复&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://pigsty.cc/docs/pgsql/backup/restore/"&gt;&lt;strong&gt;恢复操作&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;误删数据、表、库&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://pigsty.cc/docs/pgsql/tutorial/drop/"&gt;&lt;strong&gt;误删处理&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://pigsty.cc/docs/pgsql/tutorial/pitr/"&gt;&lt;strong&gt;手工恢复&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;克隆恢复集群&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://pigsty.cc/docs/pgsql/backup/cluster/"&gt;&lt;strong&gt;克隆数据库集群&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://pigsty.cc/docs/pgsql/tutorial/pg-fork/"&gt;&lt;strong&gt;Fork 实例&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;使用 MinIO 存备份&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://pigsty.cc/docs/minio/"&gt;&lt;strong&gt;MINIO 模块&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://pigsty.cc/docs/minio/config/"&gt;&lt;strong&gt;MinIO 配置&lt;/strong&gt;&lt;/a&gt;，&lt;a href="https://pigsty.cc/docs/pgsql/backup/repository/"&gt;&lt;strong&gt;备份仓库&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;查看监控告警&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://pigsty.cc/docs/concept/monitor/"&gt;&lt;strong&gt;监控系统&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://pigsty.cc/docs/pgsql/monitor/"&gt;&lt;strong&gt;PGSQL 监控&lt;/strong&gt;&lt;/a&gt;，&lt;a href="https://pigsty.cc/docs/pgsql/dashboard/"&gt;&lt;strong&gt;PGSQL 仪表盘&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;排查数据库故障&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://pigsty.cc/docs/pgsql/faq/"&gt;&lt;strong&gt;PGSQL 常见问题&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://pigsty.cc/docs/pgsql/tutorial/failure/"&gt;&lt;strong&gt;故障排查&lt;/strong&gt;&lt;/a&gt;，&lt;a href="https://pigsty.cc/docs/pgsql/admin/component/"&gt;&lt;strong&gt;组件管理&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;扩容、缩容 PG 集群&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://pigsty.cc/docs/pgsql/config/cluster/"&gt;&lt;strong&gt;集群实例配置&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://pigsty.cc/docs/pgsql/admin/cluster/"&gt;&lt;strong&gt;集群管理&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;升级 PostgreSQL&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://pigsty.cc/docs/pgsql/admin/upgrade/"&gt;&lt;strong&gt;版本升级&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://pigsty.cc/docs/pgsql/config/kernel/"&gt;&lt;strong&gt;内核版本&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;安装或启用扩展&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://pigsty.cc/docs/pgsql/ext/"&gt;&lt;strong&gt;扩展插件&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://pigsty.cc/docs/pgsql/admin/ext/"&gt;&lt;strong&gt;扩展管理&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;迁移已有数据库&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://pigsty.cc/docs/pgsql/migration/"&gt;&lt;strong&gt;数据迁移&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://pigsty.cc/docs/pgsql/playbook/#pgsql-migrationyml"&gt;&lt;strong&gt;迁移剧本&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;做安全加固&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://pigsty.cc/docs/deploy/security/"&gt;&lt;strong&gt;安全考量&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://pigsty.cc/docs/pgsql/security/"&gt;&lt;strong&gt;访问控制&lt;/strong&gt;&lt;/a&gt;，&lt;a href="https://pigsty.cc/docs/infra/admin/cert/"&gt;&lt;strong&gt;CA 与证书&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;管理域名与 Web 入口&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://pigsty.cc/docs/infra/admin/domain/"&gt;&lt;strong&gt;域名管理&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://pigsty.cc/docs/infra/admin/portal/"&gt;&lt;strong&gt;Nginx 管理&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;维护基础设施&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://pigsty.cc/docs/infra/admin/"&gt;&lt;strong&gt;INFRA 管理预案&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;infra.yml&lt;/code&gt;，&lt;code&gt;infra-rm.yml&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;维护 Etcd&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://pigsty.cc/docs/etcd/config/"&gt;&lt;strong&gt;ETCD 配置&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://pigsty.cc/docs/etcd/admin/"&gt;&lt;strong&gt;ETCD 管理&lt;/strong&gt;&lt;/a&gt;，&lt;a href="https://pigsty.cc/docs/etcd/faq/"&gt;&lt;strong&gt;ETCD FAQ&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;部署应用模板&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://pigsty.cc/docs/app/"&gt;&lt;strong&gt;应用&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://pigsty.cc/docs/docker/usage/"&gt;&lt;strong&gt;Docker 模块&lt;/strong&gt;&lt;/a&gt;，&lt;code&gt;./app.yml&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="准备与部署"&gt;准备与部署&lt;/h2&gt;
&lt;p&gt;生产部署先看 &lt;a href="https://pigsty.cc/docs/deploy/planning/"&gt;&lt;strong&gt;架构规划&lt;/strong&gt;&lt;/a&gt; 和 &lt;a href="https://pigsty.cc/docs/deploy/prepare/"&gt;&lt;strong&gt;资源准备&lt;/strong&gt;&lt;/a&gt;。这两篇解决节点数量、磁盘、文件系统、网络、VIP、域名、软件源这些问题。&lt;/p&gt;</description></item><item><title>模块：PGSQL</title><link>https://pigsty.cc/docs/pgsql/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/pgsql/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;世界上最先进的开源关系型数据库！&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;而 Pigsty 帮它进入全盛状态：开箱即用、可靠、可观测、可维护、可伸缩！ &lt;a href="https://pigsty.cc/docs/pgsql/config"&gt;配置&lt;/a&gt; | &lt;a href="https://pigsty.cc/docs/pgsql/admin"&gt;管理&lt;/a&gt; | &lt;a href="https://pigsty.cc/docs/pgsql/playbook"&gt;剧本&lt;/a&gt; | &lt;a href="https://pigsty.cc/docs/pgsql/monitor"&gt;监控&lt;/a&gt; | &lt;a href="#%E5%8F%82%E6%95%B0"&gt;参数&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="概览"&gt;概览&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;了解关于 PostgreSQL 的重要主题与概念。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://pigsty.cc/docs/concept/arch/pgsql"&gt;系统架构&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pigsty.cc/docs/pgsql/config"&gt;集群配置&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pigsty.cc/ext/list"&gt;扩展插件&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pigsty.cc/docs/pgsql/config/user"&gt;用户/角色&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pigsty.cc/docs/pgsql/config/db"&gt;数据库&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pigsty.cc/docs/pgsql/service/"&gt;服务/接入&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pigsty.cc/docs/pgsql/config/hba"&gt;认证/HBA&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pigsty.cc/docs/concept/sec/ac/"&gt;访问控制&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pigsty.cc/docs/pgsql/admin"&gt;管理预案&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pigsty.cc/docs/pgsql/tutorial/pitr"&gt;备份恢复&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pigsty.cc/docs/pgsql/monitor"&gt;监控接入&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pigsty.cc/docs/pgsql/migration"&gt;集群迁移&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pigsty.cc/docs/pgsql/monitor"&gt;仪表盘&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="配置"&gt;配置&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://pigsty.cc/docs/pgsql/config"&gt;描述&lt;/a&gt; 你想要的 PostgreSQL 集群&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://pigsty.cc/docs/concept/model/pgsql#%E8%BA%AB%E4%BB%BD%E5%8F%82%E6%95%B0"&gt;身份参数&lt;/a&gt;：定义 PostgreSQL 集群的身份参数&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pigsty.cc/docs/pgsql/config/cluster#%E8%AF%BB%E5%86%99%E4%B8%BB%E5%BA%93"&gt;读写主库&lt;/a&gt;：创建由单一主库构成的单实例“集群”&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pigsty.cc/docs/pgsql/config/cluster#%E5%8F%AA%E8%AF%BB%E4%BB%8E%E5%BA%93"&gt;只读从库&lt;/a&gt;：创建一主一从的两节点基础高可用集群&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pigsty.cc/docs/pgsql/config/cluster#%E7%A6%BB%E7%BA%BF%E4%BB%8E%E5%BA%93"&gt;离线从库&lt;/a&gt;：创建专用于 OLAP/ETL/交互式查询的特殊只读实例&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pigsty.cc/docs/pgsql/config/cluster#%E5%90%8C%E6%AD%A5%E5%A4%87%E5%BA%93"&gt;同步备库&lt;/a&gt;：启用同步提交，以确保没有数据丢失&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pigsty.cc/docs/pgsql/config/cluster#%E6%B3%95%E5%AE%9A%E4%BA%BA%E6%95%B0%E6%8F%90%E4%BA%A4"&gt;法定人数&lt;/a&gt;：使用法定人数同步提交以获得更高的一致性级别&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pigsty.cc/docs/pgsql/config/cluster#%E5%A4%87%E4%BB%BD%E9%9B%86%E7%BE%A4"&gt;备份集群&lt;/a&gt;：克隆现有集群，并保持同步（异地灾备集群）&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pigsty.cc/docs/pgsql/config/cluster#%E5%BB%B6%E8%BF%9F%E9%9B%86%E7%BE%A4"&gt;延迟集群&lt;/a&gt;：克隆现有集群，并延迟重放，用于紧急数据恢复&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pigsty.cc/docs/pgsql/config/cluster#citus%E9%9B%86%E7%BE%A4"&gt;Citus集群&lt;/a&gt;：定义并创建 Citus 水平分布式数据库集群&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pigsty.cc/docs/pgsql/config/kernel#%E5%A4%A7%E7%89%88%E6%9C%AC%E4%B8%8E%E8%BD%AF%E4%BB%B6%E5%8C%85"&gt;大版本切换&lt;/a&gt;：使用不同的 PostgreSQL 大版本部署集群&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="管理"&gt;管理&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://pigsty.cc/docs/pgsql/admin"&gt;管理&lt;/a&gt; 您所创建的 PostgreSQL 集群。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://pigsty.cc/docs/pgsql/admin/component#%E5%91%BD%E4%BB%A4%E9%80%9F%E6%9F%A5"&gt;命令速查&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pigsty.cc/docs/pgsql/admin/cluster#%E5%88%9B%E5%BB%BA%E9%9B%86%E7%BE%A4"&gt;创建集群&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pigsty.cc/docs/pgsql/admin/user#%E5%88%9B%E5%BB%BA%E7%94%A8%E6%88%B7"&gt;创建用户&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pigsty.cc/docs/pgsql/admin/db#%E5%88%9B%E5%BB%BA%E6%95%B0%E6%8D%AE%E5%BA%93"&gt;创建数据库&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pigsty.cc/docs/pgsql/admin/cluster#%E5%88%B7%E6%96%B0%E6%9C%8D%E5%8A%A1"&gt;重载服务&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pigsty.cc/docs/pgsql/admin/cluster#%E5%88%B7%E6%96%B0hba"&gt;重载HBA&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pigsty.cc/docs/pgsql/admin/cluster#%E9%85%8D%E7%BD%AE%E9%9B%86%E7%BE%A4"&gt;配置集群&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pigsty.cc/docs/pgsql/admin/cluster#%E6%89%A9%E5%AE%B9%E9%9B%86%E7%BE%A4"&gt;添加实例&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pigsty.cc/docs/pgsql/admin/cluster#%E7%BC%A9%E5%AE%B9%E9%9B%86%E7%BE%A4"&gt;移除实例&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pigsty.cc/docs/pgsql/admin/cluster#%E9%94%80%E6%AF%81%E9%9B%86%E7%BE%A4"&gt;下线集群&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pigsty.cc/docs/pgsql/admin/patroni#%E4%B8%BB%E5%8A%A8%E5%88%87%E6%8D%A2"&gt;主动切换&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pigsty.cc/docs/pgsql/admin/cluster#%E5%85%8B%E9%9A%86%E9%9B%86%E7%BE%A4"&gt;备份集群&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pigsty.cc/docs/pgsql/backup/restore"&gt;恢复集群&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pigsty.cc/docs/pgsql/faq/"&gt;疑难杂症&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="剧本"&gt;剧本&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;使用幂等的 &lt;a href="https://pigsty.cc/docs/pgsql/playbook"&gt;剧本&lt;/a&gt;，将您的描述变为现实。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://pigsty.cc/docs/pgsql/playbook#pgsqlyml"&gt;&lt;code&gt;pgsql.yml&lt;/code&gt;&lt;/a&gt;：初始化 PostgreSQL 集群或添加新的从库。&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pigsty.cc/docs/pgsql/playbook#pgsql-rmyml"&gt;&lt;code&gt;pgsql-rm.yml&lt;/code&gt;&lt;/a&gt;：移除 PostgreSQL 集群，或移除某个实例&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pigsty.cc/docs/pgsql/playbook#pgsql-useryml"&gt;&lt;code&gt;pgsql-user.yml&lt;/code&gt;&lt;/a&gt;：在现有的 PostgreSQL 集群中添加新的业务用户&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pigsty.cc/docs/pgsql/playbook#pgsql-dbyml"&gt;&lt;code&gt;pgsql-db.yml&lt;/code&gt;&lt;/a&gt;：在现有的 PostgreSQL 集群中添加新的业务数据库&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pigsty.cc/docs/pgsql/playbook#pgsql-monitoryml"&gt;&lt;code&gt;pgsql-monitor.yml&lt;/code&gt;&lt;/a&gt;：将远程 postgres 实例纳入监控中&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pigsty.cc/docs/pgsql/playbook#pgsql-migrationyml"&gt;&lt;code&gt;pgsql-migration.yml&lt;/code&gt;&lt;/a&gt;：为现有的 PostgreSQL 集群生成迁移手册和脚本&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="监控"&gt;监控&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;在 Grafana &lt;a href="https://pigsty.cc/docs/pgsql/monitor"&gt;仪表盘&lt;/a&gt; 中查阅 PostgreSQL 的详情状态。&lt;/p&gt;</description></item><item><title>配置指南</title><link>https://pigsty.cc/docs/pgsql/_div_concept/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/pgsql/_div_concept/</guid><description/></item><item><title>PGSQL 集群模型</title><link>https://pigsty.cc/docs/concept/model/pgsql/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/concept/model/pgsql/</guid><description>&lt;p&gt;PGSQL 模块在生产环境中以&lt;strong&gt;集群&lt;/strong&gt;的形式组织，这些&lt;strong&gt;集群&lt;/strong&gt;是由一组由&lt;strong&gt;主-备&lt;/strong&gt;关联的数据库&lt;strong&gt;实例&lt;/strong&gt;组成的&lt;strong&gt;逻辑实体&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;每个集群都是一个&lt;strong&gt;自治&lt;/strong&gt;的业务单元，由至少一个 &lt;strong&gt;主库实例&lt;/strong&gt; 组成，并通过服务向外暴露能力。&lt;/p&gt;
&lt;p&gt;在 Pigsty 的 PGSQL 模块中有四种核心实体：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;集群&lt;/strong&gt;（Cluster）：自治的 PostgreSQL 业务单元，用作其他实体的顶级命名空间。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;服务&lt;/strong&gt;（Service）：对外暴露能力的命名抽象，路由流量，并使用节点端口暴露服务。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;实例&lt;/strong&gt;（Instance）：由在单个节点上的运行进程和数据库文件组成的单一 PostgreSQL 服务器。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;节点&lt;/strong&gt;（Node）：运行 Linux + Systemd 环境的硬件资源抽象，可以是裸机、VM、容器或 Pod。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;辅以“数据库”“角色”两个业务实体，共同组成完整的逻辑视图。如下图所示：&lt;/p&gt;
&lt;p&gt;&lt;img src="https://pigsty.cc/img/pigsty/er-pgsql.svg" alt="er-pgsql"&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="具体样例"&gt;具体样例&lt;/h2&gt;
&lt;p&gt;让我们来看两个具体的例子，以四节点的 Pigsty &lt;a href="https://pigsty.cc/docs/deploy/sandbox"&gt;&lt;strong&gt;沙箱环境&lt;/strong&gt;&lt;/a&gt; 为例，在这个环境中，有一套三节点的 &lt;code&gt;pg-test&lt;/code&gt; 集群。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg-test&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;hosts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;10.10.10.11&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;{&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_seq: 1, pg_role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;primary }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;10.10.10.12&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;{&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_seq: 2, pg_role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;replica }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;10.10.10.13&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;{&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_seq: 3, pg_role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;replica }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;vars&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;{&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_cluster&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;pg-test }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;上面的配置片段定义了一个如下所示的 &lt;a href="https://pigsty.cc/docs/concept/ha/"&gt;&lt;strong&gt;高可用&lt;/strong&gt;&lt;/a&gt; PostgreSQL 集群，该集群中的相关实体包括：&lt;/p&gt;
&lt;table class="full-width"&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th style="text-align: center"&gt;&lt;span class="text-secondary"&gt;&lt;strong&gt;集群&lt;/strong&gt;&lt;/span&gt;&lt;/th&gt;
 &lt;th&gt;&lt;span class="text-secondary"&gt;&lt;strong&gt;Cluster&lt;/strong&gt;&lt;/span&gt;&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td style="text-align: center"&gt;&lt;strong&gt;&lt;code&gt;pg-test&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;PostgreSQL 3 节点高可用集群&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: center"&gt;&lt;span class="text-success"&gt;&lt;strong&gt;实例&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
 &lt;td&gt;&lt;span class="text-success"&gt;&lt;strong&gt;Instance&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: center"&gt;&lt;strong&gt;&lt;code&gt;pg-test-1&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;1 号 PostgreSQL 实例，默认为主库&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: center"&gt;&lt;strong&gt;&lt;code&gt;pg-test-2&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;2 号 PostgreSQL 实例，初始为从库&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: center"&gt;&lt;strong&gt;&lt;code&gt;pg-test-3&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;3 号 PostgreSQL 实例，初始为从库&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: center"&gt;&lt;span class="text-info"&gt;&lt;strong&gt;服务&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
 &lt;td&gt;&lt;span class="text-info"&gt;&lt;strong&gt;Service&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: center"&gt;&lt;a href="https://pigsty.cc/docs/pgsql/service/#primary%E6%9C%8D%E5%8A%A1"&gt;&lt;strong&gt;&lt;code&gt;pg-test-primary&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;读写服务（路由到主库 pgbouncer）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: center"&gt;&lt;a href="https://pigsty.cc/docs/pgsql/service/#replica%E6%9C%8D%E5%8A%A1"&gt;&lt;strong&gt;&lt;code&gt;pg-test-replica&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;只读服务（路由到从库 pgbouncer）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: center"&gt;&lt;a href="https://pigsty.cc/docs/pgsql/service/#default%E6%9C%8D%E5%8A%A1"&gt;&lt;strong&gt;&lt;code&gt;pg-test-default&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;直连读写服务（路由到主库 postgres）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: center"&gt;&lt;a href="https://pigsty.cc/docs/pgsql/service/#offline%E6%9C%8D%E5%8A%A1"&gt;&lt;strong&gt;&lt;code&gt;pg-test-offline&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;离线读取服务（路由到专用 postgres）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: center"&gt;&lt;span class="text-danger"&gt;&lt;strong&gt;节点&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
 &lt;td&gt;&lt;span class="text-danger"&gt;&lt;strong&gt;Nodes&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: center"&gt;&lt;strong&gt;&lt;code&gt;node-1&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;10.10.10.11&lt;/code&gt; 1 号节点，对应 &lt;code&gt;pg-test-1&lt;/code&gt; PG 实例&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: center"&gt;&lt;strong&gt;&lt;code&gt;node-2&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;10.10.10.12&lt;/code&gt; 2 号节点，对应 &lt;code&gt;pg-test-2&lt;/code&gt; PG 实例&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: center"&gt;&lt;strong&gt;&lt;code&gt;node-3&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;10.10.10.13&lt;/code&gt; 3 号节点，对应 &lt;code&gt;pg-test-3&lt;/code&gt; PG 实例&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;img src="https://pigsty.cc/img/pigsty/ha.png" alt="ha"&gt;&lt;/p&gt;</description></item><item><title>集群配置</title><link>https://pigsty.cc/docs/pgsql/config/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/pgsql/config/</guid><description>&lt;p&gt;Pigsty 是一个“配置驱动”的 PostgreSQL 平台：所有行为都来自 &lt;code&gt;~/pigsty/conf/*.yml&lt;/code&gt; 清单与 &lt;a href="https://pigsty.cc/docs/pgsql/param"&gt;&lt;code&gt;PGSQL&lt;/code&gt; 参数&lt;/a&gt; 的组合。&lt;/p&gt;
&lt;p&gt;只要写好配置，你就能在几分钟内复刻出一套包含实例、用户、数据库、访问控制、扩展与调优策略的定制集群。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="配置入口"&gt;配置入口&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;准备清单&lt;/strong&gt;：复制 &lt;code&gt;pigsty/conf/*.yml&lt;/code&gt; 模板或从零开始编写 Ansible Inventory，将集群分组（&lt;code&gt;all.children.&amp;lt;cls&amp;gt;.hosts&lt;/code&gt;）与全局变量（&lt;code&gt;all.vars&lt;/code&gt;）写入同一个文件。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;定义参数&lt;/strong&gt;：在 &lt;code&gt;vars&lt;/code&gt; 区块中覆盖需要的 &lt;a href="https://pigsty.cc/docs/pgsql/param"&gt;&lt;code&gt;PGSQL&lt;/code&gt; 参数&lt;/a&gt;。全局 → 集群 → 主机的覆盖顺序决定了最终值。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;应用配置&lt;/strong&gt;：运行 &lt;code&gt;./configure -c &amp;lt;conf&amp;gt;&lt;/code&gt; 或 &lt;code&gt;bin/pgsql-add &amp;lt;cls&amp;gt;&lt;/code&gt; 等剧本让配置落地。Pigsty 会根据参数生成 Patroni/pgbouncer/pgbackrest 等服务所需的配置文件。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Pigsty 默认的 Demo 清单 &lt;code&gt;conf/pgsql.yml&lt;/code&gt; 就是一份最小化示例：一个 &lt;code&gt;pg-meta&lt;/code&gt; 集群、全局 &lt;code&gt;pg_version: 18&lt;/code&gt;、少量业务用户与数据库定义。你可以在此基础上扩展更多集群。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="关注点与文档索引"&gt;关注点与文档索引&lt;/h2&gt;
&lt;p&gt;Pigsty 的 PostgreSQL 配置可以从以下几个维度组合，后续文档会逐一展开“如何配置”：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://pigsty.cc/docs/pgsql/config/cluster"&gt;集群实例&lt;/a&gt;&lt;/strong&gt;：通过 &lt;code&gt;pg_cluster / pg_role / pg_seq / pg_upstream&lt;/code&gt; 定义实例拓扑（单机、主从、备份集群、延迟集群、Citus 等）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://pigsty.cc/docs/pgsql/config/kernel"&gt;内核版本&lt;/a&gt;&lt;/strong&gt;：使用 &lt;code&gt;pg_version&lt;/code&gt;、&lt;code&gt;pg_mode&lt;/code&gt;、&lt;code&gt;pg_packages&lt;/code&gt;、&lt;code&gt;pg_extensions&lt;/code&gt;、&lt;code&gt;pg_conf&lt;/code&gt; 等参数挑选核心版本、风味和调优模板。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://pigsty.cc/docs/pgsql/config/user"&gt;用户/角色&lt;/a&gt;&lt;/strong&gt;：在 &lt;code&gt;pg_default_roles&lt;/code&gt; 与 &lt;code&gt;pg_users&lt;/code&gt; 中声明系统角色、业务账号、密码策略以及连接池属性。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://pigsty.cc/docs/pgsql/config/db"&gt;数据库对象&lt;/a&gt;&lt;/strong&gt;：借助 &lt;code&gt;pg_databases&lt;/code&gt;、&lt;code&gt;baseline&lt;/code&gt;、&lt;code&gt;schemas&lt;/code&gt;、&lt;code&gt;extensions&lt;/code&gt;、&lt;code&gt;pool_*&lt;/code&gt; 字段按需创建数据库并自动接入 pgbouncer/Grafana。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://pigsty.cc/docs/pgsql/config/hba"&gt;访问控制 (HBA)&lt;/a&gt;&lt;/strong&gt;：利用 &lt;code&gt;pg_default_hba_rules&lt;/code&gt; 与 &lt;code&gt;pg_hba_rules&lt;/code&gt; 维护主机级认证策略，保证不同角色/网络的访问边界。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://pigsty.cc/docs/pgsql/config/acl"&gt;权限模型 (ACL)&lt;/a&gt;&lt;/strong&gt;：通过 &lt;code&gt;pg_default_privileges&lt;/code&gt;、&lt;code&gt;pg_default_roles&lt;/code&gt;、&lt;code&gt;pg_revoke_public&lt;/code&gt; 等参数收敛对象权限，开箱即用地提供分层角色体系。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;理解这些参数之后，你就可以针对任意业务需求写出“配置即基础设施”的声明式清单，Pigsty 会负责执行并确保幂等。&lt;/p&gt;</description></item><item><title>服务/接入</title><link>https://pigsty.cc/docs/pgsql/service/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/pgsql/service/</guid><description>&lt;blockquote&gt;
&lt;p&gt;分离读写操作，正确路由流量，稳定可靠地交付 PostgreSQL 集群提供的能力。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="#%E6%9C%8D%E5%8A%A1%E6%A6%82%E8%BF%B0"&gt;服务&lt;/a&gt; 是一种抽象：它是数据库集群对外提供能力的形式，并封装了底层集群的细节。&lt;/p&gt;
&lt;p&gt;服务对于生产环境中的 &lt;a href="#%E6%8E%A5%E5%85%A5%E6%9C%8D%E5%8A%A1"&gt;稳定接入&lt;/a&gt; 至关重要，在 &lt;a href="https://pigsty.cc/docs/concept/ha"&gt;高可用&lt;/a&gt; 集群自动故障时方显其价值，&lt;a href="#%E5%8D%95%E6%9C%BA%E7%94%A8%E6%88%B7"&gt;单机用户&lt;/a&gt; 通常不需要操心这个概念。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="单机用户"&gt;单机用户&lt;/h2&gt;
&lt;p&gt;“服务” 的概念是给生产环境用的，个人用户/单机集群可以不折腾，直接拿实例名/IP 地址访问数据库。&lt;/p&gt;
&lt;p&gt;例如，Pigsty 默认的单节点 &lt;code&gt;pg-meta&lt;/code&gt;.&lt;code&gt;meta&lt;/code&gt; 数据库，就可以直接用下面三个不同的用户连接上去。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;psql postgres://dbuser_dba:DBUser.DBA@10.10.10.10/meta &lt;span class="c1"&gt;# 直接用 DBA 超级用户连上去&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;psql postgres://dbuser_meta:DBUser.Meta@10.10.10.10/meta &lt;span class="c1"&gt;# 用默认的业务管理员用户连上去&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;psql postgres://dbuser_view:DBUser.View@pg-meta/meta &lt;span class="c1"&gt;# 用默认的只读用户走实例域名连上去&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="服务概述"&gt;服务概述&lt;/h2&gt;
&lt;p&gt;在真实世界生产环境中，我们会使用基于复制的主从数据库集群。集群中有且仅有一个实例作为领导者（&lt;a href="https://pigsty.cc/docs/pgsql/config/cluster#%E8%AF%BB%E5%86%99%E4%B8%BB%E5%BA%93"&gt;主库&lt;/a&gt;）可以接受写入。
而其他实例（&lt;a href="https://pigsty.cc/docs/pgsql/config/cluster#%E5%8F%AA%E8%AF%BB%E4%BB%8E%E5%BA%93"&gt;从库&lt;/a&gt;）则会从持续从集群领导者获取变更日志，与领导者保持一致。同时，从库还可以承载只读请求，在读多写少的场景下可以显著分担主库的负担，
因此对集群的写入请求与只读请求进行区分，是一种十分常见的实践。&lt;/p&gt;
&lt;p&gt;此外对于高频短连接的生产环境，我们还会通过连接池中间件（Pgbouncer）对请求进行池化，减少连接与后端进程的创建开销。但对于 ETL 与变更执行等场景，我们又需要绕过连接池，直接访问数据库。
同时，高可用集群在故障时会出现故障切换（Failover），故障切换会导致集群的领导者出现变更。因此高可用的数据库方案要求写入流量可以自动适配集群的领导者变化。
这些不同的访问需求（读写分离，池化与直连，故障切换自动适配）最终抽象出 &lt;strong&gt;服务&lt;/strong&gt; （Service）的概念。&lt;/p&gt;
&lt;p&gt;通常来说，数据库集群都必须提供这种最基础的服务：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;读写服务（primary）&lt;/strong&gt;：可以读写数据库&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;对于生产数据库集群，至少应当提供这两种服务：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;读写服务（primary）&lt;/strong&gt;：写入数据：只能由主库所承载。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;只读服务（replica）&lt;/strong&gt;：读取数据：可以由从库承载，没有从库时也可由主库承载&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;此外，根据具体的业务场景，可能还会有其他的服务，例如：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;默认直连服务（default）&lt;/strong&gt;：允许（管理）用户，绕过连接池直接访问数据库的服务&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;离线从库服务（offline）&lt;/strong&gt;：不承接线上只读流量的专用从库，用于 ETL 与分析查询&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;同步从库服务（standby）&lt;/strong&gt;：没有复制延迟的只读服务，由 &lt;a href="https://pigsty.cc/docs/pgsql/config/cluster#%E5%90%8C%E6%AD%A5%E5%A4%87%E5%BA%93"&gt;同步备库&lt;/a&gt;/主库处理只读查询&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;延迟从库服务（delayed）&lt;/strong&gt;：访问同一个集群在一段时间之前的旧数据，由 &lt;a href="https://pigsty.cc/docs/pgsql/config/cluster#%E5%BB%B6%E8%BF%9F%E9%9B%86%E7%BE%A4"&gt;延迟从库&lt;/a&gt; 来处理&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="默认服务"&gt;默认服务&lt;/h2&gt;
&lt;p&gt;Pigsty 默认为每个 PostgreSQL 数据库集群提供四种不同的服务，以下是默认服务及其定义：&lt;/p&gt;
&lt;table class="full-width"&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;服务&lt;/th&gt;
 &lt;th&gt;端口&lt;/th&gt;
 &lt;th&gt;描述&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;a href="#primary%E6%9C%8D%E5%8A%A1"&gt;primary&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;5433&lt;/td&gt;
 &lt;td&gt;生产读写，连接到主库连接池（6432）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;a href="#replica%E6%9C%8D%E5%8A%A1"&gt;replica&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;5434&lt;/td&gt;
 &lt;td&gt;生产只读，连接到备库连接池（6432）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;a href="#default%E6%9C%8D%E5%8A%A1"&gt;default&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;5436&lt;/td&gt;
 &lt;td&gt;管理，ETL 写入，直接访问主库（5432）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;a href="#offline%E6%9C%8D%E5%8A%A1"&gt;offline&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;5438&lt;/td&gt;
 &lt;td&gt;OLAP、ETL、个人用户、交互式查询&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;以默认的 &lt;code&gt;pg-meta&lt;/code&gt; 集群为例，它提供四种默认服务：&lt;/p&gt;</description></item><item><title>访问控制</title><link>https://pigsty.cc/docs/pgsql/security/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/pgsql/security/</guid><description>&lt;blockquote&gt;
&lt;p&gt;Pigsty 提供了一套开箱即用的，基于 &lt;a href="#%E8%A7%92%E8%89%B2%E7%B3%BB%E7%BB%9F"&gt;角色系统&lt;/a&gt; 和 &lt;a href="#%E6%9D%83%E9%99%90%E7%B3%BB%E7%BB%9F"&gt;权限系统&lt;/a&gt; 的访问控制模型。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;权限控制很重要，但很多用户做不好。因此 Pigsty 提供了一套开箱即用的精简访问控制模型，为您的集群安全性提供一个兜底。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="角色系统"&gt;角色系统&lt;/h2&gt;
&lt;p&gt;Pigsty 默认的角色系统包含四个 &lt;a href="#%E9%BB%98%E8%AE%A4%E8%A7%92%E8%89%B2"&gt;默认角色&lt;/a&gt; 和四个 &lt;a href="#%E9%BB%98%E8%AE%A4%E7%94%A8%E6%88%B7"&gt;默认用户&lt;/a&gt;：&lt;/p&gt;
&lt;table class="full-width"&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;角色名称&lt;/th&gt;
 &lt;th&gt;属性&lt;/th&gt;
 &lt;th&gt;所属&lt;/th&gt;
 &lt;th&gt;描述&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;dbrole_readonly&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;NOLOGIN&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;角色：全局只读访问&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;dbrole_readwrite&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;NOLOGIN&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;dbrole_readonly&lt;/td&gt;
 &lt;td&gt;角色：全局读写访问&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;dbrole_admin&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;NOLOGIN&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;pg_monitor,dbrole_readwrite&lt;/td&gt;
 &lt;td&gt;角色：管理员/对象创建&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;dbrole_offline&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;NOLOGIN&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;角色：受限的只读访问&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;postgres&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;SUPERUSER&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;系统超级用户&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;replicator&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;REPLICATION&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;pg_monitor,dbrole_readonly&lt;/td&gt;
 &lt;td&gt;系统复制用户&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;dbuser_dba&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;SUPERUSER&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;dbrole_admin&lt;/td&gt;
 &lt;td&gt;pgsql 管理用户&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;dbuser_monitor&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;pg_monitor&lt;/td&gt;
 &lt;td&gt;pgsql 监控用户&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;这些 &lt;a href="https://pigsty.cc/docs/pgsql/config/user#%E5%AE%9A%E4%B9%89%E7%94%A8%E6%88%B7"&gt;角色与用户&lt;/a&gt; 的详细定义如下所示：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;pg_default_roles&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 全局默认的角色与系统用户&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- {&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name: dbrole_readonly ,login: false ,comment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;role for global read-only access }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- {&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name: dbrole_offline ,login: false ,comment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;role for restricted read-only access }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- {&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name: dbrole_readwrite ,login: false ,roles: [dbrole_readonly] ,comment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;role for global read-write access }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- {&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name: dbrole_admin ,login: false ,roles: [pg_monitor, dbrole_readwrite] ,comment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;role for object creation }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- {&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name: postgres ,superuser: true ,comment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;system superuser }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- {&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name: replicator ,replication: true ,roles: [pg_monitor, dbrole_readonly] ,comment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;system replicator }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- {&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name: dbuser_dba ,superuser: true ,roles: [dbrole_admin] ,pgbouncer: true ,pool_mode: session, pool_connlimit: 16 ,comment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;pgsql admin user }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- {&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name: dbuser_monitor ,roles: [pg_monitor] ,pgbouncer: true ,parameters&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;{&lt;span class="nt"&gt;log_min_duration_statement: 1000 } ,pool_mode: session ,pool_connlimit: 8 ,comment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;pgsql monitor user }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="默认角色"&gt;默认角色&lt;/h2&gt;
&lt;p&gt;Pigsty 中有四个默认角色：&lt;/p&gt;</description></item><item><title>用户/角色</title><link>https://pigsty.cc/docs/pgsql/misc/user/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/pgsql/misc/user/</guid><description>&lt;blockquote&gt;
&lt;p&gt;在这里的上下文中，用户指的是使用 SQL 命令 &lt;code&gt;CREATE USER/ROLE&lt;/code&gt; 创建的，数据库集簇内的逻辑对象。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;在 PostgreSQL 中，用户直接隶属于数据库集簇而非某个具体的数据库。因此在创建业务数据库和业务用户时，应当遵循&amp;quot;先用户，后数据库&amp;quot;的原则。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="定义用户"&gt;定义用户&lt;/h2&gt;
&lt;p&gt;Pigsty 通过两个配置参数定义数据库集群中的角色与用户：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://pigsty.cc/docs/pgsql/param#pg_default_roles"&gt;&lt;code&gt;pg_default_roles&lt;/code&gt;&lt;/a&gt;：定义全局统一使用的角色和用户&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pigsty.cc/docs/pgsql/param#pg_users"&gt;&lt;code&gt;pg_users&lt;/code&gt;&lt;/a&gt;：在数据库集群层面定义业务用户和角色&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;前者用于定义了整套环境中共用的角色与用户，后者定义单个集群中特有的业务角色与用户。二者形式相同，均为用户定义对象的数组。&lt;/p&gt;
&lt;p&gt;你可以定义多个用户/角色，它们会按照先全局，后集群，最后按数组内排序的顺序依次创建，所以后面的用户可以属于前面定义的角色。&lt;/p&gt;
&lt;p&gt;下面是 Pigsty 演示环境中默认集群 &lt;code&gt;pg-meta&lt;/code&gt; 中的业务用户定义：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;pg-meta&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;hosts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;{&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;10.10.10.10&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;{&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_seq: 1, pg_role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;primary } }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;vars&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_cluster&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;pg-meta&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_users&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- {&lt;span class="nt"&gt;name: dbuser_meta ,password: DBUser.Meta ,pgbouncer: true ,roles: [dbrole_admin] ,comment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;pigsty admin user }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- {&lt;span class="nt"&gt;name: dbuser_view ,password: DBUser.Viewer ,pgbouncer: true ,roles: [dbrole_readonly] ,comment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;read-only viewer for meta database }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- {&lt;span class="nt"&gt;name: dbuser_grafana ,password: DBUser.Grafana ,pgbouncer: true ,roles: [dbrole_admin] ,comment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;admin user for grafana database }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- {&lt;span class="nt"&gt;name: dbuser_bytebase ,password: DBUser.Bytebase ,pgbouncer: true ,roles: [dbrole_admin] ,comment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;admin user for bytebase database }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- {&lt;span class="nt"&gt;name: dbuser_kong ,password: DBUser.Kong ,pgbouncer: true ,roles: [dbrole_admin] ,comment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;admin user for kong api gateway }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- {&lt;span class="nt"&gt;name: dbuser_gitea ,password: DBUser.Gitea ,pgbouncer: true ,roles: [dbrole_admin] ,comment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;admin user for gitea service }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- {&lt;span class="nt"&gt;name: dbuser_wiki ,password: DBUser.Wiki ,pgbouncer: true ,roles: [dbrole_admin] ,comment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;admin user for wiki.js service }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- {&lt;span class="nt"&gt;name: dbuser_noco ,password: DBUser.Noco ,pgbouncer: true ,roles: [dbrole_admin] ,comment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;admin user for nocodb service }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;每个用户/角色定义都是一个 object，可能包括以下字段，以 &lt;code&gt;dbuser_meta&lt;/code&gt; 用户为例：&lt;/p&gt;</description></item><item><title>数据库</title><link>https://pigsty.cc/docs/pgsql/misc/db/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/pgsql/misc/db/</guid><description>&lt;blockquote&gt;
&lt;p&gt;在这里的上下文中，数据库指的是使用 SQL 命令 &lt;code&gt;CREATE DATABASE&lt;/code&gt; 创建的，数据库集簇内的逻辑对象。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;一组 PostgreSQL 服务器可以同时服务于多个 &lt;strong&gt;数据库&lt;/strong&gt; （Database）。在 Pigsty 中，你可以在集群配置中 &lt;a href="#%E5%AE%9A%E4%B9%89%E6%95%B0%E6%8D%AE%E5%BA%93"&gt;定义&lt;/a&gt; 好所需的数据库。&lt;/p&gt;
&lt;p&gt;Pigsty 会对默认模板数据库&lt;code&gt;template1&lt;/code&gt;进行修改与定制，创建默认模式，安装默认扩展，配置默认权限，新创建的数据库默认会从&lt;code&gt;template1&lt;/code&gt;继承这些设置。&lt;/p&gt;
&lt;p&gt;默认情况下，所有业务数据库都会被1:1添加到 Pgbouncer 连接池中；&lt;code&gt;pg_exporter&lt;/code&gt; 默认会通过 &lt;strong&gt;自动发现&lt;/strong&gt; 机制查找所有业务数据库并进行库内对象监控。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="定义数据库"&gt;定义数据库&lt;/h2&gt;
&lt;p&gt;业务数据库定义在数据库集群参数 &lt;a href="https://pigsty.cc/docs/pgsql/param#pg_databases"&gt;&lt;code&gt;pg_databases&lt;/code&gt;&lt;/a&gt; 中，这是一个数据库定义构成的对象数组。
数组内的数据库按照&lt;strong&gt;定义顺序&lt;/strong&gt;依次创建，因此后面定义的数据库可以使用先前定义的数据库作为&lt;strong&gt;模板&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;下面是 Pigsty 演示环境中默认集群 &lt;code&gt;pg-meta&lt;/code&gt; 中的数据库定义：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;pg-meta&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;hosts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;{&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;10.10.10.10&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;{&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_seq: 1, pg_role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;primary } }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;vars&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_cluster&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;pg-meta&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_databases&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- {&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name: meta ,baseline: cmdb.sql ,comment: pigsty meta database ,schemas: [pigsty] ,extensions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;{&lt;span class="nt"&gt;name: postgis, schema&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;public}, {name: timescaledb}]}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- {&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name: grafana ,owner: dbuser_grafana ,revokeconn: true ,comment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;grafana primary database }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- {&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name: bytebase ,owner: dbuser_bytebase ,revokeconn: true ,comment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;bytebase primary database }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- {&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name: kong ,owner: dbuser_kong ,revokeconn: true ,comment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;kong the api gateway database }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- {&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name: gitea ,owner: dbuser_gitea ,revokeconn: true ,comment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gitea meta database }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- {&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name: wiki ,owner: dbuser_wiki ,revokeconn: true ,comment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;wiki meta database }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- {&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name: noco ,owner: dbuser_noco ,revokeconn: true ,comment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;nocodb database }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;每个数据库定义都是一个 object，可能包括以下字段，以 &lt;code&gt;meta&lt;/code&gt; 数据库为例：&lt;/p&gt;</description></item><item><title>服务/接入</title><link>https://pigsty.cc/docs/pgsql/misc/svc/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/pgsql/misc/svc/</guid><description>&lt;blockquote&gt;
&lt;p&gt;分离读写操作，正确路由流量，稳定可靠地交付 PostgreSQL 集群提供的能力。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="#%E6%9C%8D%E5%8A%A1%E6%A6%82%E8%BF%B0"&gt;服务&lt;/a&gt; 是一种抽象：它是数据库集群对外提供能力的形式，并封装了底层集群的细节。&lt;/p&gt;
&lt;p&gt;服务对于生产环境中的 &lt;a href="#%E6%8E%A5%E5%85%A5%E6%9C%8D%E5%8A%A1"&gt;稳定接入&lt;/a&gt; 至关重要，在 &lt;a href="https://pigsty.cc/docs/concept/ha"&gt;高可用&lt;/a&gt; 集群自动故障时方显其价值，&lt;a href="#%E5%8D%95%E6%9C%BA%E7%94%A8%E6%88%B7"&gt;单机用户&lt;/a&gt; 通常不需要操心这个概念。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="单机用户"&gt;单机用户&lt;/h2&gt;
&lt;p&gt;“服务” 的概念是给生产环境用的，个人用户/单机集群可以不折腾，直接拿实例名/IP 地址访问数据库。&lt;/p&gt;
&lt;p&gt;例如，Pigsty 默认的单节点 &lt;code&gt;pg-meta&lt;/code&gt;.&lt;code&gt;meta&lt;/code&gt; 数据库，就可以直接用下面三个不同的用户连接上去。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;psql postgres://dbuser_dba:DBUser.DBA@10.10.10.10/meta &lt;span class="c1"&gt;# 直接用 DBA 超级用户连上去&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;psql postgres://dbuser_meta:DBUser.Meta@10.10.10.10/meta &lt;span class="c1"&gt;# 用默认的业务管理员用户连上去&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;psql postgres://dbuser_view:DBUser.View@pg-meta/meta &lt;span class="c1"&gt;# 用默认的只读用户走实例域名连上去&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="服务概述"&gt;服务概述&lt;/h2&gt;
&lt;p&gt;在真实世界生产环境中，我们会使用基于复制的主从数据库集群。集群中有且仅有一个实例作为领导者（&lt;a href="https://pigsty.cc/docs/pgsql/config/cluster#%E8%AF%BB%E5%86%99%E4%B8%BB%E5%BA%93"&gt;主库&lt;/a&gt;）可以接受写入。
而其他实例（&lt;a href="https://pigsty.cc/docs/pgsql/config/cluster#%E5%8F%AA%E8%AF%BB%E4%BB%8E%E5%BA%93"&gt;从库&lt;/a&gt;）则会从持续从集群领导者获取变更日志，与领导者保持一致。同时，从库还可以承载只读请求，在读多写少的场景下可以显著分担主库的负担，
因此对集群的写入请求与只读请求进行区分，是一种十分常见的实践。&lt;/p&gt;
&lt;p&gt;此外对于高频短连接的生产环境，我们还会通过连接池中间件（Pgbouncer）对请求进行池化，减少连接与后端进程的创建开销。但对于 ETL 与变更执行等场景，我们又需要绕过连接池，直接访问数据库。
同时，高可用集群在故障时会出现故障切换（Failover），故障切换会导致集群的领导者出现变更。因此高可用的数据库方案要求写入流量可以自动适配集群的领导者变化。
这些不同的访问需求（读写分离，池化与直连，故障切换自动适配）最终抽象出 &lt;strong&gt;服务&lt;/strong&gt; （Service）的概念。&lt;/p&gt;
&lt;p&gt;通常来说，数据库集群都必须提供这种最基础的服务：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;读写服务（primary）&lt;/strong&gt;：可以读写数据库&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;对于生产数据库集群，至少应当提供这两种服务：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;读写服务（primary）&lt;/strong&gt;：写入数据：只能由主库所承载。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;只读服务（replica）&lt;/strong&gt;：读取数据：可以由从库承载，没有从库时也可由主库承载&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;此外，根据具体的业务场景，可能还会有其他的服务，例如：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;默认直连服务（default）&lt;/strong&gt;：允许（管理）用户，绕过连接池直接访问数据库的服务&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;离线从库服务（offline）&lt;/strong&gt;：不承接线上只读流量的专用从库，用于 ETL 与分析查询&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;同步从库服务（standby）&lt;/strong&gt;：没有复制延迟的只读服务，由 &lt;a href="https://pigsty.cc/docs/pgsql/config/cluster#%E5%90%8C%E6%AD%A5%E5%A4%87%E5%BA%93"&gt;同步备库&lt;/a&gt;/主库处理只读查询&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;延迟从库服务（delayed）&lt;/strong&gt;：访问同一个集群在一段时间之前的旧数据，由 &lt;a href="https://pigsty.cc/docs/pgsql/config/cluster#%E5%BB%B6%E8%BF%9F%E9%9B%86%E7%BE%A4"&gt;延迟从库&lt;/a&gt; 来处理&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="默认服务"&gt;默认服务&lt;/h2&gt;
&lt;p&gt;Pigsty 默认为每个 PostgreSQL 数据库集群提供四种不同的服务，以下是默认服务及其定义：&lt;/p&gt;
&lt;table class="full-width"&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;服务&lt;/th&gt;
 &lt;th&gt;端口&lt;/th&gt;
 &lt;th&gt;描述&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;a href="#primary%E6%9C%8D%E5%8A%A1"&gt;primary&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;5433&lt;/td&gt;
 &lt;td&gt;生产读写，连接到主库连接池（6432）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;a href="#replica%E6%9C%8D%E5%8A%A1"&gt;replica&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;5434&lt;/td&gt;
 &lt;td&gt;生产只读，连接到备库连接池（6432）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;a href="#default%E6%9C%8D%E5%8A%A1"&gt;default&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;5436&lt;/td&gt;
 &lt;td&gt;管理，ETL 写入，直接访问主库（5432）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;a href="#offline%E6%9C%8D%E5%8A%A1"&gt;offline&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;5438&lt;/td&gt;
 &lt;td&gt;OLAP、ETL、个人用户、交互式查询&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;以默认的 &lt;code&gt;pg-meta&lt;/code&gt; 集群为例，它提供四种默认服务：&lt;/p&gt;</description></item><item><title>认证 / HBA</title><link>https://pigsty.cc/docs/pgsql/misc/hba/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/pgsql/misc/hba/</guid><description>&lt;blockquote&gt;
&lt;p&gt;Pigsty 中基于主机的身份认证 HBA（Host-Based Authentication）详解。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;认证是 &lt;a href="https://pigsty.cc/docs/concept/sec/ac/"&gt;访问控制&lt;/a&gt; 与 &lt;a href="https://pigsty.cc/docs/concept/sec/ac/#%E9%BB%98%E8%AE%A4%E6%9D%83%E9%99%90%E7%AD%96%E7%95%A5"&gt;权限系统&lt;/a&gt; 的基石，PostgreSQL 拥有多种 &lt;a href="https://www.postgresql.org/docs/current/client-authentication.html"&gt;认证&lt;/a&gt; 方法。&lt;/p&gt;
&lt;p&gt;这里主要介绍 HBA：Host Based Authentication，HBA 规则定义了哪些用户能够通过哪些方式从哪些地方访问哪些数据库。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="客户端认证"&gt;客户端认证&lt;/h2&gt;
&lt;p&gt;要连接到 PostgreSQL 数据库，用户必须先经过认证（默认使用密码）。&lt;/p&gt;
&lt;p&gt;您可以在连接字符串中提供密码（不安全）或使用&lt;code&gt;PGPASSWORD&lt;/code&gt;环境变量或&lt;code&gt;.pgpass&lt;/code&gt;文件传递密码。参考 &lt;a href="https://www.postgresql.org/docs/current/app-psql.html#usage"&gt;&lt;code&gt;psql&lt;/code&gt;&lt;/a&gt; 文档和 &lt;a href="https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNSTRING"&gt;PostgreSQL连接字符串&lt;/a&gt; 以获取更多详细信息。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;psql &lt;span class="s1"&gt;&amp;#39;host=&amp;lt;host&amp;gt; port=&amp;lt;port&amp;gt; dbname=&amp;lt;dbname&amp;gt; user=&amp;lt;username&amp;gt; password=&amp;lt;password&amp;gt;&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;psql postgres://&amp;lt;username&amp;gt;:&amp;lt;password&amp;gt;@&amp;lt;host&amp;gt;:&amp;lt;port&amp;gt;/&amp;lt;dbname&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;PGPASSWORD&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&amp;lt;password&amp;gt;&lt;span class="p"&gt;;&lt;/span&gt; psql -U &amp;lt;username&amp;gt; -h &amp;lt;host&amp;gt; -p &amp;lt;port&amp;gt; -d &amp;lt;dbname&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;例如，连接 Pigsty 默认的 &lt;code&gt;meta&lt;/code&gt; 数据库，可以使用以下连接串：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;psql &lt;span class="s1"&gt;&amp;#39;host=10.10.10.10 port=5432 dbname=meta user=dbuser_dba password=DBUser.DBA&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;psql postgres://dbuser_dba:DBUser.DBA@10.10.10.10:5432/meta
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;PGPASSWORD&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;DBUser.DBA&lt;span class="p"&gt;;&lt;/span&gt; psql -U dbuser_dba -h 10.10.10.10 -p &lt;span class="m"&gt;5432&lt;/span&gt; -d meta
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;默认配置下，Pigsty 会启用服务端 SSL 加密，但不验证客户端 SSL 证书。要使用客户端 SSL 证书连接，你可以使用&lt;code&gt;PGSSLCERT&lt;/code&gt;和&lt;code&gt;PGSSLKEY&lt;/code&gt;环境变量或&lt;code&gt;sslkey&lt;/code&gt;和&lt;code&gt;sslcert&lt;/code&gt;参数提供客户端参数。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;psql &lt;span class="s1"&gt;&amp;#39;postgres://dbuser_dba:DBUser.DBA@10.10.10.10:5432/meta?sslkey=/path/to/dbuser_dba.key&amp;amp;sslcert=/path/to/dbuser_dba.crt&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;客户端证书（&lt;code&gt;CN&lt;/code&gt; = 用户名）可以使用本地 CA 与 &lt;a href="https://github.com/pgsty/pigsty/blob/main/cert.yml"&gt;&lt;code&gt;cert.yml&lt;/code&gt;&lt;/a&gt; 剧本签发。&lt;/p&gt;</description></item><item><title>访问控制</title><link>https://pigsty.cc/docs/pgsql/misc/acl/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/pgsql/misc/acl/</guid><description>&lt;blockquote&gt;
&lt;p&gt;Pigsty 提供了一套开箱即用的，基于 &lt;a href="#%E8%A7%92%E8%89%B2%E7%B3%BB%E7%BB%9F"&gt;角色系统&lt;/a&gt; 和 &lt;a href="#%E6%9D%83%E9%99%90%E7%B3%BB%E7%BB%9F"&gt;权限系统&lt;/a&gt; 的访问控制模型。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;权限控制很重要，但很多用户做不好。因此 Pigsty 提供了一套开箱即用的精简访问控制模型，为您的集群安全性提供一个兜底。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="角色系统"&gt;角色系统&lt;/h2&gt;
&lt;p&gt;Pigsty 默认的角色系统包含四个 &lt;a href="#%E9%BB%98%E8%AE%A4%E8%A7%92%E8%89%B2"&gt;默认角色&lt;/a&gt; 和四个 &lt;a href="#%E9%BB%98%E8%AE%A4%E7%94%A8%E6%88%B7"&gt;默认用户&lt;/a&gt;：&lt;/p&gt;
&lt;table class="full-width"&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;角色名称&lt;/th&gt;
 &lt;th&gt;属性&lt;/th&gt;
 &lt;th&gt;所属&lt;/th&gt;
 &lt;th&gt;描述&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;dbrole_readonly&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;NOLOGIN&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;角色：全局只读访问&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;dbrole_readwrite&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;NOLOGIN&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;dbrole_readonly&lt;/td&gt;
 &lt;td&gt;角色：全局读写访问&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;dbrole_admin&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;NOLOGIN&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;pg_monitor,dbrole_readwrite&lt;/td&gt;
 &lt;td&gt;角色：管理员/对象创建&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;dbrole_offline&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;NOLOGIN&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;角色：受限的只读访问&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;postgres&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;SUPERUSER&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;系统超级用户&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;replicator&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;REPLICATION&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;pg_monitor,dbrole_readonly&lt;/td&gt;
 &lt;td&gt;系统复制用户&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;dbuser_dba&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;SUPERUSER&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;dbrole_admin&lt;/td&gt;
 &lt;td&gt;pgsql 管理用户&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;dbuser_monitor&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;pg_monitor&lt;/td&gt;
 &lt;td&gt;pgsql 监控用户&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;这些 &lt;a href="https://pigsty.cc/docs/pgsql/config/user#%E5%AE%9A%E4%B9%89%E7%94%A8%E6%88%B7"&gt;角色与用户&lt;/a&gt; 的详细定义如下所示：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;pg_default_roles&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 全局默认的角色与系统用户&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- {&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name: dbrole_readonly ,login: false ,comment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;role for global read-only access }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- {&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name: dbrole_offline ,login: false ,comment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;role for restricted read-only access }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- {&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name: dbrole_readwrite ,login: false ,roles: [dbrole_readonly] ,comment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;role for global read-write access }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- {&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name: dbrole_admin ,login: false ,roles: [pg_monitor, dbrole_readwrite] ,comment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;role for object creation }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- {&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name: postgres ,superuser: true ,comment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;system superuser }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- {&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name: replicator ,replication: true ,roles: [pg_monitor, dbrole_readonly] ,comment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;system replicator }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- {&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name: dbuser_dba ,superuser: true ,roles: [dbrole_admin] ,pgbouncer: true ,pool_mode: session, pool_connlimit: 16 ,comment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;pgsql admin user }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- {&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name: dbuser_monitor ,roles: [pg_monitor] ,pgbouncer: true ,parameters&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;{&lt;span class="nt"&gt;log_min_duration_statement: 1000 } ,pool_mode: session ,pool_connlimit: 8 ,comment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;pgsql monitor user }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="默认角色"&gt;默认角色&lt;/h2&gt;
&lt;p&gt;Pigsty 中有四个默认角色：&lt;/p&gt;</description></item><item><title>管理任务</title><link>https://pigsty.cc/docs/pgsql/_div_admin/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/pgsql/_div_admin/</guid><description>&lt;p&gt;数据库管理与运维任务&lt;/p&gt;</description></item><item><title>日常管理</title><link>https://pigsty.cc/docs/pgsql/admin/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/pgsql/admin/</guid><description/></item><item><title>故障排查</title><link>https://pigsty.cc/docs/pgsql/tutorial/failure/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/pgsql/tutorial/failure/</guid><description>&lt;p&gt;本文档列举了 PostgreSQL 和 Pigsty 中可能出现的故障，以及定位、处理、分析问题的 SOP。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="磁盘空间写满"&gt;磁盘空间写满&lt;/h2&gt;
&lt;p&gt;磁盘空间写满是最常见的故障类型。&lt;/p&gt;
&lt;h3 id="现象"&gt;现象&lt;/h3&gt;
&lt;p&gt;当数据库所在磁盘空间耗尽时，PostgreSQL 将无法正常工作，可能出现以下现象：数据库日志反复报错&amp;quot;no space left on device&amp;quot;（磁盘空间不足），
新数据无法写入，甚至 PostgreSQL 可能触发 PANIC 强制关闭。&lt;/p&gt;
&lt;p&gt;Pigsty 带有 NodeFsSpaceFull 告警规则，当文件系统可用空间不足 10% 时触发告警。
使用监控系统 NODE Instance 面板查阅 FS 指标面板定位问题。&lt;/p&gt;
&lt;h3 id="诊断"&gt;诊断&lt;/h3&gt;
&lt;p&gt;您也可以登录数据库节点，使用 &lt;code&gt;df -h&lt;/code&gt; 查看各挂载盘符使用率，确定哪个分区被写满。
对于数据库节点，重点检查以下目录及其大小，以判断是哪个类别的文件占满了空间：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;数据目录&lt;/strong&gt;（&lt;code&gt;/pg/data/base&lt;/code&gt;）：存放表和索引的数据文件，大量写入与临时文件需要关注&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;WAL 目录&lt;/strong&gt;（如 &lt;code&gt;pg/data/pg_wal&lt;/code&gt;）：存放 PG WAL，WAL 堆积/复制槽保留是常见的磁盘写满原因。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;数据库日志目录&lt;/strong&gt;（如 &lt;code&gt;pg/log&lt;/code&gt;）：如果 PG 日志未及时轮转写大量报错写入，也可能占用大量空间。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;本地备份目录&lt;/strong&gt;（如 &lt;code&gt;data/backups&lt;/code&gt;）：使用 pgBackRest 等在本机保存备份时，也有可能撑满磁盘。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果问题出在 Pigsty 管理节点或监控节点，还需考虑：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;监控数据&lt;/strong&gt;：VictoriaMetrics 的时序指标和 VictoriaLogs 日志存储都会占用磁盘，可检查保留策略。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;对象存储数据&lt;/strong&gt;：Pigsty 集成的 MinIO 对象存储可能会被用于 PG 备份保存。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;明确占用空间最大的目录后，可进一步使用 &lt;code&gt;du -sh &amp;lt;目录&amp;gt;&lt;/code&gt; 深入查找特定大型文件或子目录。&lt;/p&gt;</description></item><item><title>误删处理</title><link>https://pigsty.cc/docs/pgsql/tutorial/drop/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/pgsql/tutorial/drop/</guid><description>&lt;h2 id="误删数据"&gt;误删数据&lt;/h2&gt;
&lt;p&gt;如果是小批量 &lt;code&gt;DELETE&lt;/code&gt; 误操作，可以考虑使用 &lt;a href="https://pigsty.cc/ext/e/pg_surgery"&gt;&lt;code&gt;pg_surgery&lt;/code&gt;&lt;/a&gt; 或者 &lt;a href="https://pigsty.cc/ext/e/pg_dirtyread"&gt;&lt;code&gt;pg_dirtyread&lt;/code&gt;&lt;/a&gt; 扩展进行原地手术恢复。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;-- 立即关闭此表上的 Auto Vacuum 并中止 Auto Vacuum 本表的 worker 进程
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;ALTER&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;TABLE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;public&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;some_table&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;SET&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;autovacuum_enabled&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;off&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;toast&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;autovacuum_enabled&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;off&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;EXTENSION&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pg_dirtyread&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pg_dirtyread&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;tablename&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;AS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;col1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;type1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;col2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;type2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;如果被删除的数据已经被 VACUUM 回收，那么使用通用的误删处理流程。&lt;/p&gt;
&lt;h2 id="误删对象"&gt;误删对象&lt;/h2&gt;
&lt;p&gt;当出现 &lt;code&gt;DROP/DELETE&lt;/code&gt; 类误操作，通常按照以下流程决定恢复方案。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;确认此数据是否可以通过业务系统或其他数据系统找回，如果可以，直接从业务侧修复。&lt;/li&gt;
&lt;li&gt;确认是否有延迟从库，如果有，推进延迟从库至误删时间点，查询出来恢复。&lt;/li&gt;
&lt;li&gt;如果数据已经确认删除，确认备份信息，恢复范围是否覆盖误删时间点，如果覆盖，开始 PITR&lt;/li&gt;
&lt;li&gt;确认是整集群原地 &lt;a href="https://pigsty.cc/docs/pgsql/backup/restore"&gt;PITR 回滚&lt;/a&gt;，还是新开服务器重放，还是用从库来重放，并执行恢复策略&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="误删集群"&gt;误删集群&lt;/h2&gt;
&lt;p&gt;如果出现整个数据库集群通过 Pigsty 管理命令被误删的情况，例如错误的执行 &lt;a href="https://pigsty.cc/docs/pgsql/playbook#pgsql-rmyml"&gt;&lt;code&gt;pgsql-rm.yml&lt;/code&gt;&lt;/a&gt; 剧本或 &lt;code&gt;bin/pgsql-rm&lt;/code&gt; 命令。
除非您指定了 &lt;a href="https://pigsty.cc/docs/pgsql/param#pg_rm_backup"&gt;&lt;code&gt;pg_rm_backup&lt;/code&gt;&lt;/a&gt; 参数为 &lt;code&gt;false&lt;/code&gt;，否则备份会与数据库集群一起被删除。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;警告&lt;/strong&gt;：在这种情况，您的数据将无法找回！&lt;strong&gt;请务必三思而后行！&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;建议：对于生产环境，您可以在配置清单中全局配置此参数为 &lt;code&gt;false&lt;/code&gt;，在移除集群时保留备份。&lt;/p&gt;</description></item><item><title>数据迁移</title><link>https://pigsty.cc/docs/pgsql/migration/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/pgsql/migration/</guid><description>&lt;p&gt;Pigsty 内置了一个剧本 &lt;a href="https://github.com/pgsty/pigsty/blob/main/pgsql-migration.yml"&gt;&lt;code&gt;pgsql-migration.yml&lt;/code&gt;&lt;/a&gt;，基于逻辑复制来实现在线数据库迁移。&lt;/p&gt;
&lt;p&gt;通过预生成的自动化脚本，应用停机时间可以缩减到几秒内。但请注意，逻辑复制需要 PostgreSQL 10 以上的版本才能工作。&lt;/p&gt;
&lt;p&gt;当然如果您有充足的停机时间预算，那么总是可以使用 &lt;code&gt;pg_dump | psql&lt;/code&gt; 的方式进行停机迁移。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="定义迁移任务"&gt;定义迁移任务&lt;/h2&gt;
&lt;p&gt;想要使用 Pigsty 提供的在线迁移剧本，您需要创建一个定义文件，来描述迁移任务的细节。&lt;/p&gt;
&lt;p&gt;请查看任务定义文件示例作为参考： &lt;a href="https://github.com/pgsty/pigsty/blob/main/files/migration/pg-meta.yml"&gt;&lt;code&gt;files/migration/pg-meta.yml&lt;/code&gt;&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;这个迁移任务要将 &lt;code&gt;pg-meta.meta&lt;/code&gt; 在线迁移到 &lt;code&gt;pg-test.test&lt;/code&gt;，前者称为 &lt;strong&gt;源集群（SRC）&lt;/strong&gt;， 后者称为 &lt;strong&gt;宿集群（DST）&lt;/strong&gt;。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;pg-meta-1	10.10.10.10 --&amp;gt; pg-test-1	10.10.10.11 (10.10.10.12,10.10.10.13)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;基于逻辑复制的迁移以数据库为单位，您需要指定需要迁移的数据库名称，以及数据库源宿集群主节点的 IP 地址，以及超级用户的连接信息。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nn"&gt;---&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;#-----------------------------------------------------------------&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# PG_MIGRATION&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;#-----------------------------------------------------------------&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;context_dir&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;~/migration &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 迁移手册 &amp;amp; 脚本的放置目录&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;#-----------------------------------------------------------------&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# SRC Cluster (旧集群)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;#-----------------------------------------------------------------&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;src_cls&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;pg-meta &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 源集群名称 &amp;lt;必填&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;src_db&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;meta &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 源数据库名称 &amp;lt;必填&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;src_ip&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;10.10.10.10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 源集群主 IP &amp;lt;必填&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;#src_pg: &amp;#39;&amp;#39; # 如果定义，使用此作为源 dbsu pgurl 代替：&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# # postgres://{{ pg_admin_username }}@{{ src_ip }}/{{ src_db }}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# # 例如: &amp;#39;postgres://dbuser_dba:DBUser.DBA@10.10.10.10:5432/meta&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;#sub_conn: &amp;#39;&amp;#39; # 如果定义，使用此作为订阅连接字符串代替：&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# # host={{ src_ip }} dbname={{ src_db }} user={{ pg_replication_username }}&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# # 例如: &amp;#39;host=10.10.10.10 dbname=meta user=replicator password=DBUser.Replicator&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;#-----------------------------------------------------------------&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# DST Cluster (新集群)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;#-----------------------------------------------------------------&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;dst_cls&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;pg-test &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 宿集群名称 &amp;lt;必填&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;dst_db&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;test &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 宿数据库名称 &amp;lt;必填&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;dst_ip&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;10.10.10.11&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 宿集群主 IP &amp;lt;必填&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;#dst_pg: &amp;#39;&amp;#39; # 如果定义，使用此作为目标 dbsu pgurl 代替：&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# # postgres://{{ pg_admin_username }}@{{ dst_ip }}/{{ dst_db }}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# # 例如: &amp;#39;postgres://dbuser_dba:DBUser.DBA@10.10.10.11:5432/test&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;#-----------------------------------------------------------------&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# PGSQL&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;#-----------------------------------------------------------------&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;pg_dbsu&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;postgres&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;pg_replication_username&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;replicator&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;pg_replication_password&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;DBUser.Replicator&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;pg_admin_username&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;dbuser_dba&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;pg_admin_password&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;DBUser.DBA&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;pg_monitor_username&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;dbuser_monitor&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;pg_monitor_password&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;DBUser.Monitor&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;#-----------------------------------------------------------------&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nn"&gt;...&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;默认情况下，源宿集群两侧的超级用户连接串会使用全局的管理员用户和各自主库的 IP 地址拼接而成，但您总是可以通过 &lt;code&gt;src_pg&lt;/code&gt; 和 &lt;code&gt;dst_pg&lt;/code&gt; 参数来覆盖这些默认值。
同理，您也可以通过 &lt;code&gt;sub_conn&lt;/code&gt; 参数来覆盖订阅连接串的默认值。&lt;/p&gt;</description></item><item><title>参考资料</title><link>https://pigsty.cc/docs/pgsql/_div_reference/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/pgsql/_div_reference/</guid><description>&lt;p&gt;参数配置与参考文档&lt;/p&gt;</description></item><item><title>监控系统</title><link>https://pigsty.cc/docs/pgsql/monitor/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/pgsql/monitor/</guid><description>&lt;p&gt;本文介绍了 Pigsty 的监控系统架构，包括监控指标，日志，与目标管理的方式。以及如何 &lt;a href="#%E7%9B%91%E6%8E%A7%E7%8E%B0%E6%9C%89%E9%9B%86%E7%BE%A4"&gt;监控现有PG集群&lt;/a&gt; 与远程 &lt;a href="#%E7%9B%91%E6%8E%A7rds"&gt;RDS服务&lt;/a&gt;。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="监控概览"&gt;监控概览&lt;/h2&gt;
&lt;p&gt;Pigsty 使用现代的可观测技术栈对 PostgreSQL 进行监控：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;使用 Grafana 进行指标可视化和 PostgreSQL 数据源。&lt;/li&gt;
&lt;li&gt;使用 VictoriaMetrics 来采集 PostgreSQL / Pgbouncer / Patroni / HAProxy / Node 的指标&lt;/li&gt;
&lt;li&gt;使用 VictoriaLogs 来记录 PostgreSQL / Pgbouncer / Patroni / pgBackRest 以及主机组件的日志&lt;/li&gt;
&lt;li&gt;Pigsty 提供了开箱即用的 Grafana 仪表盘，展示与 PostgreSQL 有关的方方面面。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;监控指标&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;PostgreSQL 本身的监控指标完全由 pg_exporter 配置文件所定义：&lt;a href="https://github.com/pgsty/pigsty/blob/main/roles/pgsql/templates/pg_exporter.yml"&gt;&lt;code&gt;pg_exporter.yml&lt;/code&gt;&lt;/a&gt;
它将进一步被 Prometheus 记录规则和告警规则进行加工处理：&lt;a href="https://github.com/pgsty/pigsty/blob/main/files/prometheus/rules/pgsql.yml"&gt;&lt;code&gt;files/prometheus/rules/pgsql.yml&lt;/code&gt;&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;Pigsty 使用三个身份标签：&lt;code&gt;cls&lt;/code&gt;、&lt;code&gt;ins&lt;/code&gt;、&lt;code&gt;ip&lt;/code&gt;，它们将附加到所有指标和日志上。此外，Pgbouncer 的监控指标，主机节点 NODE，与负载均衡器的监控指标也会被 Pigsty 所使用，并尽可能地使用相同的标签以便于关联分析。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;cls: pg-meta, ins: pg-meta-1, ip&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;10.10.10.10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;}&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;cls: pg-meta, ins: pg-test-1, ip&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;10.10.10.11&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;}&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;cls: pg-meta, ins: pg-test-2, ip&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;10.10.10.12&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;}&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;cls: pg-meta, ins: pg-test-3, ip&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;10.10.10.13&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;}&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;日志&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>监控面板</title><link>https://pigsty.cc/docs/pgsql/dashboard/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/pgsql/dashboard/</guid><description>&lt;blockquote&gt;
&lt;p&gt;Pigsty 为 PostgreSQL 提供了诸多开箱即用的 Grafana 监控仪表盘： &lt;a href="https://demo.pigsty.cc/d/pgsql-overview"&gt;Demo&lt;/a&gt; &amp;amp; &lt;a href="https://github.com/pgsty/pigsty/wiki/Gallery"&gt;Gallery&lt;/a&gt;。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;在 Pigsty 中共有 26 个与 PostgreSQL 相关的监控面板，按照层次分为 总览，集群，实例，数据库四大类，按照数据来源又分为 &lt;a href="#%E6%80%BB%E8%A7%88"&gt;PGSQL&lt;/a&gt;，&lt;a href="#pgcat"&gt;PGCAT&lt;/a&gt;，&lt;a href="#pglog"&gt;PGLOG&lt;/a&gt; 三大类。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://pigsty.cc/img/pigsty/dashboard.jpg" alt="pigsty-dashboard.jpg"&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="总览"&gt;总览&lt;/h2&gt;
&lt;table class="full-width"&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th style="text-align: center"&gt;总览&lt;/th&gt;
 &lt;th style="text-align: center"&gt;集群&lt;/th&gt;
 &lt;th style="text-align: center"&gt;实例&lt;/th&gt;
 &lt;th style="text-align: center"&gt;数据库&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td style="text-align: center"&gt;&lt;a href="https://demo.pigsty.cc/d/pgsql-overview"&gt;PGSQL Overview&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: center"&gt;&lt;a href="https://demo.pigsty.cc/d/pgsql-cluster"&gt;PGSQL Cluster&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: center"&gt;&lt;a href="https://demo.pigsty.cc/d/pgsql-instance"&gt;PGSQL Instance&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: center"&gt;&lt;a href="https://demo.pigsty.cc/d/pgsql-database"&gt;PGSQL Database&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: center"&gt;&lt;a href="https://demo.pigsty.cc/d/pgsql-alert"&gt;PGSQL Alert&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: center"&gt;&lt;a href="https://demo.pigsty.cc/d/pgrds-cluster"&gt;PGRDS Cluster&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: center"&gt;&lt;a href="https://demo.pigsty.cc/d/pgrds-instance"&gt;PGRDS Instance&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: center"&gt;&lt;a href="https://demo.pigsty.cc/d/pgcat-database"&gt;PGCAT Database&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: center"&gt;&lt;a href="https://demo.pigsty.cc/d/pgsql-shard"&gt;PGSQL Shard&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: center"&gt;&lt;a href="https://demo.pigsty.cc/d/pgsql-activity"&gt;PGSQL Activity&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: center"&gt;&lt;a href="https://demo.pigsty.cc/d/pgcat-instance"&gt;PGCAT Instance&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: center"&gt;&lt;a href="https://demo.pigsty.cc/d/pgsql-tables"&gt;PGSQL Tables&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: center"&gt;&lt;/td&gt;
 &lt;td style="text-align: center"&gt;&lt;a href="https://demo.pigsty.cc/d/pgsql-replication"&gt;PGSQL Replication&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: center"&gt;&lt;a href="https://demo.pigsty.cc/d/pgsql-persist"&gt;PGSQL Persist&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: center"&gt;&lt;a href="https://demo.pigsty.cc/d/pgsql-table"&gt;PGSQL Table&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: center"&gt;&lt;/td&gt;
 &lt;td style="text-align: center"&gt;&lt;a href="https://demo.pigsty.cc/d/pgsql-service"&gt;PGSQL Service&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: center"&gt;&lt;a href="https://demo.pigsty.cc/d/pgsql-proxy"&gt;PGSQL Proxy&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: center"&gt;&lt;a href="https://demo.pigsty.cc/d/pgcat-table"&gt;PGCAT Table&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: center"&gt;&lt;/td&gt;
 &lt;td style="text-align: center"&gt;&lt;a href="https://demo.pigsty.cc/d/pgsql-databases"&gt;PGSQL Databases&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: center"&gt;&lt;a href="https://demo.pigsty.cc/d/pgsql-pgbouncer"&gt;PGSQL Pgbouncer&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: center"&gt;&lt;a href="https://demo.pigsty.cc/d/pgsql-query"&gt;PGSQL Query&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: center"&gt;&lt;/td&gt;
 &lt;td style="text-align: center"&gt;&lt;a href="https://demo.pigsty.cc/d/pgsql-patroni"&gt;PGSQL Patroni&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: center"&gt;&lt;a href="https://demo.pigsty.cc/d/pgsql-session"&gt;PGSQL Session&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: center"&gt;&lt;a href="https://demo.pigsty.cc/d/pgcat-query"&gt;PGCAT Query&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: center"&gt;&lt;/td&gt;
 &lt;td style="text-align: center"&gt;&lt;a href="https://demo.pigsty.cc/d/pgsql-pitr"&gt;PGSQL PITR&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: center"&gt;&lt;a href="https://demo.pigsty.cc/d/pgsql-xacts"&gt;PGSQL Xacts&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: center"&gt;&lt;a href="https://demo.pigsty.cc/d/pgcat-locks"&gt;PGCAT Locks&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: center"&gt;&lt;/td&gt;
 &lt;td style="text-align: center"&gt;&lt;/td&gt;
 &lt;td style="text-align: center"&gt;&lt;a href="https://demo.pigsty.cc/d/pgsql-exporter"&gt;PGSQL Exporter&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: center"&gt;&lt;a href="https://demo.pigsty.cc/d/pgcat-schema"&gt;PGCAT Schema&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;概览&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>指标列表</title><link>https://pigsty.cc/docs/pgsql/metric/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/pgsql/metric/</guid><description>&lt;p&gt;&lt;a href="https://pigsty.cc/docs/pgsql"&gt;&lt;strong&gt;&lt;code&gt;PGSQL&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt; 模块包含有 638 类可用监控指标。&lt;/p&gt;
&lt;table class="full-width"&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Metric Name&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;th&gt;Labels&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;ALERTS&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;category&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;level&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;severity&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;alertname&lt;/code&gt;, &lt;code&gt;alertstate&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;ALERTS_FOR_STATE&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;category&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;level&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;severity&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;alertname&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;cls:pressure1&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;cls:pressure15&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;cls:pressure5&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;go_gc_duration_seconds&lt;/td&gt;
 &lt;td&gt;summary&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;quantile&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;A summary of the pause duration of garbage collection cycles.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;go_gc_duration_seconds_count&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;go_gc_duration_seconds_sum&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;go_goroutines&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of goroutines that currently exist.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;go_info&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;version&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Information about the Go environment.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;go_memstats_alloc_bytes&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of bytes allocated and still in use.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;go_memstats_alloc_bytes_total&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Total number of bytes allocated, even if freed.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;go_memstats_buck_hash_sys_bytes&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of bytes used by the profiling bucket hash table.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;go_memstats_frees_total&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Total number of frees.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;go_memstats_gc_sys_bytes&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of bytes used for garbage collection system metadata.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;go_memstats_heap_alloc_bytes&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of heap bytes allocated and still in use.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;go_memstats_heap_idle_bytes&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of heap bytes waiting to be used.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;go_memstats_heap_inuse_bytes&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of heap bytes that are in use.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;go_memstats_heap_objects&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of allocated objects.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;go_memstats_heap_released_bytes&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of heap bytes released to OS.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;go_memstats_heap_sys_bytes&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of heap bytes obtained from system.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;go_memstats_last_gc_time_seconds&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of seconds since 1970 of last garbage collection.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;go_memstats_lookups_total&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Total number of pointer lookups.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;go_memstats_mallocs_total&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Total number of mallocs.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;go_memstats_mcache_inuse_bytes&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of bytes in use by mcache structures.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;go_memstats_mcache_sys_bytes&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of bytes used for mcache structures obtained from system.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;go_memstats_mspan_inuse_bytes&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of bytes in use by mspan structures.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;go_memstats_mspan_sys_bytes&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of bytes used for mspan structures obtained from system.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;go_memstats_next_gc_bytes&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of heap bytes when next garbage collection will take place.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;go_memstats_other_sys_bytes&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of bytes used for other system allocations.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;go_memstats_stack_inuse_bytes&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of bytes in use by the stack allocator.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;go_memstats_stack_sys_bytes&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of bytes obtained from system for stack allocator.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;go_memstats_sys_bytes&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of bytes obtained from system.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;go_threads&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of OS threads created.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;ins:pressure1&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;ins:pressure15&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;ins:pressure5&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;patroni_cluster_unlocked&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;, &lt;code&gt;scope&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Value is 1 if the cluster is unlocked, 0 if locked.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;patroni_dcs_last_seen&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;, &lt;code&gt;scope&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Epoch timestamp when DCS was last contacted successfully by Patroni.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;patroni_failsafe_mode_is_active&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;, &lt;code&gt;scope&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Value is 1 if failsafe mode is active, 0 if inactive.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;patroni_is_paused&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;, &lt;code&gt;scope&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Value is 1 if auto failover is disabled, 0 otherwise.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;patroni_master&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;, &lt;code&gt;scope&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Value is 1 if this node is the leader, 0 otherwise.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;patroni_pending_restart&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;, &lt;code&gt;scope&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Value is 1 if the node needs a restart, 0 otherwise.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;patroni_postgres_in_archive_recovery&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;, &lt;code&gt;scope&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Value is 1 if Postgres is replicating from archive, 0 otherwise.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;patroni_postgres_running&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;, &lt;code&gt;scope&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Value is 1 if Postgres is running, 0 otherwise.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;patroni_postgres_server_version&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;, &lt;code&gt;scope&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Version of Postgres (if running), 0 otherwise.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;patroni_postgres_streaming&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;, &lt;code&gt;scope&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Value is 1 if Postgres is streaming, 0 otherwise.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;patroni_postgres_timeline&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;, &lt;code&gt;scope&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Postgres timeline of this node (if running), 0 otherwise.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;patroni_postmaster_start_time&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;, &lt;code&gt;scope&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Epoch seconds since Postgres started.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;patroni_primary&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;, &lt;code&gt;scope&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Value is 1 if this node is the leader, 0 otherwise.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;patroni_replica&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;, &lt;code&gt;scope&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Value is 1 if this node is a replica, 0 otherwise.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;patroni_standby_leader&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;, &lt;code&gt;scope&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Value is 1 if this node is the standby_leader, 0 otherwise.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;patroni_sync_standby&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;, &lt;code&gt;scope&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Value is 1 if this node is a sync standby replica, 0 otherwise.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;patroni_up&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;patroni_version&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;, &lt;code&gt;scope&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Patroni semver without periods.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;patroni_xlog_location&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;, &lt;code&gt;scope&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Current location of the Postgres transaction log, 0 if this node is not the leader.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;patroni_xlog_paused&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;, &lt;code&gt;scope&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Value is 1 if the Postgres xlog is paused, 0 otherwise.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;patroni_xlog_received_location&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;, &lt;code&gt;scope&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Current location of the received Postgres transaction log, 0 if this node is not a replica.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;patroni_xlog_replayed_location&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;, &lt;code&gt;scope&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Current location of the replayed Postgres transaction log, 0 if this node is not a replica.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;patroni_xlog_replayed_timestamp&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;, &lt;code&gt;scope&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Current timestamp of the replayed Postgres transaction log, 0 if null.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:cls:active_backends&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:cls:active_time_rate15m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:cls:active_time_rate1m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:cls:active_time_rate5m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:cls:age&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:cls:buf_alloc_rate1m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:cls:buf_clean_rate1m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:cls:buf_flush_backend_rate1m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:cls:buf_flush_checkpoint_rate1m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:cls:cpu_count&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:cls:cpu_usage&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:cls:cpu_usage_15m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:cls:cpu_usage_1m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:cls:cpu_usage_5m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:cls:db_size&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:cls:file_size&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:cls:ixact_backends&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:cls:ixact_time_rate1m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:cls:lag_bytes&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:cls:lag_seconds&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:cls:leader&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:cls:load1&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:cls:load15&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:cls:load5&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:cls:lock_count&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:cls:locks&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;, &lt;code&gt;mode&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:cls:log_size&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:cls:lsn_rate1m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:cls:members&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:cls:num_backends&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:cls:partition&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:cls:receiver&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;state&lt;/code&gt;, &lt;code&gt;slot_name&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;appname&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;, &lt;code&gt;sender_host&lt;/code&gt;, &lt;code&gt;sender_port&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:cls:rlock_count&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:cls:saturation1&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:cls:saturation15&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:cls:saturation5&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:cls:sender&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;pid&lt;/code&gt;, &lt;code&gt;usename&lt;/code&gt;, &lt;code&gt;address&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;appname&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:cls:session_time_rate1m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:cls:size&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:cls:slot_count&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:cls:slot_retained_bytes&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:cls:standby_count&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:cls:sync_state&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:cls:timeline&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:cls:tup_deleted_rate1m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:cls:tup_fetched_rate1m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:cls:tup_inserted_rate1m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:cls:tup_modified_rate1m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:cls:tup_returned_rate1m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:cls:wal_size&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:cls:xact_commit_rate15m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:cls:xact_commit_rate1m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:cls:xact_commit_rate5m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:cls:xact_rollback_rate15m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:cls:xact_rollback_rate1m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:cls:xact_rollback_rate5m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:cls:xact_total_rate15m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:cls:xact_total_rate1m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:cls:xact_total_sigma15m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:cls:xlock_count&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:db:active_backends&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:db:active_time_rate15m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:db:active_time_rate1m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:db:active_time_rate5m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:db:age&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:db:age_deriv1h&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:db:age_exhaust&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:db:blk_io_time_seconds_rate1m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:db:blk_read_time_seconds_rate1m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:db:blk_write_time_seconds_rate1m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:db:blks_access_1m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:db:blks_hit_1m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:db:blks_hit_ratio1m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:db:blks_read_1m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:db:conn_limit&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:db:conn_usage&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:db:db_size&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:db:ixact_backends&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:db:ixact_time_rate1m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:db:lock_count&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:db:num_backends&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:db:rlock_count&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:db:session_time_rate1m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:db:temp_bytes_rate1m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:db:temp_files_1m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:db:tup_deleted_rate1m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:db:tup_fetched_rate1m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:db:tup_inserted_rate1m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:db:tup_modified_rate1m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:db:tup_returned_rate1m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:db:wlock_count&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:db:xact_commit_rate15m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:db:xact_commit_rate1m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:db:xact_commit_rate5m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:db:xact_rollback_rate15m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:db:xact_rollback_rate1m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:db:xact_rollback_rate5m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:db:xact_total_rate15m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:db:xact_total_rate1m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:db:xact_total_rate5m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:db:xact_total_sigma15m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:db:xlock_count&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:env:active_backends&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:env:active_time_rate15m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:env:active_time_rate1m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:env:active_time_rate5m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:env:age&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:env:cpu_count&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:env:cpu_usage&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:env:cpu_usage_15m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:env:cpu_usage_1m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:env:cpu_usage_5m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:env:ixact_backends&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:env:ixact_time_rate1m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:env:lag_bytes&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:env:lag_seconds&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:env:lsn_rate1m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:env:session_time_rate1m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:env:tup_deleted_rate1m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:env:tup_fetched_rate1m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:env:tup_inserted_rate1m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:env:tup_modified_rate1m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:env:tup_returned_rate1m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:env:xact_commit_rate15m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:env:xact_commit_rate1m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:env:xact_commit_rate5m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:env:xact_rollback_rate15m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:env:xact_rollback_rate1m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:env:xact_rollback_rate5m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:env:xact_total_rate15m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:env:xact_total_rate1m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:env:xact_total_sigma15m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:ins:active_backends&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:ins:active_time_rate15m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:ins:active_time_rate1m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:ins:active_time_rate5m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:ins:age&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:ins:blks_hit_ratio1m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:ins:buf_alloc_rate1m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:ins:buf_clean_rate1m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:ins:buf_flush_backend_rate1m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:ins:buf_flush_checkpoint_rate1m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:ins:ckpt_1h&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:ins:ckpt_req_1m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:ins:ckpt_timed_1m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:ins:conn_limit&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:ins:conn_usage&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:ins:cpu_count&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:ins:cpu_usage&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:ins:cpu_usage_15m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:ins:cpu_usage_1m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:ins:cpu_usage_5m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:ins:db_size&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:ins:file_size&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:ins:fs_size&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:ins:is_leader&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:ins:ixact_backends&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:ins:ixact_time_rate1m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:ins:lag_bytes&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:ins:lag_seconds&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:ins:load1&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:ins:load15&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:ins:load5&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:ins:lock_count&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:ins:locks&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;mode&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:ins:log_size&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:ins:lsn_rate1m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:ins:mem_size&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:ins:num_backends&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:ins:rlock_count&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:ins:saturation1&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:ins:saturation15&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:ins:saturation5&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:ins:session_time_rate1m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:ins:slot_retained_bytes&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:ins:space_usage&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:ins:status&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:ins:sync_state&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:ins:target_count&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:ins:timeline&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:ins:tup_deleted_rate1m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:ins:tup_fetched_rate1m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:ins:tup_inserted_rate1m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:ins:tup_modified_rate1m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:ins:tup_returned_rate1m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:ins:wal_size&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:ins:wlock_count&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:ins:xact_commit_rate15m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:ins:xact_commit_rate1m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:ins:xact_commit_rate5m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:ins:xact_rollback_rate15m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:ins:xact_rollback_rate1m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:ins:xact_rollback_rate5m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:ins:xact_total_rate15m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:ins:xact_total_rate1m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:ins:xact_total_rate5m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:ins:xact_total_sigma15m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:ins:xlock_count&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:query:call_rate1m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;query&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:query:rt_1m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;query&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg:table:scan_rate1m&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;relname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_activity_count&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;state&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Count of connection among (datname,state)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_activity_max_conn_duration&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;state&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Max backend session duration since state change among (datname, state)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_activity_max_duration&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;state&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Max duration since last state change among (datname, state)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_activity_max_tx_duration&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;state&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Max transaction duration since state change among (datname, state)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_archiver_failed_count&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of failed attempts for archiving WAL files&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_archiver_finish_count&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of WAL files that have been successfully archived&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_archiver_last_failed_time&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Time of the last failed archival operation&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_archiver_last_finish_time&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Time of the last successful archive operation&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_archiver_reset_time&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Time at which archive statistics were last reset&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_backend_count&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;type&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Database backend process count by backend_type&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_bgwriter_buffers_alloc&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of buffers allocated&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_bgwriter_buffers_backend&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of buffers written directly by a backend&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_bgwriter_buffers_backend_fsync&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of times a backend had to execute its own fsync call&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_bgwriter_buffers_checkpoint&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of buffers written during checkpoints&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_bgwriter_buffers_clean&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of buffers written by the background writer&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_bgwriter_checkpoint_sync_time&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Total amount of time that has been spent in the portion of checkpoint processing where files are synchronized to disk, in seconds&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_bgwriter_checkpoint_write_time&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Total amount of time that has been spent in the portion of checkpoint processing where files are written to disk, in seconds&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_bgwriter_checkpoints_req&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of requested checkpoints that have been performed&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_bgwriter_checkpoints_timed&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of scheduled checkpoints that have been performed&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_bgwriter_maxwritten_clean&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of times the background writer stopped a cleaning scan because it had written too many buffers&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_bgwriter_reset_time&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Time at which bgwriter statistics were last reset&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_boot_time&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;unix timestamp when postmaster boot&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_checkpoint_checkpoint_lsn&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Latest checkpoint location&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_checkpoint_elapse&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Seconds elapsed since latest checkpoint in seconds&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_checkpoint_full_page_writes&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Latest checkpoint&amp;rsquo;s full_page_writes enabled&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_checkpoint_newest_commit_ts_xid&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Latest checkpoint&amp;rsquo;s newestCommitTsXid&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_checkpoint_next_multi_offset&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Latest checkpoint&amp;rsquo;s NextMultiOffset&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_checkpoint_next_multixact_id&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Latest checkpoint&amp;rsquo;s NextMultiXactId&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_checkpoint_next_oid&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Latest checkpoint&amp;rsquo;s NextOID&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_checkpoint_next_xid&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Latest checkpoint&amp;rsquo;s NextXID xid&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_checkpoint_next_xid_epoch&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Latest checkpoint&amp;rsquo;s NextXID epoch&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_checkpoint_oldest_active_xid&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Latest checkpoint&amp;rsquo;s oldestActiveXID&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_checkpoint_oldest_commit_ts_xid&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Latest checkpoint&amp;rsquo;s oldestCommitTsXid&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_checkpoint_oldest_multi_dbid&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Latest checkpoint&amp;rsquo;s oldestMulti&amp;rsquo;s DB OID&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_checkpoint_oldest_multi_xid&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Latest checkpoint&amp;rsquo;s oldestMultiXid&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_checkpoint_oldest_xid&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Latest checkpoint&amp;rsquo;s oldestXID&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_checkpoint_oldest_xid_dbid&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Latest checkpoint&amp;rsquo;s oldestXID&amp;rsquo;s DB OID&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_checkpoint_prev_tli&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Latest checkpoint&amp;rsquo;s PrevTimeLineID&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_checkpoint_redo_lsn&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Latest checkpoint&amp;rsquo;s REDO location&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_checkpoint_time&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Time of latest checkpoint&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_checkpoint_tli&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Latest checkpoint&amp;rsquo;s TimeLineID&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_conf_reload_time&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;seconds since last configuration reload&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_db_active_time&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Time spent executing SQL statements in this database, in seconds&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_db_age&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Age of database calculated from datfrozenxid&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_db_allow_conn&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;If false(0) then no one can connect to this database.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_db_blk_read_time&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Time spent reading data file blocks by backends in this database, in seconds&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_db_blk_write_time&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Time spent writing data file blocks by backends in this database, in seconds&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_db_blks_access&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of times disk blocks that accessed read+hit&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_db_blks_hit&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of times disk blocks were found already in the buffer cache&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_db_blks_read&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of disk blocks read in this database&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_db_cks_fail_time&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Time at which the last data page checksum failure was detected in this database&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_db_cks_fails&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of data page checksum failures detected in this database, -1 for not enabled&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_db_confl_confl_bufferpin&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of queries in this database that have been canceled due to pinned buffers&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_db_confl_confl_deadlock&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of queries in this database that have been canceled due to deadlocks&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_db_confl_confl_lock&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of queries in this database that have been canceled due to lock timeouts&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_db_confl_confl_snapshot&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of queries in this database that have been canceled due to old snapshots&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_db_confl_confl_tablespace&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of queries in this database that have been canceled due to dropped tablespaces&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_db_conflicts&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of queries canceled due to conflicts with recovery in this database&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_db_conn_limit&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Sets maximum number of concurrent connections that can be made to this database. -1 means no limit.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_db_datid&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;OID of the database&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_db_deadlocks&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of deadlocks detected in this database&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_db_frozen_xid&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;All transaction IDs before this one have been frozened&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_db_is_template&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;If true(1), then this database can be cloned by any user with CREATEDB privileges&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_db_ixact_time&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Time spent idling while in a transaction in this database, in seconds&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_db_numbackends&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of backends currently connected to this database&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_db_reset_time&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Time at which database statistics were last reset&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_db_session_time&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Time spent by database sessions in this database, in seconds&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_db_sessions&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Total number of sessions established to this database&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_db_sessions_abandoned&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of database sessions to this database that were terminated because connection to the client was lost&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_db_sessions_fatal&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of database sessions to this database that were terminated by fatal errors&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_db_sessions_killed&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of database sessions to this database that were terminated by operator intervention&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_db_temp_bytes&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Total amount of data written to temporary files by queries in this database.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_db_temp_files&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of temporary files created by queries in this database&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_db_tup_deleted&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of rows deleted by queries in this database&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_db_tup_fetched&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of rows fetched by queries in this database&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_db_tup_inserted&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of rows inserted by queries in this database&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_db_tup_modified&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of rows modified by queries in this database&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_db_tup_returned&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of rows returned by queries in this database&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_db_tup_updated&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of rows updated by queries in this database&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_db_xact_commit&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of transactions in this database that have been committed&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_db_xact_rollback&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of transactions in this database that have been rolled back&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_db_xact_total&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of transactions in this database&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_downstream_count&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;state&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Count of corresponding state&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_exporter_agent_up&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_exporter_last_scrape_time&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;seconds exporter spending on scrapping&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_exporter_query_cache_ttl&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;query&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;times to live of query cache&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_exporter_query_scrape_duration&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;query&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;seconds query spending on scrapping&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_exporter_query_scrape_error_count&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;query&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;times the query failed&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_exporter_query_scrape_hit_count&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;query&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;numbers been scrapped from this query&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_exporter_query_scrape_metric_count&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;query&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;numbers of metrics been scrapped from this query&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_exporter_query_scrape_total_count&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;query&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;times exporter server was scraped for metrics&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_exporter_scrape_duration&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;seconds exporter spending on scrapping&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_exporter_scrape_error_count&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;times exporter was scraped for metrics and failed&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_exporter_scrape_total_count&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;times exporter was scraped for metrics&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_exporter_server_scrape_duration&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;seconds exporter server spending on scrapping&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_exporter_server_scrape_error_count&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_exporter_server_scrape_total_count&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;times exporter server was scraped for metrics&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_exporter_server_scrape_total_seconds&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;seconds exporter server spending on scrapping&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_exporter_up&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;always be 1 if your could retrieve metrics&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_exporter_uptime&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;seconds since exporter primary server inited&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_flush_lsn&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;primary only, location of current wal syncing&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_func_calls&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;funcname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of times this function has been called&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_func_self_time&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;funcname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Total time spent in this function itself, not including other functions called by it, in ms&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_func_total_time&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;funcname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Total time spent in this function and all other functions called by it, in ms&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_in_recovery&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;server is in recovery mode? 1 for yes 0 for no&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_index_idx_blks_hit&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;relname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;relid&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;, &lt;code&gt;idxname&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of buffer hits in this index&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_index_idx_blks_read&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;relname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;relid&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;, &lt;code&gt;idxname&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of disk blocks read from this index&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_index_idx_scan&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;relname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;relid&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;, &lt;code&gt;idxname&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of index scans initiated on this index&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_index_idx_tup_fetch&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;relname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;relid&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;, &lt;code&gt;idxname&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of live table rows fetched by simple index scans using this index&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_index_idx_tup_read&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;relname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;relid&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;, &lt;code&gt;idxname&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of index entries returned by scans on this index&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_index_relpages&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;relname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;relid&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;, &lt;code&gt;idxname&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Size of the on-disk representation of this index in pages&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_index_reltuples&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;relname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;relid&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;, &lt;code&gt;idxname&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Estimate relation tuples&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_insert_lsn&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;primary only, location of current wal inserting&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_io_evictions&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;type&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;object&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;context&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of times a block has been written out from a shared or local buffer&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_io_extend_time&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;type&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;object&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;context&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Time spent in extend operations in seconds&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_io_extends&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;type&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;object&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;context&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of relation extend operations, each of the size specified in op_bytes.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_io_fsync_time&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;type&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;object&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;context&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Time spent in fsync operations in seconds&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_io_fsyncs&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;type&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;object&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;context&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of fsync calls. These are only tracked in context normal&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_io_hits&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;type&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;object&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;context&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;The number of times a desired block was found in a shared buffer.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_io_op_bytes&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;type&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;object&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;context&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;The number of bytes per unit of I/O read, written, or extended. 8192 by default&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_io_read_time&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;type&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;object&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;context&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Time spent in read operations in seconds&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_io_reads&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;type&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;object&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;context&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of read operations, each of the size specified in op_bytes.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_io_reset_time&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;type&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;object&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;context&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Timestamp at which these statistics were last reset&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_io_reuses&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;type&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;object&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;context&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;The number of times an existing buffer in reused&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_io_write_time&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;type&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;object&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;context&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Time spent in write operations in seconds&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_io_writeback_time&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;type&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;object&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;context&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Time spent in writeback operations in seconds&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_io_writebacks&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;type&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;object&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;context&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of units of size op_bytes which the process requested the kernel write out to permanent storage.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_io_writes&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;type&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;object&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;context&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of write operations, each of the size specified in op_bytes.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_is_in_recovery&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;1 if in recovery mode&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_is_wal_replay_paused&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;1 if wal play paused&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_lag&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;replica only, replication lag in seconds&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_last_replay_time&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;time when last transaction been replayed&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_lock_count&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;mode&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of locks of corresponding mode and database&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_lsn&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;log sequence number, current write location&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_meta_info&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;cls&lt;/code&gt;, &lt;code&gt;extensions&lt;/code&gt;, &lt;code&gt;version&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;primary_conninfo&lt;/code&gt;, &lt;code&gt;conf_path&lt;/code&gt;, &lt;code&gt;hba_path&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;cluster_id&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;listen_port&lt;/code&gt;, &lt;code&gt;wal_level&lt;/code&gt;, &lt;code&gt;ver_num&lt;/code&gt;, &lt;code&gt;cluster_name&lt;/code&gt;, &lt;code&gt;data_dir&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;constant 1&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_query_calls&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;query&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of times the statement was executed&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_query_exec_time&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;query&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Total time spent executing the statement, in seconds&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_query_io_time&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;query&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Total time the statement spent reading and writing blocks, in seconds&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_query_rows&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;query&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Total number of rows retrieved or affected by the statement&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_query_sblk_dirtied&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;query&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Total number of shared blocks dirtied by the statement&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_query_sblk_hit&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;query&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Total number of shared block cache hits by the statement&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_query_sblk_read&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;query&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Total number of shared blocks read by the statement&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_query_sblk_written&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;query&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Total number of shared blocks written by the statement&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_query_wal_bytes&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;query&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Total amount of WAL bytes generated by the statement&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_receive_lsn&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;replica only, location of wal synced to disk&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_recovery_backup_end_lsn&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Backup end location&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_recovery_backup_start_lsn&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Backup start location&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_recovery_min_lsn&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Minimum recovery ending location&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_recovery_min_timeline&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Min recovery ending loc&amp;rsquo;s timeline&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_recovery_prefetch_block_distance&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;How many blocks ahead the prefetcher is looking&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_recovery_prefetch_hit&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of blocks not prefetched because they were already in the buffer pool&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_recovery_prefetch_io_depth&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;How many prefetches have been initiated but are not yet known to have completed&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_recovery_prefetch_prefetch&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of blocks prefetched because they were not in the buffer pool&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_recovery_prefetch_reset_time&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Time at which these recovery prefetch statistics were last reset&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_recovery_prefetch_skip_fpw&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of blocks not prefetched because a full page image was included in the WAL&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_recovery_prefetch_skip_init&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of blocks not prefetched because they would be zero-initialized&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_recovery_prefetch_skip_new&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of blocks not prefetched because they didn&amp;rsquo;t exist yet&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_recovery_prefetch_skip_rep&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of blocks not prefetched because they were already recently prefetched&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_recovery_prefetch_wal_distance&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;How many bytes ahead the prefetcher is looking&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_recovery_require_record&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;End-of-backup record required&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_recv_flush_lsn&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;state&lt;/code&gt;, &lt;code&gt;slot_name&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;, &lt;code&gt;sender_host&lt;/code&gt;, &lt;code&gt;sender_port&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Last write-ahead log location already received and flushed to disk&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_recv_flush_tli&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;state&lt;/code&gt;, &lt;code&gt;slot_name&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;, &lt;code&gt;sender_host&lt;/code&gt;, &lt;code&gt;sender_port&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Timeline number of last write-ahead log location received and flushed to disk&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_recv_init_lsn&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;state&lt;/code&gt;, &lt;code&gt;slot_name&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;, &lt;code&gt;sender_host&lt;/code&gt;, &lt;code&gt;sender_port&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;First write-ahead log location used when WAL receiver is started&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_recv_init_tli&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;state&lt;/code&gt;, &lt;code&gt;slot_name&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;, &lt;code&gt;sender_host&lt;/code&gt;, &lt;code&gt;sender_port&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;First timeline number used when WAL receiver is started&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_recv_msg_recv_time&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;state&lt;/code&gt;, &lt;code&gt;slot_name&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;, &lt;code&gt;sender_host&lt;/code&gt;, &lt;code&gt;sender_port&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Receipt time of last message received from origin WAL sender&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_recv_msg_send_time&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;state&lt;/code&gt;, &lt;code&gt;slot_name&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;, &lt;code&gt;sender_host&lt;/code&gt;, &lt;code&gt;sender_port&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Send time of last message received from origin WAL sender&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_recv_pid&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;state&lt;/code&gt;, &lt;code&gt;slot_name&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;, &lt;code&gt;sender_host&lt;/code&gt;, &lt;code&gt;sender_port&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Process ID of the WAL receiver process&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_recv_reported_lsn&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;state&lt;/code&gt;, &lt;code&gt;slot_name&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;, &lt;code&gt;sender_host&lt;/code&gt;, &lt;code&gt;sender_port&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Last write-ahead log location reported to origin WAL sender&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_recv_reported_time&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;state&lt;/code&gt;, &lt;code&gt;slot_name&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;, &lt;code&gt;sender_host&lt;/code&gt;, &lt;code&gt;sender_port&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Time of last write-ahead log location reported to origin WAL sender&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_recv_time&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;state&lt;/code&gt;, &lt;code&gt;slot_name&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;, &lt;code&gt;sender_host&lt;/code&gt;, &lt;code&gt;sender_port&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Time of current snapshot&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_recv_write_lsn&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;state&lt;/code&gt;, &lt;code&gt;slot_name&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;, &lt;code&gt;sender_host&lt;/code&gt;, &lt;code&gt;sender_port&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Last write-ahead log location already received and written to disk, but not flushed.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_relkind_count&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;, &lt;code&gt;relkind&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of relations of corresponding relkind&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_repl_backend_xmin&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;pid&lt;/code&gt;, &lt;code&gt;usename&lt;/code&gt;, &lt;code&gt;address&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;appname&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;This standby&amp;rsquo;s xmin horizon reported by hot_standby_feedback.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_repl_client_port&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;pid&lt;/code&gt;, &lt;code&gt;usename&lt;/code&gt;, &lt;code&gt;address&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;appname&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;TCP port number that the client is using for communication with this WAL sender, or -1 if a Unix socket is used&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_repl_flush_diff&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;pid&lt;/code&gt;, &lt;code&gt;usename&lt;/code&gt;, &lt;code&gt;address&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;appname&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Last log position flushed to disk by this standby server diff with current lsn&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_repl_flush_lag&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;pid&lt;/code&gt;, &lt;code&gt;usename&lt;/code&gt;, &lt;code&gt;address&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;appname&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Time elapsed between flushing recent WAL locally and receiving notification that this standby server has written and flushed it&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_repl_flush_lsn&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;pid&lt;/code&gt;, &lt;code&gt;usename&lt;/code&gt;, &lt;code&gt;address&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;appname&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Last write-ahead log location flushed to disk by this standby server&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_repl_launch_time&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;pid&lt;/code&gt;, &lt;code&gt;usename&lt;/code&gt;, &lt;code&gt;address&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;appname&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Time when this process was started, i.e., when the client connected to this WAL sender&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_repl_lsn&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;pid&lt;/code&gt;, &lt;code&gt;usename&lt;/code&gt;, &lt;code&gt;address&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;appname&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Current log position on this server&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_repl_replay_diff&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;pid&lt;/code&gt;, &lt;code&gt;usename&lt;/code&gt;, &lt;code&gt;address&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;appname&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Last log position replayed into the database on this standby server diff with current lsn&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_repl_replay_lag&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;pid&lt;/code&gt;, &lt;code&gt;usename&lt;/code&gt;, &lt;code&gt;address&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;appname&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Time elapsed between flushing recent WAL locally and receiving notification that this standby server has written, flushed and applied it&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_repl_replay_lsn&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;pid&lt;/code&gt;, &lt;code&gt;usename&lt;/code&gt;, &lt;code&gt;address&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;appname&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Last write-ahead log location replayed into the database on this standby server&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_repl_reply_time&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;pid&lt;/code&gt;, &lt;code&gt;usename&lt;/code&gt;, &lt;code&gt;address&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;appname&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Send time of last reply message received from standby server&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_repl_sent_diff&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;pid&lt;/code&gt;, &lt;code&gt;usename&lt;/code&gt;, &lt;code&gt;address&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;appname&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Last log position sent to this standby server diff with current lsn&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_repl_sent_lsn&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;pid&lt;/code&gt;, &lt;code&gt;usename&lt;/code&gt;, &lt;code&gt;address&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;appname&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Last write-ahead log location sent on this connection&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_repl_state&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;pid&lt;/code&gt;, &lt;code&gt;usename&lt;/code&gt;, &lt;code&gt;address&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;appname&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Current WAL sender encoded state 0-4 for streaming startup catchup backup stopping&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_repl_sync_priority&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;pid&lt;/code&gt;, &lt;code&gt;usename&lt;/code&gt;, &lt;code&gt;address&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;appname&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Priority of this standby server for being chosen as the synchronous standby&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_repl_sync_state&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;pid&lt;/code&gt;, &lt;code&gt;usename&lt;/code&gt;, &lt;code&gt;address&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;appname&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Encoded synchronous state of this standby server, 0-3 for async potential sync quorum&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_repl_time&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;pid&lt;/code&gt;, &lt;code&gt;usename&lt;/code&gt;, &lt;code&gt;address&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;appname&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Current timestamp in unix epoch&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_repl_write_diff&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;pid&lt;/code&gt;, &lt;code&gt;usename&lt;/code&gt;, &lt;code&gt;address&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;appname&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Last log position written to disk by this standby server diff with current lsn&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_repl_write_lag&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;pid&lt;/code&gt;, &lt;code&gt;usename&lt;/code&gt;, &lt;code&gt;address&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;appname&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Time elapsed between flushing recent WAL locally and receiving notification that this standby server has written it&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_repl_write_lsn&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;pid&lt;/code&gt;, &lt;code&gt;usename&lt;/code&gt;, &lt;code&gt;address&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;appname&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Last write-ahead log location written to disk by this standby server&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_replay_lsn&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;replica only, location of wal applied&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_seq_blks_hit&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;, &lt;code&gt;seqname&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of buffer hits in this sequence&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_seq_blks_read&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;, &lt;code&gt;seqname&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of disk blocks read from this sequence&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_seq_last_value&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;, &lt;code&gt;seqname&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;The last sequence value written to disk&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_setting_block_size&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;pg page block size, 8192 by default&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_setting_data_checksums&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;whether data checksum is enabled, 1 enabled 0 disabled&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_setting_max_connections&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;number of concurrent connections to the database server&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_setting_max_locks_per_transaction&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;no more than this many distinct objects can be locked at any one time&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_setting_max_prepared_transactions&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;maximum number of transactions that can be in the prepared state simultaneously&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_setting_max_replication_slots&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;maximum number of replication slots&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_setting_max_wal_senders&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;maximum number of concurrent connections from standby servers&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_setting_max_worker_processes&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;maximum number of background processes that the system can support&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_setting_wal_log_hints&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;whether wal_log_hints is enabled, 1 enabled 0 disabled&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_size_bytes&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;File size in bytes&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_slot_active&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;slot_name&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;True(1) if this slot is currently actively being used&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_slot_catalog_xmin&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;slot_name&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;The oldest transaction affecting the system catalogs that this slot needs the database to retain.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_slot_confirm_lsn&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;slot_name&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;The address (LSN) up to which the logical slot&amp;rsquo;s consumer has confirmed receiving data.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_slot_reset_time&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;slot_name&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;When statistics were last reset&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_slot_restart_lsn&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;slot_name&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;The address (LSN) of oldest WAL which still might be required by the consumer of this slot&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_slot_retained_bytes&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;slot_name&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Size of bytes that retained for this slot&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_slot_safe_wal_size&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;slot_name&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;bytes that can be written to WAL which will not make slot into lost&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_slot_spill_bytes&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;slot_name&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Bytes that spilled to disk due to logical decode mem exceeding&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_slot_spill_count&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;slot_name&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Xacts that spilled to disk due to logical decode mem exceeding (a xact can be spilled multiple times)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_slot_spill_txns&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;slot_name&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Xacts that spilled to disk due to logical decode mem exceeding (subtrans included)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_slot_stream_bytes&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;slot_name&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Bytes that streamed to decoding output plugin after mem exceed&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_slot_stream_count&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;slot_name&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Xacts that streamed to decoding output plugin after mem exceed (a xact can be streamed multiple times)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_slot_stream_txns&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;slot_name&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Xacts that streamed to decoding output plugin after mem exceed&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_slot_temporary&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;slot_name&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;True(1) if this is a temporary replication slot.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_slot_total_bytes&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;slot_name&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of decoded bytes sent to the decoding output plugin for this slot&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_slot_total_txns&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;slot_name&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of decoded xacts sent to the decoding output plugin for this slot&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_slot_wal_status&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;slot_name&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;WAL reserve status 0-3 means reserved,extended,unreserved,lost, -1 means other&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_slot_xmin&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;slot_name&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;The oldest transaction that this slot needs the database to retain.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_slru_blks_exists&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of blocks checked for existence for this SLRU&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_slru_blks_hit&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of times disk blocks were found already in the SLRU, so that a read was not necessary&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_slru_blks_read&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of disk blocks read for this SLRU&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_slru_blks_written&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of disk blocks written for this SLRU&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_slru_blks_zeroed&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of blocks zeroed during initializations&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_slru_flushes&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of flushes of dirty data for this SLRU&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_slru_reset_time&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Time at which these statistics were last reset&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_slru_truncates&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of truncates for this SLRU&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_ssl_disabled&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of client connection that does not use ssl&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_ssl_enabled&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of client connection that use ssl&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_sync_standby_enabled&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;names&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Synchronous commit enabled, 1 if enabled, 0 if disabled&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_table_age&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;relname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Age of this table in vacuum cycles&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_table_analyze_count&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;relname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of times this table has been manually analyzed&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_table_autoanalyze_count&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;relname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of times this table has been analyzed by the autovacuum daemon&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_table_autovacuum_count&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;relname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of times this table has been vacuumed by the autovacuum daemon&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_table_frozenxid&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;relname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;All txid before this have been frozen on this table&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_table_heap_blks_hit&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;relname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of buffer hits in this table&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_table_heap_blks_read&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;relname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of disk blocks read from this table&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_table_idx_blks_hit&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;relname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of buffer hits in all indexes on this table&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_table_idx_blks_read&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;relname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of disk blocks read from all indexes on this table&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_table_idx_scan&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;relname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of index scans initiated on this table&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_table_idx_tup_fetch&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;relname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of live rows fetched by index scans&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_table_kind&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;relname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Relation kind r/table/114&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_table_n_dead_tup&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;relname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Estimated number of dead rows&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_table_n_ins_since_vacuum&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;relname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Estimated number of rows inserted since this table was last vacuumed&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_table_n_live_tup&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;relname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Estimated number of live rows&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_table_n_mod_since_analyze&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;relname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Estimated number of rows modified since this table was last analyzed&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_table_n_tup_del&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;relname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of rows deleted&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_table_n_tup_hot_upd&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;relname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of rows HOT updated (i.e with no separate index update required)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_table_n_tup_ins&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;relname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of rows inserted&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_table_n_tup_mod&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;relname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of rows modified (insert + update + delete)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_table_n_tup_newpage_upd&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;relname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of rows updated where the successor version goes onto a new heap page&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_table_n_tup_upd&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;relname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of rows updated (includes HOT updated rows)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_table_ncols&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;relname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of columns in the table&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_table_pages&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;relname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Size of the on-disk representation of this table in pages&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_table_relid&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;relname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Relation oid of this table&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_table_seq_scan&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;relname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of sequential scans initiated on this table&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_table_seq_tup_read&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;relname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of live rows fetched by sequential scans&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_table_size_bytes&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;relname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Total bytes of this table (including toast, index, toast index)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_table_size_indexsize&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;relname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Bytes of all related indexes of this table&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_table_size_relsize&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;relname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Bytes of this table itself (main, vm, fsm)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_table_size_toastsize&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;relname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Bytes of toast tables of this table&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_table_tbl_scan&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;relname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of scans initiated on this table&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_table_tup_read&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;relname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of live rows fetched by scans&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_table_tuples&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;relname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;All txid before this have been frozen on this table&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_table_vacuum_count&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;relname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of times this table has been manually vacuumed (not counting VACUUM FULL)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_timestamp&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;database current timestamp&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_up&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;last scrape was able to connect to the server: 1 for yes, 0 for no&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_uptime&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;seconds since postmaster start&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_version&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;server version number&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_wait_count&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;event&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Count of WaitEvent on target database&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_wal_buffers_full&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of times WAL data was written to disk because WAL buffers became full&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_wal_bytes&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Total amount of WAL generated in bytes&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_wal_fpi&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Total number of WAL full page images generated&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_wal_records&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Total number of WAL records generated&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_wal_reset_time&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;When statistics were last reset&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_wal_sync&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of times WAL files were synced to disk via issue_xlog_fsync request&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_wal_sync_time&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Total amount of time spent syncing WAL files to disk via issue_xlog_fsync request, in seconds&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_wal_write&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of times WAL buffers were written out to disk via XLogWrite request.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_wal_write_time&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Total amount of time spent writing WAL buffers to disk via XLogWrite request in seconds&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_write_lsn&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;primary only, location of current wal writing&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_xact_xmax&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;First as-yet-unassigned txid. txid &amp;gt;= this are invisible.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_xact_xmin&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Earliest txid that is still active&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_xact_xnum&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Current active transaction count&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pgbouncer:cls:load1&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pgbouncer:cls:load15&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pgbouncer:cls:load5&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pgbouncer:db:conn_usage&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;host&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;, &lt;code&gt;real_datname&lt;/code&gt;, &lt;code&gt;port&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pgbouncer:db:conn_usage_reserve&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;host&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;, &lt;code&gt;real_datname&lt;/code&gt;, &lt;code&gt;port&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pgbouncer:db:pool_current_conn&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;host&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;, &lt;code&gt;real_datname&lt;/code&gt;, &lt;code&gt;port&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pgbouncer:db:pool_disabled&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;host&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;, &lt;code&gt;real_datname&lt;/code&gt;, &lt;code&gt;port&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pgbouncer:db:pool_max_conn&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;host&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;, &lt;code&gt;real_datname&lt;/code&gt;, &lt;code&gt;port&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pgbouncer:db:pool_paused&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;host&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;, &lt;code&gt;real_datname&lt;/code&gt;, &lt;code&gt;port&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pgbouncer:db:pool_reserve_size&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;host&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;, &lt;code&gt;real_datname&lt;/code&gt;, &lt;code&gt;port&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pgbouncer:db:pool_size&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;host&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;, &lt;code&gt;real_datname&lt;/code&gt;, &lt;code&gt;port&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pgbouncer:ins:free_clients&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pgbouncer:ins:free_servers&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pgbouncer:ins:load1&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pgbouncer:ins:load15&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pgbouncer:ins:load5&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pgbouncer:ins:login_clients&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pgbouncer:ins:pool_databases&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pgbouncer:ins:pool_users&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pgbouncer:ins:pools&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pgbouncer:ins:used_clients&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pgbouncer_database_current_connections&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;host&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;, &lt;code&gt;real_datname&lt;/code&gt;, &lt;code&gt;port&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Current number of connections for this database&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pgbouncer_database_disabled&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;host&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;, &lt;code&gt;real_datname&lt;/code&gt;, &lt;code&gt;port&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;True(1) if this database is currently disabled, else 0&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pgbouncer_database_max_connections&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;host&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;, &lt;code&gt;real_datname&lt;/code&gt;, &lt;code&gt;port&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Maximum number of allowed connections for this database&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pgbouncer_database_min_pool_size&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;host&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;, &lt;code&gt;real_datname&lt;/code&gt;, &lt;code&gt;port&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Minimum number of server connections&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pgbouncer_database_paused&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;host&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;, &lt;code&gt;real_datname&lt;/code&gt;, &lt;code&gt;port&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;True(1) if this database is currently paused, else 0&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pgbouncer_database_pool_size&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;host&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;, &lt;code&gt;real_datname&lt;/code&gt;, &lt;code&gt;port&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Maximum number of server connections&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pgbouncer_database_reserve_pool&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;host&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;, &lt;code&gt;real_datname&lt;/code&gt;, &lt;code&gt;port&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Maximum number of additional connections for this database&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pgbouncer_exporter_agent_up&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pgbouncer_exporter_last_scrape_time&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;seconds exporter spending on scrapping&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pgbouncer_exporter_query_cache_ttl&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;query&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;times to live of query cache&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pgbouncer_exporter_query_scrape_duration&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;query&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;seconds query spending on scrapping&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pgbouncer_exporter_query_scrape_error_count&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;query&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;times the query failed&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pgbouncer_exporter_query_scrape_hit_count&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;query&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;numbers been scrapped from this query&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pgbouncer_exporter_query_scrape_metric_count&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;query&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;numbers of metrics been scrapped from this query&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pgbouncer_exporter_query_scrape_total_count&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;query&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;times exporter server was scraped for metrics&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pgbouncer_exporter_scrape_duration&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;seconds exporter spending on scrapping&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pgbouncer_exporter_scrape_error_count&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;times exporter was scraped for metrics and failed&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pgbouncer_exporter_scrape_total_count&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;times exporter was scraped for metrics&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pgbouncer_exporter_server_scrape_duration&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;seconds exporter server spending on scrapping&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pgbouncer_exporter_server_scrape_total_count&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;times exporter server was scraped for metrics&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pgbouncer_exporter_server_scrape_total_seconds&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;seconds exporter server spending on scrapping&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pgbouncer_exporter_up&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;always be 1 if your could retrieve metrics&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pgbouncer_exporter_uptime&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;seconds since exporter primary server inited&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pgbouncer_in_recovery&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;server is in recovery mode? 1 for yes 0 for no&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pgbouncer_list_items&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;list&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of corresponding pgbouncer object&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pgbouncer_pool_active_cancel_clients&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;user&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;, &lt;code&gt;pool_mode&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Client connections that have forwarded query cancellations to the server and are waiting for the server response.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pgbouncer_pool_active_cancel_servers&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;user&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;, &lt;code&gt;pool_mode&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Server connections that are currently forwarding a cancel request&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pgbouncer_pool_active_clients&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;user&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;, &lt;code&gt;pool_mode&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Client connections that are linked to server connection and can process queries&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pgbouncer_pool_active_servers&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;user&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;, &lt;code&gt;pool_mode&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Server connections that are linked to a client&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pgbouncer_pool_cancel_clients&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;user&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;, &lt;code&gt;pool_mode&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Client connections that have not forwarded query cancellations to the server yet.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pgbouncer_pool_cancel_servers&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;user&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;, &lt;code&gt;pool_mode&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;cancel requests have completed that were sent to cancel a query on this server&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pgbouncer_pool_idle_servers&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;user&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;, &lt;code&gt;pool_mode&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Server connections that are unused and immediately usable for client queries&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pgbouncer_pool_login_servers&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;user&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;, &lt;code&gt;pool_mode&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Server connections currently in the process of logging in&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pgbouncer_pool_maxwait&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;user&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;, &lt;code&gt;pool_mode&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;How long the first(oldest) client in the queue has waited, in seconds, key metric&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pgbouncer_pool_maxwait_us&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;user&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;, &lt;code&gt;pool_mode&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Microsecond part of the maximum waiting time.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pgbouncer_pool_tested_servers&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;user&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;, &lt;code&gt;pool_mode&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Server connections that are currently running reset or check query&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pgbouncer_pool_used_servers&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;user&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;, &lt;code&gt;pool_mode&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Server connections that have been idle for more than server_check_delay (means have to run check query)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pgbouncer_pool_waiting_clients&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;user&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;, &lt;code&gt;pool_mode&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Client connections that have sent queries but have not yet got a server connection&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pgbouncer_stat_avg_query_count&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Average queries per second in last stat period&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pgbouncer_stat_avg_query_time&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Average query duration, in seconds&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pgbouncer_stat_avg_recv&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Average received (from clients) bytes per second&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pgbouncer_stat_avg_sent&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Average sent (to clients) bytes per second&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pgbouncer_stat_avg_wait_time&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Time spent by clients waiting for a server, in seconds (average per second).&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pgbouncer_stat_avg_xact_count&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Average transactions per second in last stat period&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pgbouncer_stat_avg_xact_time&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Average transaction duration, in seconds&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pgbouncer_stat_total_query_count&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Total number of SQL queries pooled by pgbouncer&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pgbouncer_stat_total_query_time&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Total number of seconds spent when executing queries&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pgbouncer_stat_total_received&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Total volume in bytes of network traffic received by pgbouncer&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pgbouncer_stat_total_sent&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Total volume in bytes of network traffic sent by pgbouncer&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pgbouncer_stat_total_wait_time&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Time spent by clients waiting for a server, in seconds&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pgbouncer_stat_total_xact_count&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Total number of SQL transactions pooled by pgbouncer&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pgbouncer_stat_total_xact_time&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;datname&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Total number of seconds spent when in a transaction&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pgbouncer_up&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;last scrape was able to connect to the server: 1 for yes, 0 for no&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pgbouncer_version&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;server version number&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;process_cpu_seconds_total&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Total user and system CPU time spent in seconds.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;process_max_fds&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Maximum number of open file descriptors.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;process_open_fds&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of open file descriptors.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;process_resident_memory_bytes&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Resident memory size in bytes.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;process_start_time_seconds&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Start time of the process since unix epoch in seconds.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;process_virtual_memory_bytes&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Virtual memory size in bytes.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;process_virtual_memory_max_bytes&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Maximum amount of virtual memory available in bytes.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;promhttp_metric_handler_requests_in_flight&lt;/td&gt;
 &lt;td&gt;gauge&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Current number of scrapes being served.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;promhttp_metric_handler_requests_total&lt;/td&gt;
 &lt;td&gt;counter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;code&lt;/code&gt;, &lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Total number of scrapes by HTTP status code.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;scrape_duration_seconds&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;scrape_samples_post_metric_relabeling&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;scrape_samples_scraped&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;scrape_series_added&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;up&lt;/td&gt;
 &lt;td&gt;Unknown&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;job&lt;/code&gt;, &lt;code&gt;ins&lt;/code&gt;, &lt;code&gt;ip&lt;/code&gt;, &lt;code&gt;instance&lt;/code&gt;, &lt;code&gt;cls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>3坏2应急处理</title><link>https://pigsty.cc/docs/pgsql/tutorial/drill/</link><pubDate>Sat, 11 Jan 2025 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/pgsql/tutorial/drill/</guid><description>&lt;p&gt;如果经典3节点高可用部署同时出现两台（多数主体）故障，系统通常无法自动完成故障切换，需要人工介入：&lt;/p&gt;
&lt;p&gt;首先判断另外两台服务器的情况，如果短时间内可以拉起，优先选择拉起另外两台服务。否则进入 &lt;strong&gt;紧急止血流程&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;紧急止血流程假设您的管理节点故障&lt;/strong&gt;，只有单台普通数据库节点存活，在这种情况下，最快的恢复操作流程为：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;调整 HAProxy 配置，将流量指向主库。&lt;/li&gt;
&lt;li&gt;关闭 Patroni，手动提升 PostgreSQL 从库为主库。&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="调整haproxy配置"&gt;调整HAProxy配置&lt;/h2&gt;
&lt;p&gt;如果你通过其他方式绕开 HAProxy 访问集群，那么可以跳过这一步。
如果你通过 HAProxy 方式访问数据库集群，那么你需要调整负载均衡配置，将读写流量手工指向主库。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;编辑 &lt;code&gt;/etc/haproxy/&amp;lt;pg_cluster&amp;gt;-primary.cfg&lt;/code&gt; 配置文件，其中 &lt;code&gt;&amp;lt;pg_cluster&amp;gt;&lt;/code&gt; 为你的 PostgreSQL 集群名称，例如 &lt;code&gt;pg-meta&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;将健康检查配置选项注释，停止进行健康检查。&lt;/li&gt;
&lt;li&gt;将服务器列表中，其他两台故障的机器注释掉，只保留当前主库服务器。&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-ini" data-lang="ini"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;listen pg-meta-primary&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;bind *:5433&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;mode tcp&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;maxconn 5000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;balance roundrobin&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# 注释掉以下四行健康检查配置&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;#option httpchk # &amp;lt;---- remove this&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;#option http-keep-alive # &amp;lt;---- remove this&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;#http-check send meth OPTIONS uri /primary # &amp;lt;---- remove this&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;#http-check expect status 200 # &amp;lt;---- remove this&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;default-server inter 3s fastinter 1s downinter 5s rise 3 fall 3 on-marked-down shutdown-sessions slowstart 30s maxconn 3000 maxqueue 128 weight 100&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;server pg-meta-1 10.10.10.10:6432 check port 8008 weight 100&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# 注释掉其他两台故障的机器&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;#server pg-meta-2 10.10.10.11:6432 check port 8008 weight 100 &amp;lt;---- comment this&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;#server pg-meta-3 10.10.10.12:6432 check port 8008 weight 100 &amp;lt;---- comment this&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;配置调整完成后，先不着急执行 &lt;code&gt;systemctl reload haproxy&lt;/code&gt; 重载生效，等待后续主库提升后一起执行。
以上配置的效果是，HAProxy 将不再进行主库健康检查（默认使用 Patroni），而是直接将写入流量指向当前主库&lt;/p&gt;</description></item><item><title>使用 VIP-Manager 为 PostgreSQL 集群配置二层 VIP</title><link>https://pigsty.cc/docs/pgsql/tutorial/pg-vip/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/pgsql/tutorial/pg-vip/</guid><description>&lt;p&gt;您可以在 PostgreSQL 集群上绑定一个可选的 L2 VIP —— 前提条件是：集群中的所有节点都在一个二层网络中。&lt;/p&gt;
&lt;p&gt;这个 L2 VIP 强制使用 Master - Backup 模式，Master 始终指向在数据库集群主库实例所在的节点。&lt;/p&gt;
&lt;p&gt;这个 VIP 由 &lt;a href="https://github.com/cybertec-postgresql/vip-manager"&gt;VIP-Manager&lt;/a&gt; 组件管理，它会从 DCS （etcd） 中直接读取由 Patroni 写入的 Leader Key，从而判断自己是否是 Master。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="启用vip"&gt;启用VIP&lt;/h2&gt;
&lt;p&gt;在 PostgreSQL 集群上定义 &lt;a href="https://pigsty.cc/docs/pgsql/param#pg_vip_enabled"&gt;&lt;code&gt;pg_vip_enabled&lt;/code&gt;&lt;/a&gt; 参数为 &lt;code&gt;true&lt;/code&gt;，即可在集群上启用 VIP 组件。当然您也可以在全局配置中启用此配置项。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# pgsql 3 node ha cluster: pg-test&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pg-test:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; hosts:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 10.10.10.11: &lt;span class="o"&gt;{&lt;/span&gt; pg_seq: 1, pg_role: primary &lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="c1"&gt;# primary instance, leader of cluster&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 10.10.10.12: &lt;span class="o"&gt;{&lt;/span&gt; pg_seq: 2, pg_role: replica &lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="c1"&gt;# replica instance, follower of leader&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 10.10.10.13: &lt;span class="o"&gt;{&lt;/span&gt; pg_seq: 3, pg_role: replica, pg_offline_query: &lt;span class="nb"&gt;true&lt;/span&gt; &lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="c1"&gt;# replica with offline access&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; vars:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; pg_cluster: pg-test &lt;span class="c1"&gt;# define pgsql cluster name&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; pg_users: &lt;span class="o"&gt;[{&lt;/span&gt; name: &lt;span class="nb"&gt;test&lt;/span&gt; , password: &lt;span class="nb"&gt;test&lt;/span&gt; , pgbouncer: &lt;span class="nb"&gt;true&lt;/span&gt; , roles: &lt;span class="o"&gt;[&lt;/span&gt; dbrole_admin &lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;}]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; pg_databases: &lt;span class="o"&gt;[{&lt;/span&gt; name: &lt;span class="nb"&gt;test&lt;/span&gt; &lt;span class="o"&gt;}]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# 启用 L2 VIP&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; pg_vip_enabled: &lt;span class="nb"&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; pg_vip_address: 10.10.10.3/24
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; pg_vip_interface: eth1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;请注意，&lt;a href="https://pigsty.cc/docs/pgsql/param#pg_vip_address"&gt;&lt;code&gt;pg_vip_address&lt;/code&gt;&lt;/a&gt; 必须是一个合法的 IP 地址，带有网段，且在当前二层网络中可用。&lt;/p&gt;</description></item><item><title>Citus 集群部署</title><link>https://pigsty.cc/docs/pgsql/tutorial/citus/</link><pubDate>Sat, 11 Jan 2025 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/pgsql/tutorial/citus/</guid><description>&lt;p&gt;Citus 是一个 PostgreSQL 扩展，可以将 PostgreSQL 原地转换为一个分布式数据库，并实现在多个节点上水平扩展，以处理大量数据和大量查询。&lt;/p&gt;
&lt;p&gt;Patroni 在 v3.0 后，提供了对 Citus 原生高可用的支持，简化了 Citus 集群的搭建，Pigsty 也对此提供了原生支持。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.citusdata.com/en/stable/get_started/what_is_citus.html"&gt;Citus 是什么&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://patroni.readthedocs.io/en/latest/citus.html"&gt;Patroni Citus 支持&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;注意：Citus 13.x 支持 PostgreSQL 18、17、16、15、14 五个大版本。Pigsty 扩展仓库提供了 Citus ARM64 软件包。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="citus集群"&gt;Citus集群&lt;/h2&gt;
&lt;p&gt;Pigsty 原生支持 Citus。可以参考 &lt;a href="https://github.com/pgsty/pigsty/blob/main/conf/citus.yml"&gt;&lt;code&gt;conf/citus.yml&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;这里使用 Pigsty 四节点沙箱，定义了一个 Citus 集群 &lt;code&gt;pg-citus&lt;/code&gt;，其中包括一个两节点的协调者集群 &lt;code&gt;pg-citus0&lt;/code&gt;，
以及两个 Worker 集群 &lt;code&gt;pg-citus1&lt;/code&gt;，&lt;code&gt;pg-citus2&lt;/code&gt;。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;pg-citus&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;hosts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;10.10.10.10&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;{&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_group: 0, pg_cluster: pg-citus0 ,pg_vip_address: 10.10.10.2/24 ,pg_seq: 1, pg_role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;primary }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;10.10.10.11&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;{&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_group: 0, pg_cluster: pg-citus0 ,pg_vip_address: 10.10.10.2/24 ,pg_seq: 2, pg_role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;replica }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;10.10.10.12&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;{&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_group: 1, pg_cluster: pg-citus1 ,pg_vip_address: 10.10.10.3/24 ,pg_seq: 1, pg_role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;primary }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;10.10.10.13&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;{&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_group: 2, pg_cluster: pg-citus2 ,pg_vip_address: 10.10.10.4/24 ,pg_seq: 1, pg_role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;primary }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;vars&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_mode: citus # pgsql cluster mode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;citus&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_version&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;18&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# citus 13.x supports PG 14-18&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_shard: pg-citus # citus shard name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;pg-citus&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_primary_db&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;citus &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# primary database used by citus&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_vip_enabled&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# enable vip for citus cluster&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_vip_interface&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;eth1 &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# vip interface for all members&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_dbsu_password&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;DBUser.Postgres &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# all dbsu password access for citus cluster&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_extensions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;citus, postgis, pgvector, topn, pg_cron, hll ] &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# install these extensions&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_libs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;citus, pg_cron, pg_stat_statements&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# citus will be added by patroni automatically&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_users&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;{&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name: dbuser_citus ,password: DBUser.Citus ,pgbouncer: true ,roles&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;dbrole_admin ] }]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_databases&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;{&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name: citus ,owner: dbuser_citus ,extensions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;citus, vector, topn, pg_cron, hll ] }]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_parameters&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;cron.database_name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;citus&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;citus.node_conninfo&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;sslmode=require sslrootcert=/pg/cert/ca.crt sslmode=verify-full&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_hba_rules&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- {&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;user: &amp;#39;all&amp;#39; ,db: all ,addr: 127.0.0.1/32 ,auth: ssl ,title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;all user ssl access from localhost&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;}&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- {&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;user: &amp;#39;all&amp;#39; ,db: all ,addr: intra ,auth: ssl ,title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;all user ssl access from intranet&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;}&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;相比标准 PostgreSQL 集群，Citus 集群的配置有一些特殊之处，首先，你需要确保 Citus 扩展被下载，安装，加载并启用，这涉及到以下四个参数&lt;/p&gt;</description></item><item><title>预置剧本</title><link>https://pigsty.cc/docs/pgsql/playbook/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/pgsql/playbook/</guid><description>&lt;blockquote&gt;
&lt;p&gt;Pigsty 提供了一系列剧本，用于集群上下线扩缩容，用户/数据库管理，监控、备份恢复或迁移已有实例。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;剧本&lt;/th&gt;
 &lt;th&gt;功能&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;a href="#pgsqlyml"&gt;&lt;code&gt;pgsql.yml&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;初始化 PostgreSQL 集群或添加新的从库&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;a href="#pgsql-rmyml"&gt;&lt;code&gt;pgsql-rm.yml&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;移除 PostgreSQL 集群，或移除某个实例&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;a href="#pgsql-useryml"&gt;&lt;code&gt;pgsql-user.yml&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;在现有的 PostgreSQL 集群中添加新的业务用户&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;a href="#pgsql-dbyml"&gt;&lt;code&gt;pgsql-db.yml&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;在现有的 PostgreSQL 集群中添加新的业务数据库&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;a href="#pgsql-monitoryml"&gt;&lt;code&gt;pgsql-monitor.yml&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;将远程 PostgreSQL 实例纳入监控中&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;a href="#pgsql-migrationyml"&gt;&lt;code&gt;pgsql-migration.yml&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;为现有的 PostgreSQL 集群生成迁移手册和脚本&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;a href="#pgsql-pitryml"&gt;&lt;code&gt;pgsql-pitr.yml&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;执行 PostgreSQL 时间点恢复 (PITR)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="保护机制"&gt;保护机制&lt;/h2&gt;
&lt;p&gt;使用 &lt;a href="https://pigsty.cc/docs/pgsql"&gt;&lt;code&gt;PGSQL&lt;/code&gt;&lt;/a&gt; 剧本时需要&lt;strong&gt;特别注意&lt;/strong&gt;，剧本 &lt;a href="#pgsqlyml"&gt;&lt;code&gt;pgsql.yml&lt;/code&gt;&lt;/a&gt; 与 &lt;a href="#pgsql-rmyml"&gt;&lt;code&gt;pgsql-rm.yml&lt;/code&gt;&lt;/a&gt; 使用不当会有误删数据库的风险！&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在执行时添加 &lt;code&gt;-l&lt;/code&gt; 参数，限制命令执行的对象范围，并确保自己在正确的目标上执行正确的任务。&lt;/li&gt;
&lt;li&gt;限制范围通常以一个数据库集群为宜，使用不带参数的 &lt;code&gt;pgsql.yml&lt;/code&gt; 在生产环境中是一个高危操作，务必三思而后行。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;出于防止误删的目的，Pigsty 的 PGSQL 模块提供了防误删保险，由 &lt;a href="https://pigsty.cc/docs/pgsql/param#pg_safeguard"&gt;&lt;code&gt;pg_safeguard&lt;/code&gt;&lt;/a&gt; 参数控制。
当 &lt;code&gt;pg_safeguard&lt;/code&gt; 设置为 &lt;code&gt;true&lt;/code&gt; 时，&lt;a href="#pgsql-rmyml"&gt;&lt;code&gt;pgsql-rm.yml&lt;/code&gt;&lt;/a&gt; 剧本会立即中止执行，防止误删数据库集群。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 将会中止执行，保护数据安全&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./pgsql-rm.yml -l pg-test
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 通过命令行参数强制覆盖保护开关&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./pgsql-rm.yml -l pg-test -e &lt;span class="nv"&gt;pg_safeguard&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;除了 &lt;code&gt;pg_safeguard&lt;/code&gt; 外，&lt;a href="#pgsql-rmyml"&gt;&lt;code&gt;pgsql-rm.yml&lt;/code&gt;&lt;/a&gt; 还提供了更细粒度的控制参数：&lt;/p&gt;</description></item><item><title>扩展插件</title><link>https://pigsty.cc/docs/pgsql/ext/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/pgsql/ext/</guid><description>&lt;p&gt;Pigsty 提供 &lt;a href="https://pigsty.cc/ext/list/"&gt;&lt;strong&gt;510&lt;/strong&gt; 扩展&lt;/a&gt;，覆盖时序、地理、向量、全文检索、分析、特性增强等 16 大类别，开箱即用。&lt;/p&gt;
&lt;p&gt;在 Pigsty 中使用扩展涉及四个核心步骤：&lt;a href="https://pigsty.cc/docs/pgsql/ext/download"&gt;&lt;strong&gt;下载&lt;/strong&gt;&lt;/a&gt;、&lt;a href="https://pigsty.cc/docs/pgsql/ext/install"&gt;&lt;strong&gt;安装&lt;/strong&gt;&lt;/a&gt;、&lt;a href="https://pigsty.cc/docs/pgsql/ext/config"&gt;&lt;strong&gt;配置/加载&lt;/strong&gt;&lt;/a&gt; 与 &lt;a href="https://pigsty.cc/docs/pgsql/ext/create"&gt;&lt;strong&gt;启用&lt;/strong&gt;&lt;/a&gt;。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;pg-meta&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;hosts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;{&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;10.10.10.10&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;{&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_seq: 1, pg_role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;primary } }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;vars&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_cluster&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;pg-meta&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_databases&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;meta&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;extensions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;postgis, timescaledb, vector ] &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 启用：在数据库中创建扩展&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_libs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;timescaledb, pg_stat_statements, auto_explain&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 配置：预加载扩展库&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_extensions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;postgis, timescaledb, pgvector ] &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 安装：安装扩展软件包&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img src="https://pigsty.cc/img/pigsty/ecosystem.png" alt=""&gt;&lt;/p&gt;</description></item><item><title>PostgreSQL</title><link>https://pigsty.cc/docs/pgsql/kernel/postgres/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/pgsql/kernel/postgres/</guid><description>&lt;p&gt;&lt;a href="https://www.postgresql.org/"&gt;PostgreSQL&lt;/a&gt; 是世界上最先进和最受欢迎的开源数据库。&lt;/p&gt;
&lt;p&gt;默认安装 PostgreSQL 18，支持 PostgreSQL 14 ~ 18，并提供 510 个 PG 扩展。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="快速开始"&gt;快速开始&lt;/h2&gt;
&lt;p&gt;使用 &lt;a href="https://github.com/pgsty/pigsty/blob/main/conf/pgsql.yml"&gt;&lt;code&gt;pgsql&lt;/code&gt;&lt;/a&gt; 配置模板 &lt;a href="https://pigsty.cc/docs/setup/install"&gt;&lt;strong&gt;安装&lt;/strong&gt;&lt;/a&gt; Pigsty。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./configure -c pgsql &lt;span class="c1"&gt;# 使用 postgres 内核&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./deploy.yml &lt;span class="c1"&gt;# 使用 pigsty 设置一切&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;大多数 &lt;a href="https://pigsty.cc/docs/conf/"&gt;配置模板&lt;/a&gt; 默认使用 PostgreSQL 内核，例如：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/pgsty/pigsty/blob/main/conf/meta.yml"&gt;&lt;code&gt;meta&lt;/code&gt;&lt;/a&gt; : &lt;strong&gt;默认&lt;/strong&gt;，带有核心扩展（vector、postgis、timescale）的 postgres&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/pgsty/pigsty/blob/main/conf/rich.yml"&gt;&lt;code&gt;rich&lt;/code&gt;&lt;/a&gt;：安装了所有扩展的 postgres&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/pgsty/pigsty/blob/main/conf/slim.yml"&gt;&lt;code&gt;slim&lt;/code&gt;&lt;/a&gt;：仅 postgres，无监控基础设施&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/pgsty/pigsty/blob/main/conf/full.yml"&gt;&lt;code&gt;full&lt;/code&gt;&lt;/a&gt;：用于 HA 演示的 4 节点沙盒&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/pgsty/pigsty/blob/main/conf/pgsql.yml"&gt;&lt;code&gt;pgsql&lt;/code&gt;&lt;/a&gt;：最小的 postgres 内核配置示例&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="配置"&gt;配置&lt;/h2&gt;
&lt;p&gt;原版 PostgreSQL 内核不需要特殊调整：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;pg-meta&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;hosts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;10.10.10.10&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;{&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_seq: 1, pg_role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;primary }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;vars&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_cluster&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;pg-meta&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_users&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- {&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name: dbuser_meta ,password: DBUser.Meta ,pgbouncer: true ,roles: [dbrole_admin ] ,comment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;pigsty admin user }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- {&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name: dbuser_view ,password: DBUser.Viewer ,pgbouncer: true ,roles: [dbrole_readonly] ,comment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;read-only viewer }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_databases&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- {&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name: meta, baseline: cmdb.sql ,comment: pigsty meta database ,schemas: [pigsty] ,extensions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;vector ]}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_hba_rules&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- {&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;user: dbuser_view , db: all ,addr: infra ,auth: pwd ,title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;allow grafana dashboard access cmdb from infra nodes&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;}&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;node_crontab&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;00 01 * * * postgres /pg/bin/pg-backup full&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 每天凌晨 1 点进行全量备份&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_packages&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;pgsql-main, pgsql-common ] &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# pg 内核和通用工具&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;#pg_extensions: [ pg18-time ,pg18-gis ,pg18-rag ,pg18-fts ,pg18-olap ,pg18-feat ,pg18-lang ,pg18-type ,pg18-util ,pg18-func ,pg18-admin ,pg18-stat ,pg18-sec ,pg18-fdw ,pg18-sim ,pg18-etl]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="版本选择"&gt;版本选择&lt;/h2&gt;
&lt;p&gt;要使用不同的 PostgreSQL 主版本，您可以使用 &lt;code&gt;-v&lt;/code&gt; 参数进行配置：&lt;/p&gt;</description></item><item><title>Citus</title><link>https://pigsty.cc/docs/pgsql/kernel/citus/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/pgsql/kernel/citus/</guid><description>&lt;p&gt;Pigsty 原生支持 Citus。这是一个基于原生 PostgreSQL 内核的分布式水平扩展插件。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://pigsty.cc/img/pigsty/citus.jpg" alt=""&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="安装"&gt;安装&lt;/h2&gt;
&lt;p&gt;Citus 是一个 PostgreSQL &lt;a href="https://pigsty.cc/docs/pgsql/ext/"&gt;扩展插件&lt;/a&gt;，可以按照标准插件安装的流程，在原生 PostgreSQL 集群上加装启用。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./pgsql.yml -t pg_extension -e &lt;span class="s1"&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;hr&gt;
&lt;h2 id="配置"&gt;配置&lt;/h2&gt;
&lt;p&gt;要定义一个 citus 集群，您需要指定以下参数：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://pigsty.cc/docs/pgsql/param#pg_mode"&gt;&lt;code&gt;pg_mode&lt;/code&gt;&lt;/a&gt; 必须设置为 &lt;code&gt;citus&lt;/code&gt;，而不是默认的 &lt;code&gt;pgsql&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;在每个分片集群上都必须定义分片名 &lt;a href="https://pigsty.cc/docs/pgsql/param#pg_shard"&gt;&lt;code&gt;pg_shard&lt;/code&gt;&lt;/a&gt; 和分片号 &lt;a href="https://pigsty.cc/docs/pgsql/param#pg_group"&gt;&lt;code&gt;pg_group&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;必须定义 &lt;a href="https://pigsty.cc/docs/pgsql/param#pg_primary_db"&gt;&lt;code&gt;pg_primary_db&lt;/code&gt;&lt;/a&gt; 来指定由 Patroni 管理的 Citus 数据库。&lt;/li&gt;
&lt;li&gt;如果您想使用 &lt;a href="https://pigsty.cc/docs/pgsql/param#pg_dbsu"&gt;&lt;code&gt;pg_dbsu&lt;/code&gt;&lt;/a&gt; 的 &lt;code&gt;postgres&lt;/code&gt; 而不是默认的 &lt;a href="https://pigsty.cc/docs/pgsql/param#pg_admin_username"&gt;&lt;code&gt;pg_admin_username&lt;/code&gt;&lt;/a&gt; 来执行管理命令，那么 &lt;a href="https://pigsty.cc/docs/pgsql/param#pg_dbsu_password"&gt;&lt;code&gt;pg_dbsu_password&lt;/code&gt;&lt;/a&gt; 必须设置为非空的纯文本密码&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;此外，还需要额外的 hba 规则，允许从本地和其他数据节点进行 SSL 访问。&lt;/p&gt;
&lt;p&gt;您可以将每个 Citus 集群分别定义为独立的分组，像标准的 PostgreSQL 集群一样；当前完整模板见 &lt;a href="https://github.com/pgsty/pigsty/blob/main/conf/ha/citus.yml"&gt;&lt;code&gt;conf/ha/citus.yml&lt;/code&gt;&lt;/a&gt;：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;all&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;children&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg-citus0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# citus 0号分片&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;hosts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;{&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;10.10.10.10&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;{&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_seq: 1, pg_role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;primary } }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;vars&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;{&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_cluster: pg-citus0 , pg_group&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;}&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg-citus1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# citus 1号分片&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;hosts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;{&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;10.10.10.11&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;{&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_seq: 1, pg_role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;primary } }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;vars&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;{&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_cluster: pg-citus1 , pg_group&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;}&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg-citus2&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# citus 2号分片&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;hosts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;{&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;10.10.10.12&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;{&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_seq: 1, pg_role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;primary } }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;vars&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;{&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_cluster: pg-citus2 , pg_group&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;}&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg-citus3&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# citus 3号分片&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;hosts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;10.10.10.13&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;{&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_seq: 1, pg_role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;primary }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;10.10.10.14&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;{&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_seq: 2, pg_role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;replica }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;vars&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;{&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_cluster: pg-citus3 , pg_group&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;}&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;vars&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 所有 Citus 集群的全局参数&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_mode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;citus &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# pgsql 集群模式需要设置为： citus&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_shard&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;pg-citus &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# citus 水平分片名称： pg-citus&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_primary_db&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;meta &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# citus 数据库名称：meta&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_dbsu_password&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;DBUser.Postgres&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 如果使用 dbsu ，那么需要为其配置一个密码&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_users&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;{&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name: dbuser_meta ,password: DBUser.Meta ,pgbouncer: true ,roles&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;dbrole_admin ] } ]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_databases&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;{&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name: meta ,extensions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;{&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;citus }, { name: postgis }, { name: timescaledb } ] } ]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_hba_rules&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- {&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;user: &amp;#39;all&amp;#39; ,db: all ,addr: 127.0.0.1/32 ,auth: ssl ,title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;all user ssl access from localhost&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;}&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- {&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;user: &amp;#39;all&amp;#39; ,db: all ,addr: intra ,auth: ssl ,title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;all user ssl access from intranet&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;}&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;您也可以在一个分组内指定所有 Citus 集群成员的身份参数，如 &lt;a href="https://github.com/pgsty/pigsty/blob/main/conf/ha/citus.yml"&gt;&lt;code&gt;conf/ha/citus.yml&lt;/code&gt;&lt;/a&gt; 所示：&lt;/p&gt;</description></item><item><title>Babelfish</title><link>https://pigsty.cc/docs/pgsql/kernel/babelfish/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/pgsql/kernel/babelfish/</guid><description>&lt;p&gt;&lt;a href="https://babelfishpg.org/"&gt;Babelfish&lt;/a&gt; 是一个提供 MS SQL Server 线缆协议兼容性的内核分支 + 扩展，由 AWS 开源。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="概览"&gt;概览&lt;/h2&gt;
&lt;p&gt;Pigsty 允许您使用 &lt;code&gt;mssql&lt;/code&gt; 模式部署 Babelfish 内核，在 PostgreSQL 上提供：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;SQL Server 线缆协议兼容（TDS 协议，&lt;code&gt;1433&lt;/code&gt; 端口）&lt;/li&gt;
&lt;li&gt;T-SQL 语法兼容&lt;/li&gt;
&lt;li&gt;与 Pigsty 现有能力（高可用、备份、监控、IaC）统一集成&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;在 Pigsty v4.x 中，Babelfish 默认基于 &lt;strong&gt;PostgreSQL 17&lt;/strong&gt;，并已经纳入 Pigsty 标准交付链路。支持所有 Linux 平台&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="快速开始"&gt;快速开始&lt;/h2&gt;
&lt;p&gt;使用 Pigsty 内置模板：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./configure -c mssql
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./deploy.yml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;部署完成后可直接使用 SQL Server 客户端连接：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sqlcmd -S &amp;lt;ip&amp;gt;,1433 -U dbuser_mssql -P DBUser.MSSQL -d mssql
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="关键配置"&gt;关键配置&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;mssql&lt;/code&gt; 模板中的核心参数如下：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;pg_mode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;mssql&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;pg_version&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;17&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;pg_packages&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;babelfish, pgsql-common, sqlcmd ]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;pg_libs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;babelfishpg_tds, pg_stat_statements, auto_explain&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;pg_databases&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;mssql&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;baseline&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;mssql.sql&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;extensions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- {&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;uuid-ossp }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- {&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;babelfishpg_common }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- {&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;babelfishpg_tsql }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- {&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;babelfishpg_tds }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- {&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;babelfishpg_money }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- {&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;pg_hint_plan }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- {&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;system_stats }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- {&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;tds_fdw }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;parameters&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;{&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;&amp;#39;babelfishpg_tsql.migration_mode&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;multi-db&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;}&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;pg_hba_rules&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- {&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;user: dbuser_mssql, db: mssql, addr: intra, auth: md5, order&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;525&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;}&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;pg_default_services&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- {&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name: primary, port: 5433, dest&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1433&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;}&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- {&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name: replica, port: 5434, dest&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1433&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;}&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="连接与端口"&gt;连接与端口&lt;/h2&gt;
&lt;p&gt;Babelfish 集群会同时提供两类访问：&lt;/p&gt;</description></item><item><title>IvorySQL</title><link>https://pigsty.cc/docs/pgsql/kernel/ivorysql/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/pgsql/kernel/ivorysql/</guid><description>&lt;p&gt;&lt;a href="https://www.ivorysql.org/"&gt;IvorySQL&lt;/a&gt; 是一个开源的，旨在基于 PG 提供 “Oracle 兼容性” 的 PostgreSQL 内核分支。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="概览"&gt;概览&lt;/h2&gt;
&lt;p&gt;IvorySQL 内核支持在 Pigsty 开源版本中提供，您的服务器需要互联网访问，直接从 IvorySQL 的官方仓库下载相关软件包。&lt;/p&gt;
&lt;p&gt;请注意，直接将 IvorySQL 加入 Pigsty 默认软件仓库中会影响原生 PostgreSQL 内核的安装。Pigsty 专业版提供包括 IvorySQL 内核在内的离线安装解决方案。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://pigsty.cc/img/pigsty/ivory.jpg" alt=""&gt;&lt;/p&gt;
&lt;p&gt;当前 Pigsty 的 &lt;code&gt;ivorysql&lt;/code&gt; 包别名指向 IvorySQL 5，兼容 PostgreSQL 18。不同发行版的真实包名由 &lt;code&gt;roles/node_id/vars/&lt;/code&gt; 中的平台变量映射，例如 EL 使用 &lt;code&gt;ivorysql5&lt;/code&gt;，Debian/Ubuntu 使用 &lt;code&gt;ivorysql-5&lt;/code&gt;。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;最后一个支持 EL7 的 IvorySQL 版本为 3.3，对应 PostgreSQL 16.3；最后一个基于 PostgreSQL 17 的版本为 IvorySQL 4.4&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="安装"&gt;安装&lt;/h2&gt;
&lt;p&gt;如果您的环境有互联网访问，您可以使用以下方式，直接将 IvorySQL 仓库加入到节点上，然后执行 PGSQL 剧本进行安装&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./node.yml -t node_repo -e &lt;span class="s1"&gt;&amp;#39;{&amp;#34;node_repo_modules&amp;#34;:&amp;#34;local,node,pgsql,ivory&amp;#34;}&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="配置"&gt;配置&lt;/h2&gt;
&lt;p&gt;以下参数需要针对 IvorySQL 数据库集群进行配置：&lt;/p&gt;</description></item><item><title>PolarDB PG</title><link>https://pigsty.cc/docs/pgsql/kernel/polardb/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/pgsql/kernel/polardb/</guid><description>&lt;hr&gt;
&lt;h2 id="概览"&gt;概览&lt;/h2&gt;
&lt;p&gt;Pigsty 允许使用 PolarDB 创建带有 “国产化信创资质” 的 PostgreSQL 集群！&lt;/p&gt;
&lt;p&gt;PolarDB for PostgreSQL 当前以 PostgreSQL 17 为基线，Pigsty 中的 &lt;code&gt;polar&lt;/code&gt; 模板、默认路径与扩展说明也已经同步到 PG17。任何兼容 PostgreSQL 线缆协议的客户端工具都可以访问 PolarDB 集群。&lt;/p&gt;
&lt;p&gt;Pigsty 的 PGSQL 仓库中提供了 PolarDB PG 开源版安装包，但不会在 Pigsty 安装时下载到本地软件仓库。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://pigsty.cc/img/pigsty/polar.jpg" alt=""&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="安装"&gt;安装&lt;/h2&gt;
&lt;p&gt;使用 Pigsty 内置模板：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./configure -c polar
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./deploy.yml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="变更摘要"&gt;变更摘要&lt;/h2&gt;
&lt;table class="full-width"&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;项目&lt;/th&gt;
 &lt;th&gt;旧文档 / 旧默认值&lt;/th&gt;
 &lt;th&gt;当前值&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;内核基线&lt;/td&gt;
 &lt;td&gt;PostgreSQL 15&lt;/td&gt;
 &lt;td&gt;PostgreSQL 17&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;默认 PolarDB 路径&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;/u01/polardb_pg&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;/u01/polardb_pg_17&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;支持架构&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;x86_64&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;x86_64&lt;/code&gt;, &lt;code&gt;aarch64&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;可用扩展数&lt;/td&gt;
 &lt;td&gt;旧文档正文写为 61&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;pg_available_extensions&lt;/code&gt; 查询结果为 93&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;复制用户要求&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;replicator&lt;/code&gt; 需要 &lt;code&gt;SUPERUSER&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;保持不变&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="配置"&gt;配置&lt;/h2&gt;
&lt;p&gt;以下参数需要针对 PolarDB 数据库集群进行特殊配置：&lt;/p&gt;</description></item><item><title>PolarDB Oracle</title><link>https://pigsty.cc/docs/pgsql/kernel/polardb-o/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/pgsql/kernel/polardb-o/</guid><description>&lt;p&gt;Pigsty 允许使用 PolarDB 创建带有 “国产化信创资质” 的 PolarDB for Oracle 集群！&lt;/p&gt;
&lt;p&gt;根据 【&lt;a href="http://www.itsec.gov.cn/aqkkcp/cpgg/202312/t20231226_162074.html"&gt;安全可靠测评结果公告（2023年第1号）&lt;/a&gt;】，附表三、集中式数据库。PolarDB v2.0 属于自主可控，安全可靠的国产信创数据库。&lt;/p&gt;
&lt;p&gt;PolarDB for Oracle 是基于 PolarDB for PostgreSQL 进行二次开发的 Oracle 兼容版本，两者共用同一套内核，通过 &lt;code&gt;--compatibility-mode&lt;/code&gt; 参数进行区分。&lt;/p&gt;
&lt;p&gt;我们与阿里云内核团队合作，提供基于 PolarDB v2.0 内核与 Pigsty 的完整数据库解决方案，请联系销售咨询，或在阿里云市场自行采购。&lt;/p&gt;
&lt;p&gt;PolarDB for Oracle 内核目前仅在 EL7 (CentOS 7) 系统中可用。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://pigsty.cc/img/pigsty/polar.jpg" alt=""&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="扩展"&gt;扩展&lt;/h2&gt;
&lt;p&gt;目前 PolarDB 2.0 (Oracle 兼容) 内核自带了以下 &lt;strong&gt;188&lt;/strong&gt; 个扩展插件：&lt;/p&gt;
&lt;table class="full-width"&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;name&lt;/th&gt;
 &lt;th&gt;default_version&lt;/th&gt;
 &lt;th&gt;comment&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;cube&lt;/td&gt;
 &lt;td&gt;1.5&lt;/td&gt;
 &lt;td&gt;data type for multidimensional cubes&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;ip4r&lt;/td&gt;
 &lt;td&gt;2.4&lt;/td&gt;
 &lt;td&gt;NULL&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;adminpack&lt;/td&gt;
 &lt;td&gt;2.1&lt;/td&gt;
 &lt;td&gt;administrative functions for PostgreSQL&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;dict_xsyn&lt;/td&gt;
 &lt;td&gt;1.0&lt;/td&gt;
 &lt;td&gt;text search dictionary template for extended synonym processing&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;amcheck&lt;/td&gt;
 &lt;td&gt;1.4&lt;/td&gt;
 &lt;td&gt;functions for verifying relation integrity&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;autoinc&lt;/td&gt;
 &lt;td&gt;1.0&lt;/td&gt;
 &lt;td&gt;functions for autoincrementing fields&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;hstore&lt;/td&gt;
 &lt;td&gt;1.8&lt;/td&gt;
 &lt;td&gt;data type for storing sets of (key, value) pairs&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;bloom&lt;/td&gt;
 &lt;td&gt;1.0&lt;/td&gt;
 &lt;td&gt;bloom access method - signature file based index&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;earthdistance&lt;/td&gt;
 &lt;td&gt;1.1&lt;/td&gt;
 &lt;td&gt;calculate great-circle distances on the surface of the Earth&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;hstore_plperl&lt;/td&gt;
 &lt;td&gt;1.0&lt;/td&gt;
 &lt;td&gt;transform between hstore and plperl&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;bool_plperl&lt;/td&gt;
 &lt;td&gt;1.0&lt;/td&gt;
 &lt;td&gt;transform between bool and plperl&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;file_fdw&lt;/td&gt;
 &lt;td&gt;1.0&lt;/td&gt;
 &lt;td&gt;foreign-data wrapper for flat file access&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;bool_plperlu&lt;/td&gt;
 &lt;td&gt;1.0&lt;/td&gt;
 &lt;td&gt;transform between bool and plperlu&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;fuzzystrmatch&lt;/td&gt;
 &lt;td&gt;1.1&lt;/td&gt;
 &lt;td&gt;determine similarities and distance between strings&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;hstore_plperlu&lt;/td&gt;
 &lt;td&gt;1.0&lt;/td&gt;
 &lt;td&gt;transform between hstore and plperlu&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;btree_gin&lt;/td&gt;
 &lt;td&gt;1.3&lt;/td&gt;
 &lt;td&gt;support for indexing common datatypes in GIN&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;hstore_plpython2u&lt;/td&gt;
 &lt;td&gt;1.0&lt;/td&gt;
 &lt;td&gt;transform between hstore and plpython2u&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;btree_gist&lt;/td&gt;
 &lt;td&gt;1.6&lt;/td&gt;
 &lt;td&gt;support for indexing common datatypes in GiST&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;hll&lt;/td&gt;
 &lt;td&gt;2.17&lt;/td&gt;
 &lt;td&gt;type for storing hyperloglog data&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;hstore_plpython3u&lt;/td&gt;
 &lt;td&gt;1.0&lt;/td&gt;
 &lt;td&gt;transform between hstore and plpython3u&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;citext&lt;/td&gt;
 &lt;td&gt;1.6&lt;/td&gt;
 &lt;td&gt;data type for case-insensitive character strings&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;hstore_plpythonu&lt;/td&gt;
 &lt;td&gt;1.0&lt;/td&gt;
 &lt;td&gt;transform between hstore and plpythonu&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;hypopg&lt;/td&gt;
 &lt;td&gt;1.3.1&lt;/td&gt;
 &lt;td&gt;Hypothetical indexes for PostgreSQL&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;insert_username&lt;/td&gt;
 &lt;td&gt;1.0&lt;/td&gt;
 &lt;td&gt;functions for tracking who changed a table&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;dblink&lt;/td&gt;
 &lt;td&gt;1.2&lt;/td&gt;
 &lt;td&gt;connect to other PostgreSQL databases from within a database&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;decoderbufs&lt;/td&gt;
 &lt;td&gt;0.1.0&lt;/td&gt;
 &lt;td&gt;Logical decoding plugin that delivers WAL stream changes using a Protocol Buffer format&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;intagg&lt;/td&gt;
 &lt;td&gt;1.1&lt;/td&gt;
 &lt;td&gt;integer aggregator and enumerator (obsolete)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;dict_int&lt;/td&gt;
 &lt;td&gt;1.0&lt;/td&gt;
 &lt;td&gt;text search dictionary template for integers&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;intarray&lt;/td&gt;
 &lt;td&gt;1.5&lt;/td&gt;
 &lt;td&gt;functions, operators, and index support for 1-D arrays of integers&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;isn&lt;/td&gt;
 &lt;td&gt;1.2&lt;/td&gt;
 &lt;td&gt;data types for international product numbering standards&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;jsonb_plperl&lt;/td&gt;
 &lt;td&gt;1.0&lt;/td&gt;
 &lt;td&gt;transform between jsonb and plperl&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;jsonb_plperlu&lt;/td&gt;
 &lt;td&gt;1.0&lt;/td&gt;
 &lt;td&gt;transform between jsonb and plperlu&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;jsonb_plpython2u&lt;/td&gt;
 &lt;td&gt;1.0&lt;/td&gt;
 &lt;td&gt;transform between jsonb and plpython2u&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;jsonb_plpython3u&lt;/td&gt;
 &lt;td&gt;1.0&lt;/td&gt;
 &lt;td&gt;transform between jsonb and plpython3u&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;jsonb_plpythonu&lt;/td&gt;
 &lt;td&gt;1.0&lt;/td&gt;
 &lt;td&gt;transform between jsonb and plpythonu&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;lo&lt;/td&gt;
 &lt;td&gt;1.1&lt;/td&gt;
 &lt;td&gt;Large Object maintenance&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;log_fdw&lt;/td&gt;
 &lt;td&gt;1.0&lt;/td&gt;
 &lt;td&gt;foreign-data wrapper for csvlog&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;ltree&lt;/td&gt;
 &lt;td&gt;1.2&lt;/td&gt;
 &lt;td&gt;data type for hierarchical tree-like structures&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;ltree_plpython2u&lt;/td&gt;
 &lt;td&gt;1.0&lt;/td&gt;
 &lt;td&gt;transform between ltree and plpython2u&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;ltree_plpython3u&lt;/td&gt;
 &lt;td&gt;1.0&lt;/td&gt;
 &lt;td&gt;transform between ltree and plpython3u&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;ltree_plpythonu&lt;/td&gt;
 &lt;td&gt;1.0&lt;/td&gt;
 &lt;td&gt;transform between ltree and plpythonu&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;moddatetime&lt;/td&gt;
 &lt;td&gt;1.0&lt;/td&gt;
 &lt;td&gt;functions for tracking last modification time&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;old_snapshot&lt;/td&gt;
 &lt;td&gt;1.0&lt;/td&gt;
 &lt;td&gt;utilities in support of old_snapshot_threshold&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;oracle_fdw&lt;/td&gt;
 &lt;td&gt;1.2&lt;/td&gt;
 &lt;td&gt;foreign data wrapper for Oracle access&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;oss_fdw&lt;/td&gt;
 &lt;td&gt;1.1&lt;/td&gt;
 &lt;td&gt;foreign-data wrapper for OSS access&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pageinspect&lt;/td&gt;
 &lt;td&gt;2.1&lt;/td&gt;
 &lt;td&gt;inspect the contents of database pages at a low level&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pase&lt;/td&gt;
 &lt;td&gt;0.0.1&lt;/td&gt;
 &lt;td&gt;ant ai similarity search&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_bigm&lt;/td&gt;
 &lt;td&gt;1.2&lt;/td&gt;
 &lt;td&gt;text similarity measurement and index searching based on bigrams&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_freespacemap&lt;/td&gt;
 &lt;td&gt;1.2&lt;/td&gt;
 &lt;td&gt;examine the free space map (FSM)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_hint_plan&lt;/td&gt;
 &lt;td&gt;1.4&lt;/td&gt;
 &lt;td&gt;controls execution plan with hinting phrases in comment of special form&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_buffercache&lt;/td&gt;
 &lt;td&gt;1.5&lt;/td&gt;
 &lt;td&gt;examine the shared buffer cache&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_prewarm&lt;/td&gt;
 &lt;td&gt;1.2&lt;/td&gt;
 &lt;td&gt;prewarm relation data&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_repack&lt;/td&gt;
 &lt;td&gt;1.4.8-1&lt;/td&gt;
 &lt;td&gt;Reorganize tables in PostgreSQL databases with minimal locks&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_sphere&lt;/td&gt;
 &lt;td&gt;1.0&lt;/td&gt;
 &lt;td&gt;spherical objects with useful functions, operators and index support&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_cron&lt;/td&gt;
 &lt;td&gt;1.5&lt;/td&gt;
 &lt;td&gt;Job scheduler for PostgreSQL&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_jieba&lt;/td&gt;
 &lt;td&gt;1.1.0&lt;/td&gt;
 &lt;td&gt;a parser for full-text search of Chinese&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_stat_kcache&lt;/td&gt;
 &lt;td&gt;2.2.1&lt;/td&gt;
 &lt;td&gt;Kernel statistics gathering&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_stat_statements&lt;/td&gt;
 &lt;td&gt;1.9&lt;/td&gt;
 &lt;td&gt;track planning and execution statistics of all SQL statements executed&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_surgery&lt;/td&gt;
 &lt;td&gt;1.0&lt;/td&gt;
 &lt;td&gt;extension to perform surgery on a damaged relation&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_trgm&lt;/td&gt;
 &lt;td&gt;1.6&lt;/td&gt;
 &lt;td&gt;text similarity measurement and index searching based on trigrams&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_visibility&lt;/td&gt;
 &lt;td&gt;1.2&lt;/td&gt;
 &lt;td&gt;examine the visibility map (VM) and page-level visibility info&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pg_wait_sampling&lt;/td&gt;
 &lt;td&gt;1.1&lt;/td&gt;
 &lt;td&gt;sampling based statistics of wait events&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pgaudit&lt;/td&gt;
 &lt;td&gt;1.6.2&lt;/td&gt;
 &lt;td&gt;provides auditing functionality&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pgcrypto&lt;/td&gt;
 &lt;td&gt;1.3&lt;/td&gt;
 &lt;td&gt;cryptographic functions&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pgrowlocks&lt;/td&gt;
 &lt;td&gt;1.2&lt;/td&gt;
 &lt;td&gt;show row-level locking information&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pgstattuple&lt;/td&gt;
 &lt;td&gt;1.5&lt;/td&gt;
 &lt;td&gt;show tuple-level statistics&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pgtap&lt;/td&gt;
 &lt;td&gt;1.2.0&lt;/td&gt;
 &lt;td&gt;Unit testing for PostgreSQL&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pldbgapi&lt;/td&gt;
 &lt;td&gt;1.1&lt;/td&gt;
 &lt;td&gt;server-side support for debugging PL/pgSQL functions&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;plperl&lt;/td&gt;
 &lt;td&gt;1.0&lt;/td&gt;
 &lt;td&gt;PL/Perl procedural language&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;plperlu&lt;/td&gt;
 &lt;td&gt;1.0&lt;/td&gt;
 &lt;td&gt;PL/PerlU untrusted procedural language&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;plpgsql&lt;/td&gt;
 &lt;td&gt;1.0&lt;/td&gt;
 &lt;td&gt;PL/pgSQL procedural language&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;plpython2u&lt;/td&gt;
 &lt;td&gt;1.0&lt;/td&gt;
 &lt;td&gt;PL/Python2U untrusted procedural language&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;plpythonu&lt;/td&gt;
 &lt;td&gt;1.0&lt;/td&gt;
 &lt;td&gt;PL/PythonU untrusted procedural language&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;plsql&lt;/td&gt;
 &lt;td&gt;1.0&lt;/td&gt;
 &lt;td&gt;Oracle compatible PL/SQL procedural language&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pltcl&lt;/td&gt;
 &lt;td&gt;1.0&lt;/td&gt;
 &lt;td&gt;PL/Tcl procedural language&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pltclu&lt;/td&gt;
 &lt;td&gt;1.0&lt;/td&gt;
 &lt;td&gt;PL/TclU untrusted procedural language&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;polar_bfile&lt;/td&gt;
 &lt;td&gt;1.0&lt;/td&gt;
 &lt;td&gt;The BFILE data type enables access to binary file LOBs that are stored in file systems outside Database&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;polar_bpe&lt;/td&gt;
 &lt;td&gt;1.0&lt;/td&gt;
 &lt;td&gt;polar_bpe&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;polar_builtin_cast&lt;/td&gt;
 &lt;td&gt;1.1&lt;/td&gt;
 &lt;td&gt;Internal extension for builtin casts&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;polar_builtin_funcs&lt;/td&gt;
 &lt;td&gt;2.0&lt;/td&gt;
 &lt;td&gt;implement polar builtin functions&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;polar_builtin_type&lt;/td&gt;
 &lt;td&gt;1.5&lt;/td&gt;
 &lt;td&gt;polar_builtin_type for PolarDB&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;polar_builtin_view&lt;/td&gt;
 &lt;td&gt;1.5&lt;/td&gt;
 &lt;td&gt;polar_builtin_view&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;polar_catalog&lt;/td&gt;
 &lt;td&gt;1.2&lt;/td&gt;
 &lt;td&gt;polardb pg extend catalog&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;polar_channel&lt;/td&gt;
 &lt;td&gt;1.0&lt;/td&gt;
 &lt;td&gt;polar_channel&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;polar_constraint&lt;/td&gt;
 &lt;td&gt;1.0&lt;/td&gt;
 &lt;td&gt;polar_constraint&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;polar_csn&lt;/td&gt;
 &lt;td&gt;1.0&lt;/td&gt;
 &lt;td&gt;polar_csn&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;polar_dba_views&lt;/td&gt;
 &lt;td&gt;1.0&lt;/td&gt;
 &lt;td&gt;polar_dba_views&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;polar_dbms_alert&lt;/td&gt;
 &lt;td&gt;1.2&lt;/td&gt;
 &lt;td&gt;implement polar_dbms_alert - supports asynchronous notification of database events.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;polar_dbms_application_info&lt;/td&gt;
 &lt;td&gt;1.0&lt;/td&gt;
 &lt;td&gt;implement polar_dbms_application_info - record names of executing modules or transactions in the database.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;polar_dbms_pipe&lt;/td&gt;
 &lt;td&gt;1.1&lt;/td&gt;
 &lt;td&gt;implements polar_dbms_pipe - package lets two or more sessions in the same instance communicate.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;polar_dbms_aq&lt;/td&gt;
 &lt;td&gt;1.2&lt;/td&gt;
 &lt;td&gt;implement dbms_aq - provides an interface to Advanced Queuing.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;polar_dbms_lob&lt;/td&gt;
 &lt;td&gt;1.3&lt;/td&gt;
 &lt;td&gt;implement dbms_lob - provides subprograms to operate on BLOBs, CLOBs, and NCLOBs.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;polar_dbms_output&lt;/td&gt;
 &lt;td&gt;1.2&lt;/td&gt;
 &lt;td&gt;implement polar_dbms_output - enables you to send messages from stored procedures.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;polar_dbms_lock&lt;/td&gt;
 &lt;td&gt;1.0&lt;/td&gt;
 &lt;td&gt;implement polar_dbms_lock - provides an interface to Oracle Lock Management services.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;polar_dbms_aqadm&lt;/td&gt;
 &lt;td&gt;1.3&lt;/td&gt;
 &lt;td&gt;polar_dbms_aqadm - procedures to manage Advanced Queuing configuration and administration information.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;polar_dbms_assert&lt;/td&gt;
 &lt;td&gt;1.0&lt;/td&gt;
 &lt;td&gt;implement polar_dbms_assert - provide an interface to validate properties of the input value.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;polar_dbms_metadata&lt;/td&gt;
 &lt;td&gt;1.0&lt;/td&gt;
 &lt;td&gt;implement polar_dbms_metadata - provides a way for you to retrieve metadata from the database dictionary.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;polar_dbms_random&lt;/td&gt;
 &lt;td&gt;1.0&lt;/td&gt;
 &lt;td&gt;implement polar_dbms_random - a built-in random number generator, not intended for cryptography&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;polar_dbms_crypto&lt;/td&gt;
 &lt;td&gt;1.1&lt;/td&gt;
 &lt;td&gt;implement dbms_crypto - provides an interface to encrypt and decrypt stored data.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;polar_dbms_redact&lt;/td&gt;
 &lt;td&gt;1.0&lt;/td&gt;
 &lt;td&gt;implement polar_dbms_redact - provides an interface to mask data from queries by an application.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;polar_dbms_debug&lt;/td&gt;
 &lt;td&gt;1.1&lt;/td&gt;
 &lt;td&gt;server-side support for debugging PL/SQL functions&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;polar_dbms_job&lt;/td&gt;
 &lt;td&gt;1.0&lt;/td&gt;
 &lt;td&gt;polar_dbms_job&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;polar_dbms_mview&lt;/td&gt;
 &lt;td&gt;1.1&lt;/td&gt;
 &lt;td&gt;implement polar_dbms_mview - enables to refresh materialized views.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;polar_dbms_job_preload&lt;/td&gt;
 &lt;td&gt;1.0&lt;/td&gt;
 &lt;td&gt;polar_dbms_job_preload&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;polar_dbms_obfuscation_toolkit&lt;/td&gt;
 &lt;td&gt;1.1&lt;/td&gt;
 &lt;td&gt;implement polar_dbms_obfuscation_toolkit - enables an application to get data md5.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;polar_dbms_rls&lt;/td&gt;
 &lt;td&gt;1.1&lt;/td&gt;
 &lt;td&gt;implement polar_dbms_rls - a fine-grained access control administrative built-in package&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;polar_multi_toast_utils&lt;/td&gt;
 &lt;td&gt;1.0&lt;/td&gt;
 &lt;td&gt;polar_multi_toast_utils&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;polar_dbms_session&lt;/td&gt;
 &lt;td&gt;1.2&lt;/td&gt;
 &lt;td&gt;implement polar_dbms_session - support to set preferences and security levels.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;polar_odciconst&lt;/td&gt;
 &lt;td&gt;1.0&lt;/td&gt;
 &lt;td&gt;implement ODCIConst - Provide some built-in constants in Oracle.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;polar_dbms_sql&lt;/td&gt;
 &lt;td&gt;1.2&lt;/td&gt;
 &lt;td&gt;implement polar_dbms_sql - provides an interface to execute dynamic SQL.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;polar_osfs_toolkit&lt;/td&gt;
 &lt;td&gt;1.0&lt;/td&gt;
 &lt;td&gt;osfs library tools and functions extension&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;polar_dbms_stats&lt;/td&gt;
 &lt;td&gt;14.0&lt;/td&gt;
 &lt;td&gt;stabilize plans by fixing statistics&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;polar_monitor&lt;/td&gt;
 &lt;td&gt;1.5&lt;/td&gt;
 &lt;td&gt;monitor functions for PolarDB&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;polar_osfs_utils&lt;/td&gt;
 &lt;td&gt;1.0&lt;/td&gt;
 &lt;td&gt;osfs library utils extension&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;polar_dbms_utility&lt;/td&gt;
 &lt;td&gt;1.3&lt;/td&gt;
 &lt;td&gt;implement polar_dbms_utility - provides various utility subprograms.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;polar_parameter_check&lt;/td&gt;
 &lt;td&gt;1.0&lt;/td&gt;
 &lt;td&gt;kernel extension for parameter validation&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;polar_dbms_xmldom&lt;/td&gt;
 &lt;td&gt;1.0&lt;/td&gt;
 &lt;td&gt;implement dbms_xmldom and dbms_xmlparser - support standard DOM interface and xml parser object&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;polar_parameter_manager&lt;/td&gt;
 &lt;td&gt;1.1&lt;/td&gt;
 &lt;td&gt;Extension to select parameters for manger.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;polar_faults&lt;/td&gt;
 &lt;td&gt;1.0.0&lt;/td&gt;
 &lt;td&gt;simulate some database faults for end user or testing system.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;polar_monitor_preload&lt;/td&gt;
 &lt;td&gt;1.1&lt;/td&gt;
 &lt;td&gt;examine the polardb information&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;polar_proxy_utils&lt;/td&gt;
 &lt;td&gt;1.0&lt;/td&gt;
 &lt;td&gt;Extension to provide operations about proxy.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;polar_feature_utils&lt;/td&gt;
 &lt;td&gt;1.2&lt;/td&gt;
 &lt;td&gt;PolarDB feature utilization&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;polar_global_awr&lt;/td&gt;
 &lt;td&gt;1.0&lt;/td&gt;
 &lt;td&gt;PolarDB Global AWR Report&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;polar_publication&lt;/td&gt;
 &lt;td&gt;1.0&lt;/td&gt;
 &lt;td&gt;support polardb pg logical replication&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;polar_global_cache&lt;/td&gt;
 &lt;td&gt;1.0&lt;/td&gt;
 &lt;td&gt;polar_global_cache&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;polar_px&lt;/td&gt;
 &lt;td&gt;1.0&lt;/td&gt;
 &lt;td&gt;Parallel Execution extension&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;polar_serverless&lt;/td&gt;
 &lt;td&gt;1.0&lt;/td&gt;
 &lt;td&gt;polar serverless extension&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;polar_resource_manager&lt;/td&gt;
 &lt;td&gt;1.0&lt;/td&gt;
 &lt;td&gt;a background process that forcibly frees user session process memory&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;polar_sys_context&lt;/td&gt;
 &lt;td&gt;1.1&lt;/td&gt;
 &lt;td&gt;implement polar_sys_context - returns the value of parameter associated with the context namespace at the current instant.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;polar_gpc&lt;/td&gt;
 &lt;td&gt;1.3&lt;/td&gt;
 &lt;td&gt;polar_gpc&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;polar_tde_utils&lt;/td&gt;
 &lt;td&gt;1.0&lt;/td&gt;
 &lt;td&gt;Internal extension for TDE&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;polar_gtt&lt;/td&gt;
 &lt;td&gt;1.1&lt;/td&gt;
 &lt;td&gt;polar_gtt&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;polar_utl_encode&lt;/td&gt;
 &lt;td&gt;1.2&lt;/td&gt;
 &lt;td&gt;implement polar_utl_encode - provides functions that encode RAW data into a standard encoded format&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;polar_htap&lt;/td&gt;
 &lt;td&gt;1.1&lt;/td&gt;
 &lt;td&gt;extension for PolarDB HTAP&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;polar_htap_db&lt;/td&gt;
 &lt;td&gt;1.0&lt;/td&gt;
 &lt;td&gt;extension for PolarDB HTAP database level operation&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;polar_io_stat&lt;/td&gt;
 &lt;td&gt;1.0&lt;/td&gt;
 &lt;td&gt;polar io stat in multi dimension&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;polar_utl_file&lt;/td&gt;
 &lt;td&gt;1.0&lt;/td&gt;
 &lt;td&gt;implement utl_file - support PL/SQL programs can read and write operating system text files&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;polar_ivm&lt;/td&gt;
 &lt;td&gt;1.0&lt;/td&gt;
 &lt;td&gt;polar_ivm&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;polar_sql_mapping&lt;/td&gt;
 &lt;td&gt;1.2&lt;/td&gt;
 &lt;td&gt;Record error sqls and mapping them to correct one&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;polar_stat_sql&lt;/td&gt;
 &lt;td&gt;1.0&lt;/td&gt;
 &lt;td&gt;Kernel statistics gathering, and sql plan nodes information gathering&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;tds_fdw&lt;/td&gt;
 &lt;td&gt;2.0.2&lt;/td&gt;
 &lt;td&gt;Foreign data wrapper for querying a TDS database (Sybase or Microsoft SQL Server)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;xml2&lt;/td&gt;
 &lt;td&gt;1.1&lt;/td&gt;
 &lt;td&gt;XPath querying and XSLT&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;polar_upgrade_catalogs&lt;/td&gt;
 &lt;td&gt;1.1&lt;/td&gt;
 &lt;td&gt;Upgrade catalogs for old version instance&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;polar_utl_i18n&lt;/td&gt;
 &lt;td&gt;1.1&lt;/td&gt;
 &lt;td&gt;polar_utl_i18n&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;polar_utl_raw&lt;/td&gt;
 &lt;td&gt;1.0&lt;/td&gt;
 &lt;td&gt;implement utl_raw - provides SQL functions for manipulating RAW datatypes.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;timescaledb&lt;/td&gt;
 &lt;td&gt;2.9.2&lt;/td&gt;
 &lt;td&gt;Enables scalable inserts and complex queries for time-series data&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;polar_vfs&lt;/td&gt;
 &lt;td&gt;1.0&lt;/td&gt;
 &lt;td&gt;polar virtual file system for different storage&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;polar_worker&lt;/td&gt;
 &lt;td&gt;1.0&lt;/td&gt;
 &lt;td&gt;polar_worker&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;postgres_fdw&lt;/td&gt;
 &lt;td&gt;1.1&lt;/td&gt;
 &lt;td&gt;foreign-data wrapper for remote PostgreSQL servers&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;refint&lt;/td&gt;
 &lt;td&gt;1.0&lt;/td&gt;
 &lt;td&gt;functions for implementing referential integrity (obsolete)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;roaringbitmap&lt;/td&gt;
 &lt;td&gt;0.5&lt;/td&gt;
 &lt;td&gt;support for Roaring Bitmaps&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;tsm_system_time&lt;/td&gt;
 &lt;td&gt;1.0&lt;/td&gt;
 &lt;td&gt;TABLESAMPLE method which accepts time in milliseconds as a limit&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;vector&lt;/td&gt;
 &lt;td&gt;0.5.0&lt;/td&gt;
 &lt;td&gt;vector data type and ivfflat and hnsw access methods&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;rum&lt;/td&gt;
 &lt;td&gt;1.3&lt;/td&gt;
 &lt;td&gt;RUM index access method&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;unaccent&lt;/td&gt;
 &lt;td&gt;1.1&lt;/td&gt;
 &lt;td&gt;text search dictionary that removes accents&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;seg&lt;/td&gt;
 &lt;td&gt;1.4&lt;/td&gt;
 &lt;td&gt;data type for representing line segments or floating-point intervals&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;sequential_uuids&lt;/td&gt;
 &lt;td&gt;1.0.2&lt;/td&gt;
 &lt;td&gt;generator of sequential UUIDs&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;uuid-ossp&lt;/td&gt;
 &lt;td&gt;1.1&lt;/td&gt;
 &lt;td&gt;generate universally unique identifiers (UUIDs)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;smlar&lt;/td&gt;
 &lt;td&gt;1.0&lt;/td&gt;
 &lt;td&gt;compute similary of any one-dimensional arrays&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;varbitx&lt;/td&gt;
 &lt;td&gt;1.1&lt;/td&gt;
 &lt;td&gt;varbit functions pack&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;sslinfo&lt;/td&gt;
 &lt;td&gt;1.2&lt;/td&gt;
 &lt;td&gt;information about SSL certificates&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;tablefunc&lt;/td&gt;
 &lt;td&gt;1.0&lt;/td&gt;
 &lt;td&gt;functions that manipulate whole tables, including crosstab&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;tcn&lt;/td&gt;
 &lt;td&gt;1.0&lt;/td&gt;
 &lt;td&gt;Triggered change notifications&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;zhparser&lt;/td&gt;
 &lt;td&gt;1.0&lt;/td&gt;
 &lt;td&gt;a parser for full-text search of Chinese&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;address_standardizer&lt;/td&gt;
 &lt;td&gt;3.3.2&lt;/td&gt;
 &lt;td&gt;Ganos PostGIS address standardizer&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;address_standardizer_data_us&lt;/td&gt;
 &lt;td&gt;3.3.2&lt;/td&gt;
 &lt;td&gt;Ganos PostGIS address standardizer data us&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;ganos_fdw&lt;/td&gt;
 &lt;td&gt;6.0&lt;/td&gt;
 &lt;td&gt;Ganos Spatial FDW extension for POLARDB&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;ganos_geometry&lt;/td&gt;
 &lt;td&gt;6.0&lt;/td&gt;
 &lt;td&gt;Ganos geometry lite extension for POLARDB&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;ganos_geometry_pyramid&lt;/td&gt;
 &lt;td&gt;6.0&lt;/td&gt;
 &lt;td&gt;Ganos Geometry Pyramid extension for POLARDB&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;ganos_geometry_sfcgal&lt;/td&gt;
 &lt;td&gt;6.0&lt;/td&gt;
 &lt;td&gt;Ganos geometry lite sfcgal extension for POLARDB&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;ganos_geomgrid&lt;/td&gt;
 &lt;td&gt;6.0&lt;/td&gt;
 &lt;td&gt;Ganos geometry grid extension for POLARDB&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;ganos_importer&lt;/td&gt;
 &lt;td&gt;6.0&lt;/td&gt;
 &lt;td&gt;Ganos Spatial importer extension for POLARDB&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;ganos_networking&lt;/td&gt;
 &lt;td&gt;6.0&lt;/td&gt;
 &lt;td&gt;Ganos networking&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;ganos_pointcloud&lt;/td&gt;
 &lt;td&gt;6.0&lt;/td&gt;
 &lt;td&gt;Ganos pointcloud extension For POLARDB&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;ganos_pointcloud_geometry&lt;/td&gt;
 &lt;td&gt;6.0&lt;/td&gt;
 &lt;td&gt;Ganos_pointcloud LIDAR data and ganos_geometry data for POLARDB&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;ganos_raster&lt;/td&gt;
 &lt;td&gt;6.0&lt;/td&gt;
 &lt;td&gt;Ganos raster extension for POLARDB&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;ganos_scene&lt;/td&gt;
 &lt;td&gt;6.0&lt;/td&gt;
 &lt;td&gt;Ganos scene extension for POLARDB&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;ganos_sfmesh&lt;/td&gt;
 &lt;td&gt;6.0&lt;/td&gt;
 &lt;td&gt;Ganos surface mesh extension for POLARDB&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;ganos_spatialref&lt;/td&gt;
 &lt;td&gt;6.0&lt;/td&gt;
 &lt;td&gt;Ganos spatial reference extension for POLARDB&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;ganos_trajectory&lt;/td&gt;
 &lt;td&gt;6.0&lt;/td&gt;
 &lt;td&gt;Ganos trajectory extension for POLARDB&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;ganos_vomesh&lt;/td&gt;
 &lt;td&gt;6.0&lt;/td&gt;
 &lt;td&gt;Ganos volumn mesh extension for POLARDB&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;postgis_tiger_geocoder&lt;/td&gt;
 &lt;td&gt;3.3.2&lt;/td&gt;
 &lt;td&gt;Ganos PostGIS tiger geocoder&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;postgis_topology&lt;/td&gt;
 &lt;td&gt;3.3.2&lt;/td&gt;
 &lt;td&gt;Ganos PostGIS topology&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>Percona</title><link>https://pigsty.cc/docs/pgsql/kernel/percona/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/pgsql/kernel/percona/</guid><description>&lt;p&gt;&lt;a href="https://www.percona.com/postgresql/software/postgresql-distribution"&gt;Percona Postgres&lt;/a&gt; 是一个带有 &lt;a href="https://docs.percona.com/pg-tde/index.html"&gt;&lt;code&gt;pg_tde&lt;/code&gt;&lt;/a&gt;（透明数据加密）扩展的补丁 Postgres 内核。&lt;/p&gt;
&lt;p&gt;Pigsty v4.3.0 的 &lt;code&gt;percona-main&lt;/code&gt; 包集使用 Percona PostgreSQL 18，并额外安装 &lt;code&gt;pg_tde&lt;/code&gt;、PostGIS、pgvector、wal2json、pg_repack、pgaudit、pg_stat_monitor 等常用组件。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://andreas.scherbaum.la/post/2025-06-30_performance-test-for-percona-transparent-data-encryption-tde/"&gt;Percona 透明数据加密（TDE）性能测试&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="快速开始"&gt;快速开始&lt;/h2&gt;
&lt;p&gt;使用 Pigsty &lt;a href="https://pigsty.cc/docs/setup/install"&gt;&lt;strong&gt;标准安装流程&lt;/strong&gt;&lt;/a&gt;，配合 &lt;a href="https://github.com/pgsty/pigsty/blob/main/conf/pgtde.yml"&gt;&lt;code&gt;pgtde&lt;/code&gt;&lt;/a&gt; 配置模板。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -fsSL https://repo.pigsty.io/get &lt;span class="p"&gt;|&lt;/span&gt; bash&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nb"&gt;cd&lt;/span&gt; ~/pigsty&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./configure -c pgtde &lt;span class="c1"&gt;# 使用 percona postgres 内核&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./deploy.yml &lt;span class="c1"&gt;# 使用 pigsty 设置一切&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="配置"&gt;配置&lt;/h2&gt;
&lt;p&gt;需要调整以下参数来部署 Percona 集群：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;pg-meta&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;hosts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;10.10.10.10&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;{&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_seq: 1, pg_role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;primary }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;vars&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_cluster&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;pg-meta&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_users&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- {&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name: dbuser_meta ,password: DBUser.Meta ,pgbouncer: true ,roles: [dbrole_admin ] ,comment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;pigsty admin user }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- {&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name: dbuser_view ,password: DBUser.Viewer ,pgbouncer: true ,roles: [dbrole_readonly] ,comment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;read-only viewer }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_databases&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;meta&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;baseline&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;cmdb.sql&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;comment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;pigsty tde database&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;schemas&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="l"&gt;pigsty]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;extensions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;vector, postgis, pg_tde ,pgaudit, { name: pg_stat_monitor, schema: monitor } ]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_hba_rules&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- {&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;user: dbuser_view , db: all ,addr: infra ,auth: pwd ,title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;allow grafana dashboard access cmdb from infra nodes&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;}&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;node_crontab&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;00 01 * * * postgres /pg/bin/pg-backup full&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 每天凌晨 1 点进行全量备份&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# Percona PostgreSQL TDE 临时设置&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_packages&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;percona-main, pgsql-common ] &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 安装 percona postgres 包&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_libs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;pg_tde, pgaudit, pg_stat_statements, pg_stat_monitor, auto_explain&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="扩展"&gt;扩展&lt;/h2&gt;
&lt;p&gt;Percona 提供了 80 个可用的扩展，包括 &lt;code&gt;pg_tde&lt;/code&gt;, &lt;code&gt;pgvector&lt;/code&gt;, &lt;code&gt;postgis&lt;/code&gt;, &lt;code&gt;pgaudit&lt;/code&gt;, &lt;code&gt;set_user&lt;/code&gt;, &lt;code&gt;pg_stat_monitor&lt;/code&gt; 等实用三方扩展。&lt;/p&gt;</description></item><item><title>openHalo</title><link>https://pigsty.cc/docs/pgsql/kernel/openhalo/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/pgsql/kernel/openhalo/</guid><description>&lt;p&gt;&lt;a href="https://www.openhalo.org/"&gt;OpenHalo&lt;/a&gt; 是一个开源的 PostgreSQL 内核，提供 MySQL 线协议兼容性。&lt;/p&gt;
&lt;p&gt;openHalo 基于 PostgreSQL 14.18 内核版本，提供与 MySQL 5.7.32-log / 8.0 版本的线协议兼容性。Pigsty 通过 &lt;code&gt;pg_mode: mysql&lt;/code&gt; 与 &lt;code&gt;openhalo&lt;/code&gt; 包别名交付。&lt;/p&gt;
&lt;p&gt;Pigsty 在所有支持的 Linux 平台上为 OpenHalo 提供部署支持。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;RPM 构建 SPEC: &lt;a href="https://github.com/pgsty/rpm/blob/main/rpmbuild/SPECS/openhalodb.spec"&gt;github.com/pgsty/rpm/rpmbuild/specs/openhalodb.spec&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;DEB 构建 SPEC: &lt;a href="https://github.com/pgsty/deb/tree/main/debbuild/openhalodb"&gt;github.com/pgsty/deb/debbuild/openhalodb&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="快速开始"&gt;快速开始&lt;/h2&gt;
&lt;p&gt;使用 Pigsty 的 &lt;a href="https://pigsty.cc/docs/setup/install"&gt;&lt;strong&gt;标准安装流程&lt;/strong&gt;&lt;/a&gt; 和 &lt;a href="https://pigsty.cc/docs/conf/mysql"&gt;&lt;code&gt;mysql&lt;/code&gt;&lt;/a&gt; 配置模板。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -fsSL https://repo.pigsty.io/get &lt;span class="p"&gt;|&lt;/span&gt; bash&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nb"&gt;cd&lt;/span&gt; ~/pigsty&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./configure -c mysql &lt;span class="c1"&gt;# 使用 MySQL（openHalo）配置模板&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./deploy.yml &lt;span class="c1"&gt;# 安装，生产部署请先在 pigsty.yml 中修改密码&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;对于生产部署，请确保在运行安装剧本之前修改 &lt;code&gt;pigsty.yml&lt;/code&gt; 配置文件中的密码参数。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="配置"&gt;配置&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;pg-meta&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;hosts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;10.10.10.10&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;{&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_seq: 1, pg_role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;primary }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;vars&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_cluster&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;pg-meta&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_users&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- {&lt;span class="nt"&gt;name: dbuser_meta ,password: DBUser.Meta ,pgbouncer: true ,roles: [dbrole_admin] ,comment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;pigsty admin user }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- {&lt;span class="nt"&gt;name: dbuser_view ,password: DBUser.Viewer ,pgbouncer: true ,roles: [dbrole_readonly] ,comment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;read-only viewer for meta database }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_databases&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- {&lt;span class="nt"&gt;name: postgres, extensions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;aux_mysql ]}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# mysql 兼容数据库&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- {&lt;span class="nt"&gt;name: meta ,baseline: cmdb.sql ,comment: pigsty meta database ,schemas&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="l"&gt;pigsty]}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_hba_rules&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- {&lt;span class="nt"&gt;user: dbuser_view , db: all ,addr: infra ,auth: pwd ,title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;allow grafana dashboard access cmdb from infra nodes&amp;#39;&lt;/span&gt;}&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;node_crontab&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;00 01 * * * postgres /pg/bin/pg-backup full&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 每天凌晨 1 点进行全量备份&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# OpenHalo 临时设置&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_mode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;mysql &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# HaloDB 的 MySQL 兼容模式&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_version&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;14&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 当前 HaloDB 兼容 PG 主版本 14&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_packages&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;openhalo, pgsql-common ] &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 安装 openHalo 而不是 PostgreSQL 原生内核&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;OpenHalo 提供了一个独有的扩展 &lt;code&gt;aux_mysql&lt;/code&gt;，它包含了 MySQL 兼容性所需的函数和类型。请确保在 &lt;code&gt;pg_databases&lt;/code&gt; 配置中为 &lt;code&gt;postgres&lt;/code&gt; 数据库启用此扩展，以获得完整的 MySQL 兼容功能。&lt;/p&gt;</description></item><item><title>Greenplum</title><link>https://pigsty.cc/docs/pgsql/kernel/greenplum/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/pgsql/kernel/greenplum/</guid><description>&lt;p&gt;Pigsty 支持部署 Greenplum 集群，及其衍生发行版 YMatrixDB，并提供了将现有 Greenplum 部署纳入 Pigsty 监控的能力。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="概览"&gt;概览&lt;/h2&gt;
&lt;p&gt;Greenplum / YMatrix 集群部署能力仅在专业版本/企业版本中提供，目前不对外开源。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="安装"&gt;安装&lt;/h2&gt;
&lt;p&gt;Pigsty 提供了 Greenplum 6 (@el7) 与 Greenplum 7 (@el8) 的安装包，开源版本用户可以自行安装配置。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# EL 7 Only (Greenplum6)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./node.yml -t node_install -e &lt;span class="s1"&gt;&amp;#39;{&amp;#34;node_repo_modules&amp;#34;:&amp;#34;pgsql&amp;#34;,&amp;#34;node_packages&amp;#34;:[&amp;#34;open-source-greenplum-db-6&amp;#34;]}&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# EL 8 Only (Greenplum7)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./node.yml -t node_install -e &lt;span class="s1"&gt;&amp;#39;{&amp;#34;node_repo_modules&amp;#34;:&amp;#34;pgsql&amp;#34;,&amp;#34;node_packages&amp;#34;:[&amp;#34;open-source-greenplum-db-7&amp;#34;]}&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="配置"&gt;配置&lt;/h2&gt;
&lt;p&gt;要定义 Greenplum 集群，需要用到 &lt;code&gt;pg_mode&lt;/code&gt; = &lt;code&gt;gpsql&lt;/code&gt;，并使用额外的身份参数 &lt;code&gt;pg_shard&lt;/code&gt; 与 &lt;code&gt;gp_role&lt;/code&gt;。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;#================================================================#&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# GPSQL Clusters #&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;#================================================================#&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;#----------------------------------#&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# cluster: mx-mdw (gp master)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;#----------------------------------#&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;mx-mdw&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;hosts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;10.10.10.10&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;{&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_seq: 1, pg_role: primary , nodename&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;mx-mdw-1 }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;vars&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;gp_role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;master &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# this cluster is used as greenplum master&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_shard&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;mx &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# pgsql sharding name &amp;amp; gpsql deployment name&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_cluster&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;mx-mdw &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# this master cluster name is mx-mdw&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_databases&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- {&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name: matrixmgr , extensions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;{&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;matrixdbts } ] }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- {&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;meta }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_users&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- {&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name: meta , password: DBUser.Meta , pgbouncer&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;}&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- {&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name: dbuser_monitor , password: DBUser.Monitor , roles: [ dbrole_readonly ], superuser&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;}&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pgbouncer_enabled&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# enable pgbouncer for greenplum master&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pgbouncer_exporter_enabled&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# enable pgbouncer_exporter for greenplum master&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_exporter_params&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;host=127.0.0.1&amp;amp;sslmode=disable&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# use 127.0.0.1 as local monitor host&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;#----------------------------------#&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# cluster: mx-sdw (gp master)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;#----------------------------------#&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;mx-sdw&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;hosts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;10.10.10.11&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;nodename&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;mx-sdw-1 &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# greenplum segment node&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_instances&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# greenplum segment instances&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;6000&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;{&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_cluster: mx-seg1, pg_seq: 1, pg_role: primary , pg_exporter_port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;9633&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;}&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;6001&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;{&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_cluster: mx-seg2, pg_seq: 2, pg_role: replica , pg_exporter_port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;9634&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;}&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;10.10.10.12&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;nodename&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;mx-sdw-2&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_instances&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;6000&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;{&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_cluster: mx-seg2, pg_seq: 1, pg_role: primary , pg_exporter_port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;9633&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;}&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;6001&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;{&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_cluster: mx-seg3, pg_seq: 2, pg_role: replica , pg_exporter_port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;9634&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;}&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;10.10.10.13&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;nodename&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;mx-sdw-3&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_instances&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;6000&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;{&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_cluster: mx-seg3, pg_seq: 1, pg_role: primary , pg_exporter_port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;9633&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;}&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;6001&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;{&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_cluster: mx-seg1, pg_seq: 2, pg_role: replica , pg_exporter_port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;9634&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;}&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;vars&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;gp_role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;segment &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# these are nodes for gp segments&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_shard&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;mx &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# pgsql sharding name &amp;amp; gpsql deployment name&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_cluster&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;mx-sdw &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# these segment clusters name is mx-sdw&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_preflight_skip&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# skip preflight check (since pg_seq &amp;amp; pg_role &amp;amp; pg_cluster not exists)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_exporter_config&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;pg_exporter_basic.yml &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# use basic config to avoid segment server crash&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_exporter_params&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;options=-c%20gp_role%3Dutility&amp;amp;sslmode=disable&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# use gp_role = utility to connect to segments&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;此外，PG Exporter 需要额外的连接参数，才能连接到 Greenplum Segment 实例上采集监控指标。&lt;/p&gt;</description></item><item><title>OrioleDB</title><link>https://pigsty.cc/docs/pgsql/kernel/orioledb/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/pgsql/kernel/orioledb/</guid><description>&lt;p&gt;&lt;a href="https://orioledb.com/"&gt;OrioleDB&lt;/a&gt; 是一个 PostgreSQL 存储引擎扩展，声称能够提供 4 倍 OLTP 性能，没有 xid 环绕和表膨胀问题，并具有&amp;quot;云原生&amp;quot;（数据存储在 S3）能力。&lt;/p&gt;
&lt;p&gt;OrioleDB 的当前 Pigsty 模板固定使用 PostgreSQL 17 兼容系，安装补丁版 PostgreSQL 内核与 &lt;code&gt;orioledb&lt;/code&gt; 扩展。&lt;/p&gt;
&lt;p&gt;您可以使用 Pigsty 将 OrioleDB 作为 RDS 运行。&lt;code&gt;oriole&lt;/code&gt; 包别名在 EL 平台映射到 &lt;code&gt;orioledb_17 oriolepg_17&lt;/code&gt;，在 Debian/Ubuntu 平台映射到 &lt;code&gt;oriolepg-17 oriolepg-17-orioledb&lt;/code&gt;。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="快速开始"&gt;快速开始&lt;/h2&gt;
&lt;p&gt;按照 Pigsty &lt;a href="https://pigsty.cc/docs/setup/install"&gt;&lt;strong&gt;标准安装&lt;/strong&gt;&lt;/a&gt; 流程，使用 &lt;a href="https://github.com/pgsty/pigsty/blob/main/conf/oriole.yml"&gt;&lt;code&gt;oriole&lt;/code&gt;&lt;/a&gt; 配置模板。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -fsSL https://repo.pigsty.io/get &lt;span class="p"&gt;|&lt;/span&gt; bash&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nb"&gt;cd&lt;/span&gt; ~/pigsty&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./configure -c oriole &lt;span class="c1"&gt;# 使用 OrioleDB 配置模板&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./deploy.yml &lt;span class="c1"&gt;# 使用 OrioleDB 安装 Pigsty&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;对于生产部署，请确保在运行 &lt;code&gt;install&lt;/code&gt; 剧本之前修改 &lt;code&gt;pigsty.yml&lt;/code&gt; 配置中的密码参数。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="配置"&gt;配置&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;pg-meta&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;hosts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;10.10.10.10&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;{&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_seq: 1, pg_role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;primary }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;vars&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_cluster&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;pg-meta&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_users&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- {&lt;span class="nt"&gt;name: dbuser_meta ,password: DBUser.Meta ,pgbouncer: true ,roles: [dbrole_admin] ,comment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;pigsty admin user }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- {&lt;span class="nt"&gt;name: dbuser_view ,password: DBUser.Viewer ,pgbouncer: true ,roles: [dbrole_readonly] ,comment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;read-only viewer for meta database }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_databases&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- {&lt;span class="nt"&gt;name: meta ,baseline: cmdb.sql ,comment: pigsty meta database ,schemas: [pigsty], extensions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="l"&gt;orioledb]}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_hba_rules&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- {&lt;span class="nt"&gt;user: dbuser_view , db: all ,addr: infra ,auth: pwd ,title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;allow grafana dashboard access cmdb from infra nodes&amp;#39;&lt;/span&gt;}&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;node_crontab&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;00 01 * * * postgres /pg/bin/pg-backup full&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 每天凌晨 1 点进行全量备份&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# OrioleDB 临时设置&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_mode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;oriole &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# oriole 兼容模式&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_packages&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;oriole, pgsql-common ] &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 安装 OrioleDB 内核&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_libs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;orioledb, pg_stat_statements, auto_explain&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 加载 OrioleDB 扩展&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="使用"&gt;使用&lt;/h2&gt;
&lt;p&gt;要使用 OrioleDB，请安装 &lt;code&gt;oriole&lt;/code&gt; 包别名；Pigsty 会按平台解析为对应的 PG17 内核与扩展包。&lt;/p&gt;</description></item><item><title>Cloudberry</title><link>https://pigsty.cc/docs/pgsql/kernel/cloudberry/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/pgsql/kernel/cloudberry/</guid><description>&lt;p&gt;&lt;a href="https://cloudberry.apache.org/"&gt;Cloudberry&lt;/a&gt; 是一个源自 Greenplum 社区的开源 MPP 数据仓库内核，适合大规模并行分析场景。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="概览"&gt;概览&lt;/h2&gt;
&lt;p&gt;在 Pigsty 中，Cloudberry 沿用 &lt;code&gt;gpsql&lt;/code&gt; 模式接入，与 Greenplum / MatrixDB 共享一套身份模型、监控逻辑与目录约定。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;内核包名：&lt;code&gt;cloudberry&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;模式标识：&lt;code&gt;pg_mode: gpsql&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;角色标识：&lt;code&gt;gp_role: master | segment&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;当前仓库版本：&lt;code&gt;Cloudberry 2.0.0&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;当前版本字符串：&lt;code&gt;PostgreSQL 14.4 (Apache Cloudberry 2.0.0-incubating build 1)&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;默认二进制目录：&lt;code&gt;/usr/local/cloudberry&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;需要特别说明的是，Pigsty 当前对 Cloudberry 的支持重点在于：软件包交付、节点管理、监控纳管、访问控制与配置编排。
对于 MPP 集群初始化、扩容、重平衡和上游专有运维动作，仍建议使用 Cloudberry 官方工具链完成。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;根据当前发布说明，Cloudberry 目前在 Pigsty 仓库中为 &lt;strong&gt;仅 RPM 构建&lt;/strong&gt; 的内核。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="安装"&gt;安装&lt;/h2&gt;
&lt;p&gt;当前版本暂未提供独立的 &lt;code&gt;cloudberry&lt;/code&gt; 一键模板。更常见的使用方式是：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;将目标节点纳入 Pigsty 管理。&lt;/li&gt;
&lt;li&gt;安装 &lt;code&gt;cloudberry&lt;/code&gt; 内核包。&lt;/li&gt;
&lt;li&gt;通过 &lt;code&gt;gpsql&lt;/code&gt; 模式描述 coordinator / segment 拓扑。&lt;/li&gt;
&lt;li&gt;使用 Pigsty 统一接入监控、账号、访问控制与备份体系。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;如果只是为节点安装内核包，可直接执行：&lt;/p&gt;</description></item><item><title>Neon</title><link>https://pigsty.cc/docs/pgsql/kernel/neon/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/pgsql/kernel/neon/</guid><description>&lt;p&gt;&lt;a href="https://github.com/neondatabase/neon"&gt;&lt;strong&gt;Neon&lt;/strong&gt;&lt;/a&gt; 采用了存储与计算分离架构，提供了丝滑的自动扩缩容，Scale to Zero，以及数据库版本分叉等独家能力。&lt;/p&gt;
&lt;p&gt;Neon 官网：https://neon.tech/&lt;/p&gt;
&lt;p&gt;Neon 编译后的二进制产物过于庞大，目前不对开源版用户提供，目前处于试点阶段，有需求请联系 Pigsty 销售。&lt;/p&gt;</description></item><item><title>AgensGraph</title><link>https://pigsty.cc/docs/pgsql/kernel/agensgraph/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/pgsql/kernel/agensgraph/</guid><description>&lt;p&gt;&lt;a href="https://github.com/skaiworldwide-oss/agensgraph"&gt;AgensGraph&lt;/a&gt; 是基于 PostgreSQL 的属性图数据库内核，支持 openCypher 查询，并允许 Cypher 与 SQL 混合使用。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="概览"&gt;概览&lt;/h2&gt;
&lt;p&gt;Pigsty 通过 &lt;code&gt;pg_mode: agens&lt;/code&gt; 接入 AgensGraph，并保留标准 PostgreSQL 集群的大部分运维体验。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;内核包：&lt;code&gt;agensgraph&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;模式标识：&lt;code&gt;pg_mode: agens&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;当前模板版本：&lt;code&gt;AgensGraph 2.16&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;当前版本字符串：&lt;code&gt;PostgreSQL 16.9 (AgensGraph 2.16)&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;当前内置模板：&lt;code&gt;agens&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;适用场景：关系数据之上叠加图关系分析、路径查询、知识图谱、风控关联&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;对客户端来说，AgensGraph 仍然暴露 PostgreSQL 线缆协议，常规 PG 客户端、驱动与连接池都可以直接接入。
和原生 PostgreSQL 的主要区别不在“如何连接”，而在“库内多了图模型对象、Cypher 语法与 &lt;code&gt;agtype&lt;/code&gt; 数据类型”。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="安装"&gt;安装&lt;/h2&gt;
&lt;p&gt;使用 Pigsty 内置模板：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./configure -c agens
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./deploy.yml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;agens&lt;/code&gt; 模板会自动启用 &lt;code&gt;pg_mode: agens&lt;/code&gt; 并安装 &lt;code&gt;agensgraph&lt;/code&gt; 内核包。部署完成后可直接核对内核版本：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;psql -d meta -c &lt;span class="s2"&gt;&amp;#34;SELECT version();&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="配置"&gt;配置&lt;/h2&gt;
&lt;p&gt;AgensGraph 在 Pigsty 中的关键配置如下：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;all&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;vars&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;node_repo_modules&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;node,infra,pgsql&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_version&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;16&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;children&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg-meta&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;vars&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_mode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;agens&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_packages&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;agensgraph, pgsql-common ]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;AgensGraph 不需要像 pgEdge / Babelfish 那样额外预加载一组专有库，因此大多数 Pigsty 的标准 HA、备份、监控、访问控制与 IaC 用法都保持不变。
如果你的负载以图遍历和复杂路径查询为主，通常应重点关注 &lt;code&gt;work_mem&lt;/code&gt;、&lt;code&gt;shared_buffers&lt;/code&gt; 与代价参数，而不是简单沿用默认 OLTP 习惯。&lt;/p&gt;</description></item><item><title>pgEdge</title><link>https://pigsty.cc/docs/pgsql/kernel/pgedge/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/pgsql/kernel/pgedge/</guid><description>&lt;p&gt;&lt;a href="https://www.pgedge.com/"&gt;&lt;strong&gt;pgEdge&lt;/strong&gt;&lt;/a&gt; 是面向边缘场景的分布式 PostgreSQL 发行版，核心能力建立在 &lt;a href="https://docs.pgedge.com/spock-v5"&gt;&lt;strong&gt;Spock&lt;/strong&gt;&lt;/a&gt; 多主逻辑复制之上。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="概览"&gt;概览&lt;/h2&gt;
&lt;p&gt;Pigsty 通过 &lt;code&gt;pg_mode: pgedge&lt;/code&gt; 接入 pgEdge，并用标准 PG 集群编排流程交付其核心组件：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;pgedge&lt;/code&gt;：PG18 兼容内核&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pigsty.cc/ext/e/spock/"&gt;&lt;code&gt;spock&lt;/code&gt;&lt;/a&gt;：多主（active-active）逻辑复制&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pigsty.cc/ext/e/snowflake/"&gt;&lt;code&gt;snowflake&lt;/code&gt;&lt;/a&gt;：分布式唯一序列&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pigsty.cc/ext/e/lolor/"&gt;&lt;code&gt;lolor&lt;/code&gt;&lt;/a&gt;：大对象逻辑复制兼容层&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;当前 Pigsty 仓库中，pgEdge PG18 对应包为 &lt;code&gt;pgedge-18 18.3&lt;/code&gt;，并同时提供 &lt;code&gt;spock 5.0.6&lt;/code&gt;、&lt;code&gt;snowflake 2.4&lt;/code&gt; 与 &lt;code&gt;lolor 1.2.2&lt;/code&gt;。PG17 包仍可作为过渡版本保留，但 &lt;code&gt;pgedge&lt;/code&gt; 配置模板已经默认使用 &lt;code&gt;pg_version: 18&lt;/code&gt;。
对客户端来说，pgEdge 仍然是 PostgreSQL 线缆协议，&lt;code&gt;psql&lt;/code&gt;、JDBC/ODBC、DBeaver 等工具都可以直接接入。&lt;/p&gt;
&lt;p&gt;Pigsty 提供的是“先验证单节点内核，再扩展到多节点复制拓扑”的交付路径：
模板会开箱即用地完成内核、扩展、监控、备份与访问控制，但真正的多主拓扑编排仍需要你根据业务一致性和冲突策略来设计。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="安装"&gt;安装&lt;/h2&gt;
&lt;p&gt;使用 Pigsty 内置模板：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./configure -c pgedge
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./deploy.yml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;模板默认在 &lt;code&gt;meta&lt;/code&gt; 数据库预装 &lt;code&gt;spock&lt;/code&gt;、&lt;code&gt;snowflake&lt;/code&gt;、&lt;code&gt;lolor&lt;/code&gt;。部署完成后可用以下命令核对版本和扩展：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;psql -d meta -c &lt;span class="s2"&gt;&amp;#34;SELECT version();&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;psql -d meta -c &lt;span class="s2"&gt;&amp;#34;SELECT extname, extversion FROM pg_extension WHERE extname IN (&amp;#39;spock&amp;#39;,&amp;#39;snowflake&amp;#39;,&amp;#39;lolor&amp;#39;) ORDER BY 1;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;blockquote&gt;
&lt;p&gt;模板与完整参数见：&lt;a href="https://pigsty.cc/docs/conf/pgedge/"&gt;&lt;code&gt;pgedge&lt;/code&gt; 配置模板&lt;/a&gt;。&lt;/p&gt;</description></item><item><title>场景模板</title><link>https://pigsty.cc/docs/pgsql/template/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/pgsql/template/</guid><description>&lt;p&gt;Pigsty 提供四种预置的 Patroni/PostgreSQL 配置模板，针对不同的使用场景进行了参数优化：&lt;/p&gt;
&lt;table class="full-width"&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th style="text-align: left"&gt;模板&lt;/th&gt;
 &lt;th style="text-align: left"&gt;CPU 核心&lt;/th&gt;
 &lt;th style="text-align: left"&gt;适用场景&lt;/th&gt;
 &lt;th style="text-align: left"&gt;特点&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://pigsty.cc/docs/pgsql/template/oltp"&gt;&lt;strong&gt;&lt;code&gt;/docs/pgsql/template/oltp.yml&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;4-128C&lt;/td&gt;
 &lt;td style="text-align: left"&gt;OLTP 事务处理&lt;/td&gt;
 &lt;td style="text-align: left"&gt;高并发、低延迟、高吞吐&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://pigsty.cc/docs/pgsql/template/olap"&gt;&lt;strong&gt;&lt;code&gt;/docs/pgsql/template/olap.yml&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;4-128C&lt;/td&gt;
 &lt;td style="text-align: left"&gt;OLAP 分析处理&lt;/td&gt;
 &lt;td style="text-align: left"&gt;大查询、高并行、长事务&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://pigsty.cc/docs/pgsql/template/crit"&gt;&lt;strong&gt;&lt;code&gt;/docs/pgsql/template/crit.yml&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;4-128C&lt;/td&gt;
 &lt;td style="text-align: left"&gt;核心/金融业务&lt;/td&gt;
 &lt;td style="text-align: left"&gt;数据安全、审计合规、零丢失&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://pigsty.cc/docs/pgsql/template/tiny"&gt;&lt;strong&gt;&lt;code&gt;/docs/pgsql/template/tiny.yml&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;1-3C&lt;/td&gt;
 &lt;td style="text-align: left"&gt;微型实例&lt;/td&gt;
 &lt;td style="text-align: left"&gt;资源受限、低配环境&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;您可以通过 &lt;a href="https://pigsty.cc/docs/pgsql/param#pg_conf"&gt;&lt;strong&gt;&lt;code&gt;pg_conf&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt; 参数来选择使用哪个配置模板，默认为 &lt;a href="https://pigsty.cc/docs/pgsql/template/oltp"&gt;&lt;strong&gt;&lt;code&gt;/docs/pgsql/template/oltp.yml&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt;。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;通常，数据库调优模板 &lt;a href="https://pigsty.cc/docs/pgsql/param#pg_conf"&gt;&lt;strong&gt;&lt;code&gt;pg_conf&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt; 应当与机器调优模板 &lt;a href="https://pigsty.cc/docs/node/param#node_tune"&gt;&lt;strong&gt;&lt;code&gt;node_tune&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt; 配套使用。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="使用模板"&gt;使用模板&lt;/h2&gt;
&lt;p&gt;要使用特定的配置模板，只需在集群定义中设置 &lt;a href="https://pigsty.cc/docs/pgsql/param#pg_conf"&gt;&lt;strong&gt;&lt;code&gt;pg_conf&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt; 参数。
建议同时设置 &lt;a href="https://pigsty.cc/docs/node/param#node_tune"&gt;&lt;strong&gt;&lt;code&gt;node_tune&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt; 参数，使操作系统级别的调优与数据库调优保持一致：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;pg-test&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;hosts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;10.10.10.11&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;{&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_seq: 1, pg_role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;primary }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;10.10.10.12&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;{&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_seq: 2, pg_role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;replica }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;vars&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_cluster&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;pg-test&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_conf&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;oltp.yml &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# PostgreSQL 配置模板（默认值）&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;node_tune&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;oltp &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 操作系统调优模板（默认值）&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;对于核心金融业务场景，您可以使用 &lt;a href="https://pigsty.cc/docs/pgsql/template/crit"&gt;&lt;strong&gt;&lt;code&gt;/docs/pgsql/template/crit.yml&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt; 模板：&lt;/p&gt;</description></item><item><title>内核分支</title><link>https://pigsty.cc/docs/pgsql/kernel/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/pgsql/kernel/</guid><description>&lt;p&gt;在 Pigsty 中，您可以使用不同风味的 PostgreSQL 分支或兼容栈替换原生 PG 内核，获得 SQL Server / MySQL / Oracle 兼容、多主复制、图查询、MPP 数仓、透明加密等能力。&lt;/p&gt;
&lt;p&gt;当前口径为 Pigsty v4.3.0：默认 PostgreSQL 大版本是 &lt;strong&gt;18&lt;/strong&gt;，原生 PostgreSQL 支持 &lt;strong&gt;14-18&lt;/strong&gt;，扩展目录收录 &lt;strong&gt;510&lt;/strong&gt; 个扩展。原生 PostgreSQL 是基准入口；兼容内核或生态栈按 &lt;strong&gt;12&lt;/strong&gt; 类口径组织。不同内核的交付深度并不相同，生产使用前请按目标版本单独验证。&lt;/p&gt;
&lt;table class="full-width"&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th style="text-align: left"&gt;内核 / 生态栈&lt;/th&gt;
 &lt;th style="text-align: left"&gt;关键特性&lt;/th&gt;
 &lt;th style="text-align: left"&gt;Pigsty 兼容口径&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://pigsty.cc/docs/pgsql/kernel/postgres"&gt;&lt;strong&gt;PostgreSQL&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;原生内核，扩展齐备&lt;/td&gt;
 &lt;td style="text-align: left"&gt;PG14-18，默认 PG18，510 扩展&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://pigsty.cc/docs/pgsql/kernel/supabase"&gt;&lt;strong&gt;Supabase&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;后端即服务&lt;/td&gt;
 &lt;td style="text-align: left"&gt;基于 PostgreSQL，当前模板默认 PG18，Supabase 扩展包覆盖 PG15-18&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://pigsty.cc/docs/pgsql/kernel/citus"&gt;&lt;strong&gt;Citus&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;水平分片，多租户&lt;/td&gt;
 &lt;td style="text-align: left"&gt;Citus 扩展随 PG14-18 包别名交付&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://pigsty.cc/docs/pgsql/kernel/babelfish"&gt;&lt;strong&gt;Babelfish&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;SQL Server 兼容&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;pg_mode: mssql&lt;/code&gt;，PG17&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://pigsty.cc/docs/pgsql/kernel/ivorysql"&gt;&lt;strong&gt;IvorySQL&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;Oracle 兼容&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;pg_mode: ivory&lt;/code&gt;，IvorySQL 5 / PG18&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://pigsty.cc/docs/pgsql/kernel/openhalo"&gt;&lt;strong&gt;OpenHalo&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;MySQL 兼容&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;pg_mode: mysql&lt;/code&gt;，PG14&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://pigsty.cc/docs/pgsql/kernel/percona"&gt;&lt;strong&gt;Percona&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;透明数据加密&lt;/td&gt;
 &lt;td style="text-align: left"&gt;Percona PostgreSQL 18 / &lt;code&gt;pg_tde&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://pigsty.cc/docs/ferret"&gt;&lt;strong&gt;FerretDB&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;MongoDB 兼容&lt;/td&gt;
 &lt;td style="text-align: left"&gt;DocumentDB/FerretDB 栈，当前演示模板使用 PG18&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://pigsty.cc/docs/pgsql/kernel/orioledb"&gt;&lt;strong&gt;OrioleDB&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;OLTP 存储引擎&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;pg_mode: oriole&lt;/code&gt;，PG17&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://pigsty.cc/docs/pgsql/kernel/polardb"&gt;&lt;strong&gt;PolarDB&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;Aurora 风格共享存储&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;pg_mode: polar&lt;/code&gt;，PG17&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://pigsty.cc/docs/pgsql/kernel/cloudberry"&gt;&lt;strong&gt;Cloudberry&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;开源 MPP 数仓&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;pg_mode: gpsql&lt;/code&gt;，Cloudberry 2.1 / PG14.4&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://pigsty.cc/docs/pgsql/kernel/agensgraph"&gt;&lt;strong&gt;AgensGraph&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;属性图 + Cypher&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;pg_mode: agens&lt;/code&gt;，PG16&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://pigsty.cc/docs/pgsql/kernel/pgedge"&gt;&lt;strong&gt;pgEdge&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;Spock 多主复制&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;pg_mode: pgedge&lt;/code&gt;，PG18&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;img src="https://pigsty.cc/img/pigsty/pg-forks.webp" alt=""&gt;&lt;/p&gt;</description></item><item><title>快速开始</title><link>https://pigsty.cc/docs/pgsql/ext/start/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/pgsql/ext/start/</guid><description>&lt;p&gt;在 Pigsty 中使用扩展需要四个步骤：&lt;strong&gt;下载&lt;/strong&gt;、&lt;strong&gt;安装&lt;/strong&gt;、&lt;strong&gt;配置&lt;/strong&gt;、&lt;strong&gt;启用&lt;/strong&gt;。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;下载&lt;/strong&gt;：将扩展软件包下载到本地仓库（默认本地仓库只保证基础内核与 &lt;code&gt;pgsql-main&lt;/code&gt; 包集）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;安装&lt;/strong&gt;：在集群节点上安装扩展软件包&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;配置&lt;/strong&gt;：部分扩展需要预加载或配置参数&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;启用&lt;/strong&gt;：在数据库中执行 &lt;code&gt;CREATE EXTENSION&lt;/code&gt; 创建扩展&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2 id="声明式配置"&gt;声明式配置&lt;/h2&gt;
&lt;p&gt;在 Pigsty 配置清单中声明扩展，集群初始化时自动完成安装与启用：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;pg-meta&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;hosts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;{&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;10.10.10.10&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;{&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_seq: 1, pg_role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;primary } }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;vars&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_cluster&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;pg-meta&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_databases&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;meta&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;extensions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;postgis, timescaledb, vector ] &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 在数据库中启用扩展&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_libs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;timescaledb, pg_stat_statements, auto_explain&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 预加载扩展库&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_extensions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;postgis, timescaledb, pgvector ] &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 安装扩展软件包&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;执行 &lt;code&gt;./pgsql.yml&lt;/code&gt; 初始化集群后，&lt;code&gt;postgis&lt;/code&gt;、&lt;code&gt;timescaledb&lt;/code&gt;、&lt;code&gt;vector&lt;/code&gt; 三个扩展即在 &lt;code&gt;meta&lt;/code&gt; 数据库中可用。&lt;/p&gt;</description></item><item><title>扩展简介</title><link>https://pigsty.cc/docs/pgsql/ext/intro/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/pgsql/ext/intro/</guid><description>&lt;p&gt;扩展是 PostgreSQL 的灵魂所在。Pigsty 收录了 510 个预编译、开箱即用的扩展插件，充分释放 PostgreSQL 的潜能。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="扩展是什么"&gt;扩展是什么&lt;/h2&gt;
&lt;p&gt;PostgreSQL 扩展（Extension）是一种模块化机制，允许在不修改核心代码的情况下增强数据库功能。
一个扩展通常包含三部分：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;控制文件&lt;/strong&gt;（&lt;code&gt;.control&lt;/code&gt;）：必需，包含扩展元数据&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SQL 脚本&lt;/strong&gt;（&lt;code&gt;.sql&lt;/code&gt;）：可选，定义函数、类型、操作符等数据库对象&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;动态库&lt;/strong&gt;（&lt;code&gt;.so&lt;/code&gt;）：可选，提供 C 语言实现的高性能功能&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;扩展可以为 PostgreSQL 添加：新数据类型、索引方法、函数与操作符、外部数据访问、过程语言、性能监控、安全审计等能力。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="核心扩展"&gt;核心扩展&lt;/h2&gt;
&lt;p&gt;Pigsty 收录的扩展中，以下是最具代表性的：&lt;/p&gt;
&lt;table class="full-width"&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th style="text-align: left"&gt;扩展&lt;/th&gt;
 &lt;th style="text-align: left"&gt;说明&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://postgis.net/"&gt;&lt;strong&gt;PostGIS&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;地理空间数据类型与索引，GIS 事实标准&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://www.timescale.com/"&gt;&lt;strong&gt;TimescaleDB&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;时序数据库，支持持续聚合、列存储、自动压缩&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://github.com/pgvector/pgvector"&gt;&lt;strong&gt;PGVector&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;向量数据类型与 HNSW/IVFFlat 索引，AI 应用必备&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://www.citusdata.com/"&gt;&lt;strong&gt;Citus&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;分布式数据库，水平分片扩展能力&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://github.com/duckdb/pg_duckdb"&gt;&lt;strong&gt;pg_duckdb&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;嵌入 DuckDB 分析引擎，OLAP 加速&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://github.com/paradedb/paradedb/tree/dev/pg_search"&gt;&lt;strong&gt;pg_search&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;ParadeDB 搜索扩展，提供 BM25 与全文检索能力&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://age.apache.org/"&gt;&lt;strong&gt;Apache AGE&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;图数据库，支持 OpenCypher 查询语言&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://github.com/supabase/pg_graphql"&gt;&lt;strong&gt;pg_graphql&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;原生 GraphQL 查询支持&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;绝大多数扩展可以并存甚至组合使用，产生 1+1 远大于 2 的协同效应。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="扩展类别"&gt;扩展类别&lt;/h2&gt;
&lt;p&gt;Pigsty 将扩展划分为 16 个类别：&lt;/p&gt;
&lt;table class="full-width"&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th style="text-align: center"&gt;类别&lt;/th&gt;
 &lt;th style="text-align: left"&gt;别名&lt;/th&gt;
 &lt;th style="text-align: left"&gt;说明&lt;/th&gt;
 &lt;th style="text-align: left"&gt;典型扩展&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td style="text-align: center"&gt;时序&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;time&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;时序数据处理&lt;/td&gt;
 &lt;td style="text-align: left"&gt;timescaledb, pg_cron, periods&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: center"&gt;地理&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;gis&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;地理空间数据&lt;/td&gt;
 &lt;td style="text-align: left"&gt;postgis, h3, pgrouting&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: center"&gt;向量&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;rag&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;向量检索与 AI&lt;/td&gt;
 &lt;td style="text-align: left"&gt;pgvector, vchord, pg_vectorize&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: center"&gt;搜索&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;fts&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;全文检索&lt;/td&gt;
 &lt;td style="text-align: left"&gt;pgroonga, zhparser, pg_bigm&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: center"&gt;分析&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;olap&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;OLAP 与分析&lt;/td&gt;
 &lt;td style="text-align: left"&gt;pg_duckdb, pg_mooncake, citus&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: center"&gt;特性&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;feat&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;功能增强&lt;/td&gt;
 &lt;td style="text-align: left"&gt;age, pg_graphql, hll, rum&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: center"&gt;语言&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;lang&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;过程语言&lt;/td&gt;
 &lt;td style="text-align: left"&gt;plpython3u, pljava, plv8&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: center"&gt;类型&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;type&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;数据类型&lt;/td&gt;
 &lt;td style="text-align: left"&gt;hstore, ltree, ip4r&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: center"&gt;工具&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;util&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;实用工具&lt;/td&gt;
 &lt;td style="text-align: left"&gt;http, pg_net, pgjwt&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: center"&gt;函数&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;func&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;函数库&lt;/td&gt;
 &lt;td style="text-align: left"&gt;pg_uuidv7, topn, tdigest&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: center"&gt;管理&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;admin&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;运维管理&lt;/td&gt;
 &lt;td style="text-align: left"&gt;pg_repack, pg_squeeze, pgagent&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: center"&gt;统计&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;stat&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;监控统计&lt;/td&gt;
 &lt;td style="text-align: left"&gt;pg_stat_statements, pg_qualstats, auto_explain&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: center"&gt;安全&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;sec&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;安全审计&lt;/td&gt;
 &lt;td style="text-align: left"&gt;pgaudit, pgsodium, pg_tde&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: center"&gt;外联&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;fdw&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;外部数据访问&lt;/td&gt;
 &lt;td style="text-align: left"&gt;postgres_fdw, mysql_fdw, oracle_fdw&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: center"&gt;兼容&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;sim&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;数据库兼容&lt;/td&gt;
 &lt;td style="text-align: left"&gt;orafce, babelfish&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: center"&gt;同步&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;etl&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;数据同步&lt;/td&gt;
 &lt;td style="text-align: left"&gt;pglogical, wal2json, decoderbufs&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;使用类别别名可以批量安装整个类别的扩展，例如 &lt;code&gt;pg_extensions: [ pgsql-gis, pgsql-rag ]&lt;/code&gt;。&lt;/p&gt;</description></item><item><title>软件包</title><link>https://pigsty.cc/docs/pgsql/ext/pkg/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/pgsql/ext/pkg/</guid><description>&lt;p&gt;Pigsty 使用&lt;strong&gt;包别名&lt;/strong&gt;机制简化扩展的安装与管理。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="包别名机制"&gt;包别名机制&lt;/h2&gt;
&lt;p&gt;管理扩展涉及多个层面的名称映射：&lt;/p&gt;
&lt;table class="full-width"&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th style="text-align: left"&gt;层面&lt;/th&gt;
 &lt;th style="text-align: left"&gt;示例 &lt;code&gt;pgvector&lt;/code&gt;&lt;/th&gt;
 &lt;th style="text-align: left"&gt;示例 &lt;code&gt;postgis&lt;/code&gt;&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;扩展名&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;vector&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;postgis&lt;/code&gt;, &lt;code&gt;postgis_topology&lt;/code&gt;, &amp;hellip;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;包别名&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;pgvector&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;postgis&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;RPM 包名&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;pgvector_18&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;postgis36_18*&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;DEB 包名&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;postgresql-18-pgvector&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;postgresql-18-postgis-3*&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Pigsty 提供&lt;strong&gt;包别名&lt;/strong&gt;抽象层，让用户无需关心具体的 RPM/DEB 包名：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;pg_extensions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;pgvector, postgis, timescaledb ] &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 使用包别名&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Pigsty 会根据操作系统和 PostgreSQL 版本自动翻译为正确的包名。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;注意：&lt;code&gt;CREATE EXTENSION&lt;/code&gt; 时使用的是&lt;strong&gt;扩展名&lt;/strong&gt;（如 &lt;code&gt;vector&lt;/code&gt;），而非包别名（&lt;code&gt;pgvector&lt;/code&gt;）。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="类别别名"&gt;类别别名&lt;/h2&gt;
&lt;p&gt;所有扩展被划分为 16 个类别，可使用类别别名批量安装：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# 使用通用类别别名（自动适配当前 PG 版本）&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;pg_extensions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;pgsql-gis, pgsql-rag, pgsql-fts ]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# 或使用版本特定的类别别名&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;pg_extensions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;pg18-gis, pg18-rag, pg18-fts ]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;除 &lt;code&gt;olap&lt;/code&gt; 类别外，所有类别的扩展都可以同时安装。&lt;code&gt;olap&lt;/code&gt; 类别中存在互斥：&lt;code&gt;pg_duckdb&lt;/code&gt; 与 &lt;code&gt;pg_mooncake&lt;/code&gt; 冲突。&lt;/p&gt;</description></item><item><title>下载扩展</title><link>https://pigsty.cc/docs/pgsql/ext/download/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/pgsql/ext/download/</guid><description>&lt;p&gt;在安装扩展前，需要确保扩展软件包已下载到本地仓库或可从上游获取。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="默认行为"&gt;默认行为&lt;/h2&gt;
&lt;p&gt;Pigsty 默认会把基础 PostgreSQL 18 内核包下载到本地软件仓库。默认额外下载集为 &lt;code&gt;repo_extra_packages_default: [ pgsql-main ]&lt;/code&gt;，包含 PostgreSQL 内核、客户端、过程语言，以及 &lt;code&gt;pg_repack&lt;/code&gt;、&lt;code&gt;wal2json&lt;/code&gt;、&lt;code&gt;pgvector&lt;/code&gt; 等基础扩展包。&lt;/p&gt;
&lt;p&gt;如果需要 510 个扩展目录中的其他扩展，请显式加入 &lt;a href="https://pigsty.cc/docs/infra/param#repo_extra_packages"&gt;&lt;code&gt;repo_extra_packages&lt;/code&gt;&lt;/a&gt;；Pigsty 不会在默认安装时把全部扩展都下载到本地。&lt;/p&gt;
&lt;p&gt;使用本地仓库的优势：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;加速安装，避免重复下载&lt;/li&gt;
&lt;li&gt;减少网络流量消耗&lt;/li&gt;
&lt;li&gt;提高交付可靠性&lt;/li&gt;
&lt;li&gt;确保版本一致性&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="下载新扩展"&gt;下载新扩展&lt;/h2&gt;
&lt;p&gt;要下载额外的扩展，将其添加到 &lt;a href="https://pigsty.cc/docs/infra/param#repo_extra_packages"&gt;&lt;code&gt;repo_extra_packages&lt;/code&gt;&lt;/a&gt; 并重建仓库：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;all&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;vars&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;repo_extra_packages&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;pgvector, postgis, timescaledb, pg_duckdb ]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 重新下载软件包到本地仓库&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./infra.yml -t repo_build
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 刷新所有节点的软件源缓存&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./node.yml -t node_repo
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="使用上游仓库"&gt;使用上游仓库&lt;/h2&gt;
&lt;p&gt;也可以直接从互联网上游仓库安装，无需预先下载：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 在节点上添加上游软件源&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./node.yml -t node_repo -e &lt;span class="nv"&gt;node_repo_modules&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;node,pgsql
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这种方式适合：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;快速测试最新版本&lt;/li&gt;
&lt;li&gt;安装冷门扩展&lt;/li&gt;
&lt;li&gt;网络条件良好的环境&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;但可能面临：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;网络不稳定影响安装&lt;/li&gt;
&lt;li&gt;版本不一致风险&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="扩展来源"&gt;扩展来源&lt;/h2&gt;
&lt;p&gt;扩展软件包来自两个主要源：&lt;/p&gt;
&lt;table class="full-width"&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th style="text-align: left"&gt;仓库&lt;/th&gt;
 &lt;th style="text-align: left"&gt;说明&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;strong&gt;PGDG&lt;/strong&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;PostgreSQL 官方仓库，提供核心扩展&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;strong&gt;Pigsty&lt;/strong&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;Pigsty 补充仓库，提供额外扩展&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Pigsty 仓库只收录 PGDG 仓库中不存在的扩展。一旦某扩展进入 PGDG 仓库，Pigsty 仓库会移除或与其保持一致。&lt;/p&gt;</description></item><item><title>安装扩展</title><link>https://pigsty.cc/docs/pgsql/ext/install/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/pgsql/ext/install/</guid><description>&lt;p&gt;Pigsty 使用操作系统的包管理器（yum/apt）安装扩展软件包。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="相关参数"&gt;相关参数&lt;/h2&gt;
&lt;p&gt;两个参数用于指定要安装的扩展：&lt;/p&gt;
&lt;table class="full-width"&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th style="text-align: left"&gt;参数&lt;/th&gt;
 &lt;th style="text-align: left"&gt;用途&lt;/th&gt;
 &lt;th style="text-align: left"&gt;默认行为&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://pigsty.cc/docs/pgsql/param#pg_packages"&gt;&lt;code&gt;pg_packages&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;全局通用软件包&lt;/td&gt;
 &lt;td style="text-align: left"&gt;确保存在（不升级）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;a href="https://pigsty.cc/docs/pgsql/param#pg_extensions"&gt;&lt;code&gt;pg_extensions&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;集群特定扩展&lt;/td&gt;
 &lt;td style="text-align: left"&gt;安装最新版本&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;code&gt;pg_packages&lt;/code&gt; 通常用于指定所有集群都需要的基础组件（PostgreSQL 内核、Patroni、pgBouncer 等）和必选扩展。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;pg_extensions&lt;/code&gt; 用于指定特定集群需要的扩展。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;pg_packages&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 全局基础包&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;pgsql-main pgsql-common&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;pg_extensions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 集群扩展&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;postgis timescaledb pgvector&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="集群初始化时安装"&gt;集群初始化时安装&lt;/h2&gt;
&lt;p&gt;在集群配置中声明扩展，初始化时自动安装：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;pg-meta&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;hosts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;{&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;10.10.10.10&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;{&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_seq: 1, pg_role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;primary } }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;vars&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_cluster&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;pg-meta&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pg_extensions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;postgis, timescaledb, pgvector, pg_duckdb ]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;执行 &lt;code&gt;./pgsql.yml&lt;/code&gt; 初始化集群时，扩展会自动安装。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="已有集群安装扩展"&gt;已有集群安装扩展&lt;/h2&gt;
&lt;p&gt;对于已初始化的集群，有多种方式安装扩展：&lt;/p&gt;
&lt;h3 id="使用-pigsty-剧本"&gt;使用 Pigsty 剧本&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 修改配置后使用剧本安装&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./pgsql.yml -l pg-meta -t pg_extension
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 或直接在命令行指定扩展&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./pgsql.yml -l pg-meta -t pg_extension -e &lt;span class="s1"&gt;&amp;#39;{&amp;#34;pg_extensions&amp;#34;:[&amp;#34;pg_duckdb&amp;#34;]}&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="使用-pig-包管理器"&gt;使用 pig 包管理器&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 使用 pig 安装扩展&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pig install pg_duckdb
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 批量安装&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ansible pg-meta -b -a &lt;span class="s1"&gt;&amp;#39;pig install pg_duckdb pgvector&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="直接使用包管理器"&gt;直接使用包管理器&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# EL 系统&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo yum install -y pg_duckdb_18*
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Debian/Ubuntu 系统&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt install -y postgresql-18-pg-duckdb
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="使用包别名"&gt;使用包别名&lt;/h2&gt;
&lt;p&gt;Pigsty 支持使用标准化的包别名，自动翻译为对应 PG 版本的包名：&lt;/p&gt;</description></item><item><title>配置扩展</title><link>https://pigsty.cc/docs/pgsql/ext/config/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/pgsql/ext/config/</guid><description>&lt;p&gt;部分扩展需要预加载动态库或配置参数后才能使用，本节介绍如何配置扩展。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="预加载扩展"&gt;预加载扩展&lt;/h2&gt;
&lt;p&gt;大多数扩展安装后可直接使用 &lt;code&gt;CREATE EXTENSION&lt;/code&gt; 启用，但部分使用 PostgreSQL Hook 机制的扩展需要&lt;strong&gt;预加载&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;预加载通过 &lt;code&gt;shared_preload_libraries&lt;/code&gt; 参数指定，修改后需&lt;strong&gt;重启数据库&lt;/strong&gt;生效。&lt;/p&gt;
&lt;h3 id="需要预加载的扩展"&gt;需要预加载的扩展&lt;/h3&gt;
&lt;p&gt;以下是常见的需要预加载的扩展：&lt;/p&gt;
&lt;table class="full-width"&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th style="text-align: left"&gt;扩展&lt;/th&gt;
 &lt;th style="text-align: left"&gt;说明&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;timescaledb&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;时序数据库扩展，必须放在最前面&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;citus&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;分布式数据库扩展，必须放在最前面&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;pg_stat_statements&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;SQL 语句统计，Pigsty 默认启用&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;auto_explain&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;自动记录慢查询执行计划，Pigsty 默认启用&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;pg_cron&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;定时任务调度&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;pg_net&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;异步 HTTP 请求&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;pg_tle&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;可信语言扩展&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;pgaudit&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;审计日志&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;pg_stat_kcache&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;内核统计信息&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;pg_squeeze&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;在线表空间回收&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;pgml&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;PostgresML 机器学习&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;完整列表请参阅 &lt;a href="https://pigsty.cc/ext/list/"&gt;扩展目录&lt;/a&gt;（带 &lt;code&gt;LOAD&lt;/code&gt; 标记）。&lt;/p&gt;
&lt;h3 id="预加载顺序"&gt;预加载顺序&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;shared_preload_libraries&lt;/code&gt; 中扩展的加载顺序很重要：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;timescaledb&lt;/code&gt; 和 &lt;code&gt;citus&lt;/code&gt; 必须放在&lt;strong&gt;最前面&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;如果同时使用，&lt;code&gt;citus&lt;/code&gt; 应在 &lt;code&gt;timescaledb&lt;/code&gt; 之前&lt;/li&gt;
&lt;li&gt;统计类扩展应在 &lt;code&gt;pg_stat_statements&lt;/code&gt; 之后，以使用相同的 query_id&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;pg_libs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;citus, timescaledb, pg_stat_statements, auto_explain&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="集群初始化时配置"&gt;集群初始化时配置&lt;/h2&gt;
&lt;p&gt;在创建新集群时，使用 &lt;a href="https://pigsty.cc/docs/pgsql/param#pg_libs"&gt;&lt;code&gt;pg_libs&lt;/code&gt;&lt;/a&gt; 参数指定预加载的扩展：&lt;/p&gt;</description></item><item><title>启用扩展</title><link>https://pigsty.cc/docs/pgsql/ext/create/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/pgsql/ext/create/</guid><description>&lt;p&gt;安装扩展软件包后，需要在数据库中执行 &lt;code&gt;CREATE EXTENSION&lt;/code&gt; 才能使用扩展功能。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="查看可用扩展"&gt;查看可用扩展&lt;/h2&gt;
&lt;p&gt;安装扩展软件包后，可以查看可用的扩展：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;-- 查看所有可用扩展
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pg_available_extensions&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;-- 查看特定扩展
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pg_available_extensions&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;WHERE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;vector&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;-- 查看已启用的扩展
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pg_extension&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="创建扩展"&gt;创建扩展&lt;/h2&gt;
&lt;p&gt;使用 &lt;code&gt;CREATE EXTENSION&lt;/code&gt; 在数据库中启用扩展：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;-- 创建扩展
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;EXTENSION&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;vector&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;-- 创建扩展到指定 Schema
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;EXTENSION&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;postgis&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;SCHEMA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;public&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;-- 自动安装依赖的扩展
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;EXTENSION&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;postgis_topology&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;CASCADE&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;-- 如果不存在则创建
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;EXTENSION&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;IF&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NOT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;EXISTS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;vector&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;blockquote&gt;
&lt;p&gt;注意：&lt;code&gt;CREATE EXTENSION&lt;/code&gt; 使用的是&lt;strong&gt;扩展名&lt;/strong&gt;（如 &lt;code&gt;vector&lt;/code&gt;），而非包别名（&lt;code&gt;pgvector&lt;/code&gt;）。&lt;/p&gt;</description></item><item><title>更新扩展</title><link>https://pigsty.cc/docs/pgsql/ext/update/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/pgsql/ext/update/</guid><description>&lt;p&gt;扩展更新涉及两个层面：&lt;strong&gt;软件包更新&lt;/strong&gt;（操作系统层面）和&lt;strong&gt;扩展对象更新&lt;/strong&gt;（数据库层面）。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="更新软件包"&gt;更新软件包&lt;/h2&gt;
&lt;p&gt;使用包管理器更新扩展的软件包：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# EL 系统&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo yum update pgvector_18*
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Debian/Ubuntu 系统&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; sudo apt upgrade postgresql-18-pgvector
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;使用 Pigsty 批量更新：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 更新指定集群的扩展包&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./pgsql.yml -l pg-meta -t pg_extension -e &lt;span class="s1"&gt;&amp;#39;{&amp;#34;pg_extensions&amp;#34;:[&amp;#34;pgvector&amp;#34;]}&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 使用 pig 包管理器&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pig update pgvector
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="更新扩展对象"&gt;更新扩展对象&lt;/h2&gt;
&lt;p&gt;软件包更新后，数据库中的扩展对象可能需要同步更新。&lt;/p&gt;
&lt;h3 id="查看可更新的扩展"&gt;查看可更新的扩展&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;-- 查看已安装扩展及其版本
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;default_version&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;installed_version&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pg_available_extensions&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;WHERE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;installed_version&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;IS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NOT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;-- 查看可升级的扩展
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;installed_version&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;default_version&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pg_available_extensions&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;WHERE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;installed_version&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;IS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NOT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;AND&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;installed_version&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;default_version&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="执行扩展更新"&gt;执行扩展更新&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;-- 更新到最新版本
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;ALTER&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;EXTENSION&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pgvector&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;UPDATE&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;-- 更新到指定版本
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;ALTER&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;EXTENSION&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pgvector&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;UPDATE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;TO&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;0.8.0&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="查看更新路径"&gt;查看更新路径&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;-- 查看扩展的可用升级路径
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pg_extension_update_paths&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;pgvector&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="注意事项"&gt;注意事项&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;备份优先&lt;/strong&gt;：更新扩展前建议先备份数据库，特别是涉及数据类型变更的扩展。&lt;/p&gt;</description></item><item><title>移除扩展</title><link>https://pigsty.cc/docs/pgsql/ext/remove/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/pgsql/ext/remove/</guid><description>&lt;p&gt;移除扩展涉及两个层面：&lt;strong&gt;删除扩展对象&lt;/strong&gt;（数据库层面）和&lt;strong&gt;卸载软件包&lt;/strong&gt;（操作系统层面）。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="删除扩展对象"&gt;删除扩展对象&lt;/h2&gt;
&lt;p&gt;使用 &lt;code&gt;DROP EXTENSION&lt;/code&gt; 从数据库中删除扩展：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;-- 删除扩展
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;DROP&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;EXTENSION&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pgvector&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;-- 如果有依赖对象，需要级联删除
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;DROP&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;EXTENSION&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pgvector&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;CASCADE&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;警告&lt;/strong&gt;：&lt;code&gt;CASCADE&lt;/code&gt; 会删除所有依赖于该扩展的对象（表、函数、视图等），请谨慎使用。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id="查看扩展依赖"&gt;查看扩展依赖&lt;/h3&gt;
&lt;p&gt;删除前建议先检查依赖关系：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;-- 查看依赖于某扩展的对象
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;classid&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;regclass&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;objid&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;deptype&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pg_depend&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;WHERE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;refobjid&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;oid&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pg_extension&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;WHERE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;extname&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;pgvector&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;-- 查看使用了扩展类型的表
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;relname&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;AS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;table_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;attname&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;AS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;column_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;typname&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;AS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;type_name&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pg_attribute&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;JOIN&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pg_class&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;c&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;ON&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;attrelid&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;oid&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;JOIN&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pg_type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;ON&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;atttypid&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;oid&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;WHERE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;typname&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;vector&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="移除预加载"&gt;移除预加载&lt;/h2&gt;
&lt;p&gt;如果扩展在 &lt;code&gt;shared_preload_libraries&lt;/code&gt; 中，删除后需要从预加载列表移除：&lt;/p&gt;</description></item><item><title>常见问题</title><link>https://pigsty.cc/docs/pgsql/faq/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/pgsql/faq/</guid><description>&lt;hr&gt;
&lt;h2 id="我当前执行安装的用户为何不能使用-pg-管理别名"&gt;我当前执行安装的用户为何不能使用 &lt;code&gt;pg&lt;/code&gt; 管理别名？&lt;/h2&gt;
&lt;p&gt;从 Pigsty v4.0 开始，使用 &lt;code&gt;pg&lt;/code&gt; 管理别名管理全局的 Patroni / PostgreSQL 集群的权限被收紧到了管理节点上的管理员分组（&lt;code&gt;admin&lt;/code&gt;）。&lt;/p&gt;
&lt;p&gt;&lt;a href="https://pigsty.cc/docs/node/playbook#nodeyml"&gt;&lt;strong&gt;&lt;code&gt;node.yml&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt; 剧本创建的管理员（&lt;code&gt;dba&lt;/code&gt;）默认具有此权限，而其他用户如果想要获得这个权限，需要你显式地将该用户加入到 &lt;code&gt;admin&lt;/code&gt; 组中。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo usermod -aG admin &amp;lt;username&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="pgsql初始化失败fail-to-wait-for-postgrespatroni-primary"&gt;PGSQL初始化失败：Fail to wait for postgres/patroni primary&lt;/h2&gt;
&lt;p&gt;这种错误信息存在多种可能，需要你 &lt;a href="https://github.com/pgsty/pigsty/discussions/338"&gt;检查&lt;/a&gt; Ansible，Systemd / Patroni / PostgreSQL 日志，找出真正的原因。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;可能性1：集群配置错误，找出错误的配置项修改并应用。&lt;/li&gt;
&lt;li&gt;可能性2：在部署中存在同名集群，或者之前的同名集群主节点被不正确地移除&lt;/li&gt;
&lt;li&gt;可能性3：在 DCS 中有同名集群残留的垃圾元数据：没有正确完成下线，你可以使用 &lt;code&gt;etcdctl del --prefix /pg/&amp;lt;cls&amp;gt;&lt;/code&gt; 来手工删除残留数据（请小心）&lt;/li&gt;
&lt;li&gt;可能性4：你的 PostgreSQL 或节点相关 RPM 包没有被成功安装&lt;/li&gt;
&lt;li&gt;可能性5：你的 Watchdog 内核模块没有正确启用加载&lt;/li&gt;
&lt;li&gt;可能性6：你在初始化数据库时指定的语言 Locale 不存在（例如，使用了 en_US.UTF8，但没有安装英文语言包或 Locale 支持）&lt;/li&gt;
&lt;li&gt;如果你遇到了其他的原因，欢迎提交 Issue 或向社区求助。&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="pgsql初始化失败fail-to-wait-for-postgrespatroni-replica"&gt;PGSQL初始化失败：Fail to wait for postgres/patroni replica&lt;/h2&gt;
&lt;p&gt;存在几种可能的原因：&lt;/p&gt;</description></item><item><title>默认扩展</title><link>https://pigsty.cc/docs/pgsql/ext/extension/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/pgsql/ext/extension/</guid><description>&lt;p&gt;Pigsty 在初始化 PostgreSQL 集群时，会默认安装和启用一些核心扩展。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="默认安装的扩展"&gt;默认安装的扩展&lt;/h2&gt;
&lt;p&gt;通过 &lt;a href="https://pigsty.cc/docs/pgsql/param#pg_packages"&gt;&lt;code&gt;pg_packages&lt;/code&gt;&lt;/a&gt; 默认安装的扩展：&lt;/p&gt;
&lt;table class="full-width"&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th style="text-align: left"&gt;扩展&lt;/th&gt;
 &lt;th style="text-align: left"&gt;说明&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;pg_repack&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;在线处理表膨胀，重要的维护工具&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;wal2json&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;逻辑解码输出 JSON 格式变更，CDC 场景常用&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;pgvector&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;向量数据类型与索引，默认随 &lt;code&gt;pgsql-main&lt;/code&gt; 安装&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;a href="https://pigsty.cc/docs/pgsql/param#pg_extensions"&gt;&lt;code&gt;pg_extensions&lt;/code&gt;&lt;/a&gt; 的默认值为空数组 &lt;code&gt;[]&lt;/code&gt;。如需安装其他扩展，可以按需声明，例如：&lt;/p&gt;
&lt;table class="full-width"&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th style="text-align: left"&gt;扩展&lt;/th&gt;
 &lt;th style="text-align: left"&gt;说明&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;postgis&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;地理空间数据库扩展&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;timescaledb&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;时序数据库扩展&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;pgvector&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;向量数据类型与索引&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="默认启用的扩展"&gt;默认启用的扩展&lt;/h2&gt;
&lt;p&gt;通过 &lt;a href="https://pigsty.cc/docs/pgsql/param#pg_default_extensions"&gt;&lt;code&gt;pg_default_extensions&lt;/code&gt;&lt;/a&gt; 在所有数据库中默认启用的扩展：&lt;/p&gt;
&lt;table class="full-width"&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th style="text-align: left"&gt;扩展&lt;/th&gt;
 &lt;th style="text-align: left"&gt;Schema&lt;/th&gt;
 &lt;th style="text-align: left"&gt;说明&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;pg_stat_statements&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;monitor&lt;/td&gt;
 &lt;td style="text-align: left"&gt;SQL 语句执行统计&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;pgstattuple&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;monitor&lt;/td&gt;
 &lt;td style="text-align: left"&gt;元组级统计信息&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;pg_buffercache&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;monitor&lt;/td&gt;
 &lt;td style="text-align: left"&gt;缓冲区缓存检查&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;pageinspect&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;monitor&lt;/td&gt;
 &lt;td style="text-align: left"&gt;页面级检查&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;pg_prewarm&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;monitor&lt;/td&gt;
 &lt;td style="text-align: left"&gt;关系预热&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;pg_visibility&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;monitor&lt;/td&gt;
 &lt;td style="text-align: left"&gt;可见性映射检查&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;pg_freespacemap&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;monitor&lt;/td&gt;
 &lt;td style="text-align: left"&gt;空闲空间映射检查&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;postgres_fdw&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;public&lt;/td&gt;
 &lt;td style="text-align: left"&gt;PostgreSQL 外部数据包装器&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;file_fdw&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;public&lt;/td&gt;
 &lt;td style="text-align: left"&gt;文件外部数据包装器&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;btree_gist&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;public&lt;/td&gt;
 &lt;td style="text-align: left"&gt;B-tree GiST 操作符类&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;btree_gin&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;public&lt;/td&gt;
 &lt;td style="text-align: left"&gt;B-tree GIN 操作符类&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;pg_trgm&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;public&lt;/td&gt;
 &lt;td style="text-align: left"&gt;三元组匹配&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;intagg&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;public&lt;/td&gt;
 &lt;td style="text-align: left"&gt;整数聚合器&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;intarray&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;public&lt;/td&gt;
 &lt;td style="text-align: left"&gt;整数数组函数&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;pg_repack&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;-&lt;/td&gt;
 &lt;td style="text-align: left"&gt;在线重组表&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;这些扩展提供基础的监控、运维和功能增强能力。&lt;/p&gt;</description></item><item><title>扩展仓库</title><link>https://pigsty.cc/docs/pgsql/ext/repo/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/pgsql/ext/repo/</guid><description>&lt;p&gt;Pigsty 提供补充扩展仓库，在 PGDG 官方仓库基础上提供额外的扩展包。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="yum-仓库"&gt;YUM 仓库&lt;/h2&gt;
&lt;p&gt;适用于 EL 7/8/9/10 及其兼容系统（RHEL、Rocky、AlmaLinux、CentOS 等）。&lt;/p&gt;
&lt;h3 id="添加仓库"&gt;添加仓库&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 添加 GPG 公钥&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -fsSL https://repo.pigsty.io/key &lt;span class="p"&gt;|&lt;/span&gt; sudo tee /etc/pki/rpm-gpg/RPM-GPG-KEY-pigsty &amp;gt;/dev/null
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 添加仓库配置&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -fsSL https://repo.pigsty.io/yum/repo &lt;span class="p"&gt;|&lt;/span&gt; sudo tee /etc/yum.repos.d/pigsty.repo &amp;gt;/dev/null
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 刷新缓存&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo yum makecache
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="中国大陆镜像"&gt;中国大陆镜像&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -fsSL https://repo.pigsty.cc/key &lt;span class="p"&gt;|&lt;/span&gt; sudo tee /etc/pki/rpm-gpg/RPM-GPG-KEY-pigsty &amp;gt;/dev/null
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -fsSL https://repo.pigsty.cc/yum/repo &lt;span class="p"&gt;|&lt;/span&gt; sudo tee /etc/yum.repos.d/pigsty.repo &amp;gt;/dev/null
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="仓库地址"&gt;仓库地址&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;国际: &lt;a href="https://repo.pigsty.io/yum/"&gt;https://repo.pigsty.io/yum/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;中国: &lt;a href="https://repo.pigsty.cc/yum/"&gt;https://repo.pigsty.cc/yum/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="apt-仓库"&gt;APT 仓库&lt;/h2&gt;
&lt;p&gt;适用于 Debian 12/13 和 Ubuntu 22.04/24.04/26.04 及其兼容系统。&lt;/p&gt;
&lt;h3 id="添加仓库-1"&gt;添加仓库&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 添加 GPG 公钥&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -fsSL https://repo.pigsty.io/key &lt;span class="p"&gt;|&lt;/span&gt; sudo gpg --dearmor -o /etc/apt/keyrings/pigsty.gpg
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 获取发行版代号并添加仓库&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;distro_codename&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;lsb_release -cs&lt;span class="k"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo tee /etc/apt/sources.list.d/pigsty.list &amp;gt; /dev/null &lt;span class="s"&gt;&amp;lt;&amp;lt;EOF
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;deb [signed-by=/etc/apt/keyrings/pigsty.gpg] https://repo.pigsty.io/apt/infra generic main
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;deb [signed-by=/etc/apt/keyrings/pigsty.gpg] https://repo.pigsty.io/apt/pgsql/${distro_codename} ${distro_codename} main
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;EOF&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 刷新缓存&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt update
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="中国大陆镜像-1"&gt;中国大陆镜像&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -fsSL https://repo.pigsty.cc/key &lt;span class="p"&gt;|&lt;/span&gt; sudo gpg --dearmor -o /etc/apt/keyrings/pigsty.gpg
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;distro_codename&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;lsb_release -cs&lt;span class="k"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo tee /etc/apt/sources.list.d/pigsty.list &amp;gt; /dev/null &lt;span class="s"&gt;&amp;lt;&amp;lt;EOF
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;deb [signed-by=/etc/apt/keyrings/pigsty.gpg] https://repo.pigsty.cc/apt/infra generic main
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;deb [signed-by=/etc/apt/keyrings/pigsty.gpg] https://repo.pigsty.cc/apt/pgsql/${distro_codename} ${distro_codename} main
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;EOF&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="仓库地址-1"&gt;仓库地址&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;国际: &lt;a href="https://repo.pigsty.io/apt/"&gt;https://repo.pigsty.io/apt/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;中国: &lt;a href="https://repo.pigsty.cc/apt/"&gt;https://repo.pigsty.cc/apt/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="gpg-签名"&gt;GPG 签名&lt;/h2&gt;
&lt;p&gt;所有软件包均使用 GPG 签名：&lt;/p&gt;</description></item><item><title>其他说明</title><link>https://pigsty.cc/docs/pgsql/misc/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/pgsql/misc/</guid><description/></item><item><title>服务接入</title><link>https://pigsty.cc/docs/concept/ha/svc/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pigsty.cc/docs/concept/ha/svc/</guid><description>&lt;blockquote&gt;
&lt;p&gt;分离读写操作，正确路由流量，稳定可靠地交付 PostgreSQL 集群提供的能力。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="#%E6%9C%8D%E5%8A%A1%E6%A6%82%E8%BF%B0"&gt;服务&lt;/a&gt; 是一种抽象：它是数据库集群对外提供能力的形式，并封装了底层集群的细节。&lt;/p&gt;
&lt;p&gt;服务对于生产环境中的 &lt;a href="#%E6%8E%A5%E5%85%A5%E6%9C%8D%E5%8A%A1"&gt;稳定接入&lt;/a&gt; 至关重要，在 &lt;a href="https://pigsty.cc/docs/concept/ha"&gt;高可用&lt;/a&gt; 集群自动故障时方显其价值，&lt;a href="#%E5%8D%95%E6%9C%BA%E7%94%A8%E6%88%B7"&gt;单机用户&lt;/a&gt; 通常不需要操心这个概念。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="单机用户"&gt;单机用户&lt;/h2&gt;
&lt;p&gt;“服务” 的概念是给生产环境用的，个人用户/单机集群可以不折腾，直接拿实例名/IP 地址访问数据库。&lt;/p&gt;
&lt;p&gt;例如，Pigsty 默认的单节点 &lt;code&gt;pg-meta&lt;/code&gt;.&lt;code&gt;meta&lt;/code&gt; 数据库，就可以直接用下面三个不同的用户连接上去。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;psql postgres://dbuser_dba:DBUser.DBA@10.10.10.10/meta &lt;span class="c1"&gt;# 直接用 DBA 超级用户连上去&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;psql postgres://dbuser_meta:DBUser.Meta@10.10.10.10/meta &lt;span class="c1"&gt;# 用默认的业务管理员用户连上去&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;psql postgres://dbuser_view:DBUser.View@pg-meta/meta &lt;span class="c1"&gt;# 用默认的只读用户走实例域名连上去&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="服务概述"&gt;服务概述&lt;/h2&gt;
&lt;p&gt;在真实世界生产环境中，我们会使用基于复制的主从数据库集群。集群中有且仅有一个实例作为领导者（&lt;a href="https://pigsty.cc/docs/pgsql/config/cluster#%E8%AF%BB%E5%86%99%E4%B8%BB%E5%BA%93"&gt;主库&lt;/a&gt;）可以接受写入。
而其他实例（&lt;a href="https://pigsty.cc/docs/pgsql/config/cluster#%E5%8F%AA%E8%AF%BB%E4%BB%8E%E5%BA%93"&gt;从库&lt;/a&gt;）则会从持续从集群领导者获取变更日志，与领导者保持一致。同时，从库还可以承载只读请求，在读多写少的场景下可以显著分担主库的负担，
因此对集群的写入请求与只读请求进行区分，是一种十分常见的实践。&lt;/p&gt;
&lt;p&gt;此外对于高频短连接的生产环境，我们还会通过连接池中间件（Pgbouncer）对请求进行池化，减少连接与后端进程的创建开销。但对于 ETL 与变更执行等场景，我们又需要绕过连接池，直接访问数据库。
同时，高可用集群在故障时会出现故障切换（Failover），故障切换会导致集群的领导者出现变更。因此高可用的数据库方案要求写入流量可以自动适配集群的领导者变化。
这些不同的访问需求（读写分离，池化与直连，故障切换自动适配）最终抽象出 &lt;strong&gt;服务&lt;/strong&gt; （Service）的概念。&lt;/p&gt;
&lt;p&gt;通常来说，数据库集群都必须提供这种最基础的服务：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;读写服务（primary）&lt;/strong&gt;：可以读写数据库&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;对于生产数据库集群，至少应当提供这两种服务：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;读写服务（primary）&lt;/strong&gt;：写入数据：只能由主库所承载。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;只读服务（replica）&lt;/strong&gt;：读取数据：可以由从库承载，没有从库时也可由主库承载&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;此外，根据具体的业务场景，可能还会有其他的服务，例如：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;默认直连服务（default）&lt;/strong&gt;：允许（管理）用户，绕过连接池直接访问数据库的服务&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;离线从库服务（offline）&lt;/strong&gt;：不承接线上只读流量的专用从库，用于 ETL 与分析查询&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;同步从库服务（standby）&lt;/strong&gt;：没有复制延迟的只读服务，由 &lt;a href="https://pigsty.cc/docs/pgsql/config/cluster#%E5%90%8C%E6%AD%A5%E5%A4%87%E5%BA%93"&gt;同步备库&lt;/a&gt; /主库处理只读查询&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;延迟从库服务（delayed）&lt;/strong&gt;：访问同一个集群在一段时间之前的旧数据，由 &lt;a href="https://pigsty.cc/docs/pgsql/config/cluster#%E5%BB%B6%E8%BF%9F%E9%9B%86%E7%BE%A4"&gt;延迟从库&lt;/a&gt; 来处理&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="接入服务"&gt;接入服务&lt;/h2&gt;
&lt;p&gt;Pigsty 的服务交付边界止步于集群的 HAProxy，用户可以用各种手段访问这些负载均衡器。&lt;/p&gt;
&lt;p&gt;典型的做法是使用 DNS 或 VIP 接入，将其绑定在集群所有或任意数量的负载均衡器上。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://pigsty.cc/img/pigsty/access.jpg" alt="pigsty-access.jpg"&gt;&lt;/p&gt;
&lt;p&gt;你可以使用不同的 主机 &amp;amp; 端口 组合，它们以不同的方式提供 PostgreSQL 服务。&lt;/p&gt;</description></item></channel></rss>