<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>PGEXT.CLOUD – CMD Docs</title>
    <link>https://ext.pgsty.com/pig/cmd/</link>
    <description>Recent content in CMD Docs on PGEXT.CLOUD</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-US</language>
    
	  <atom:link href="https://ext.pgsty.com/pig/cmd/index.xml" rel="self" type="application/rss+xml" />
    
    
      
        
      
    
    
    <item>
      <title>CMD: repo</title>
      <link>https://ext.pgsty.com/pig/cmd/repo/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://ext.pgsty.com/pig/cmd/repo/</guid>
      <description>
        
        
        &lt;p&gt;The &lt;code&gt;pig repo&lt;/code&gt; command is a comprehensive package repository manager. It can add, remove, create, and manage repositories on RPM systems (RHEL/CentOS/Rocky/Alma) and Debian systems (Debian/Ubuntu).&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-df8cbeb1-fence-0&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;22&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-df8cbeb1-fence-0&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-df8cbeb1-fence-0-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig repo - Manage Linux APT/YUM Repo
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig repo list                    &lt;span class=&#34;c1&#34;&gt;# available repo list             (info)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig repo info   &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;repo&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;module...&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;# show repo info                  (info)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig repo status                  &lt;span class=&#34;c1&#34;&gt;# show current repo status        (info)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig repo add    &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;repo&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;module...&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;# add repo and modules            (root)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig repo rm     &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;repo&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;module...&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;# remove repo &amp;amp; modules           (root)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig repo update                  &lt;span class=&#34;c1&#34;&gt;# update repo pkg cache           (root)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig repo create                  &lt;span class=&#34;c1&#34;&gt;# create repo on current system   (root)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig repo boot                    &lt;span class=&#34;c1&#34;&gt;# boot repo from offline package  (root)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig repo cache                   &lt;span class=&#34;c1&#34;&gt;# cache repo as offline package   (root)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Examples:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig repo add -ru                 &lt;span class=&#34;c1&#34;&gt;# add all repo and update cache (brute but effective)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig repo add pigsty -u           &lt;span class=&#34;c1&#34;&gt;# gentle version, only add pigsty repo and update cache&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig repo add node pgdg pigsty    &lt;span class=&#34;c1&#34;&gt;# essential repo to install postgres packages&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig repo add all                 &lt;span class=&#34;c1&#34;&gt;# all = node + pgdg + pigsty&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig repo add all extra           &lt;span class=&#34;c1&#34;&gt;# extra module has non-free and some 3rd repo for certain extensions&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig repo update                  &lt;span class=&#34;c1&#34;&gt;# update repo cache&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig repo create                  &lt;span class=&#34;c1&#34;&gt;# update local repo /www/pigsty meta&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig repo boot                    &lt;span class=&#34;c1&#34;&gt;# extract /tmp/pkg.tgz to /www/pigsty&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig repo cache                   &lt;span class=&#34;c1&#34;&gt;# cache /www/pigsty into /tmp/pkg.tgz&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;div class=&#34;td-table-scroll td-table-scroll--full&#34; tabindex=&#34;0&#34; role=&#34;region&#34; aria-label=&#34;Scrollable table&#34;&gt;
&lt;table class=&#34;full-width&#34;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Command&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Notes&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;repo list&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Print available repositories and modules&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;repo info&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Show repository details&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;repo status&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Show current repository status&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;repo add&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Add repositories&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Requires sudo or root&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;repo set&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Clear, overwrite, and update repositories&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Requires sudo or root&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;repo rm&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Remove repositories&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Requires sudo or root&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;repo update&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Update repository cache&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Requires sudo or root&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;repo create&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Create local YUM/APT repository&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Requires sudo or root&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;repo cache&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Create offline package from local repo&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Requires sudo or root&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;repo boot&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Bootstrap repository from offline package&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Requires sudo or root&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;repo reload&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Refresh repository catalog&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;h2 id=&#34;quick-start&#34;&gt;Quick Start&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#quick-start&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-df8cbeb1-fence-1&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;15&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-df8cbeb1-fence-1&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-df8cbeb1-fence-1-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Method 1: clean existing repositories, add all required repos, and update cache (recommended)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig repo add all --remove --update    &lt;span class=&#34;c1&#34;&gt;# remove old repos, add all required repos, update cache&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Method 1 variant: one step&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig repo &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt;                          &lt;span class=&#34;c1&#34;&gt;# = pig repo add all --remove --update&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Method 2: gentle mode - only add required repos and keep current repo configuration&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig repo add pgsql                    &lt;span class=&#34;c1&#34;&gt;# add PGDG and Pigsty PGSQL repositories&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig repo add pigsty --region&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;china    &lt;span class=&#34;c1&#34;&gt;# add Pigsty repositories with China region&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig repo add pgdg   --region&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;europe   &lt;span class=&#34;c1&#34;&gt;# add PGDG repositories with Europe region&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig repo add pgdg   --mirror          &lt;span class=&#34;c1&#34;&gt;# use Tencent Cloud first for PGDG&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig repo add infra  --region&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;default  &lt;span class=&#34;c1&#34;&gt;# add INFRA repositories with default region&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# If the commands above did not use -u|--update, run this as an extra step&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig repo update                       &lt;span class=&#34;c1&#34;&gt;# update system package cache&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;h2 id=&#34;modules&#34;&gt;Modules&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#modules&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;In pig, APT/YUM repositories are organized as &lt;strong&gt;modules&lt;/strong&gt;: groups of repositories serving a specific purpose.&lt;/p&gt;
&lt;div class=&#34;td-table-scroll td-table-scroll--full&#34; tabindex=&#34;0&#34; role=&#34;region&#34; aria-label=&#34;Scrollable table&#34;&gt;
&lt;table class=&#34;full-width&#34;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: center&#34;&gt;Module&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Repository List&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: center&#34;&gt;&lt;code&gt;all&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;All core modules required to install PG&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;node&lt;/code&gt; + &lt;code&gt;infra&lt;/code&gt; + &lt;code&gt;pgsql&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: center&#34;&gt;&lt;code&gt;pgsql&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;PGDG + Pigsty PG extensions&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pigsty-pgsql&lt;/code&gt; + &lt;code&gt;pgdg&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: center&#34;&gt;&lt;code&gt;pigsty&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Pigsty Infra + PGSQL repositories&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;pigsty-infra, pigsty-pgsql&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: center&#34;&gt;&lt;code&gt;pgdg&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;PGDG official repositories&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;pgdg-common, pgdg14-18&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: center&#34;&gt;&lt;code&gt;node&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Linux system repositories&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;base, updates, extras, epel, baseos, appstream&amp;hellip;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: center&#34;&gt;&lt;code&gt;infra&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Infrastructure component repositories&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;pigsty-infra, nginx, docker-ce&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: center&#34;&gt;&lt;code&gt;docker&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Docker repository&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;docker-ce&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: center&#34;&gt;&lt;code&gt;beta&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;PostgreSQL 19 beta repositories&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;pgdg19-beta, pgdg-beta&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: center&#34;&gt;&lt;code&gt;extra&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;PGDG non-free and third-party extensions&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;pgdg-extras, timescaledb, citus&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: center&#34;&gt;&lt;code&gt;groonga&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;PGroonga repository&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;groonga&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: center&#34;&gt;&lt;code&gt;mssql&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;WiltonDB repository (deprecated)&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;babelfish&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: center&#34;&gt;&lt;code&gt;percona&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Percona PG + PG_TDE&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;percona&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: center&#34;&gt;&lt;code&gt;llvm&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;LLVM toolchain repository&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;llvm&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: center&#34;&gt;&lt;code&gt;kube&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Kubernetes repository&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;kubernetes&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: center&#34;&gt;&lt;code&gt;grafana&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Grafana repository&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;grafana&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: center&#34;&gt;&lt;code&gt;haproxy&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;HAProxy repositories&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;haproxyd, haproxyu&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: center&#34;&gt;&lt;code&gt;redis&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Redis repository&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;redis&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: center&#34;&gt;&lt;code&gt;mongo&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;MongoDB repository&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;mongo&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: center&#34;&gt;&lt;code&gt;mysql&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;MySQL repository&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;mysql&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: center&#34;&gt;&lt;code&gt;click&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;ClickHouse repository&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;clickhouse&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: center&#34;&gt;&lt;code&gt;gitlab&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;GitLab repository&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;gitlab-ce, gitlab-ee&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;p&gt;Pig also includes APT/DNF repositories for other databases and systems such as &lt;code&gt;redis&lt;/code&gt;, &lt;code&gt;kubernetes&lt;/code&gt;, &lt;code&gt;grafana&lt;/code&gt;, &lt;code&gt;clickhouse&lt;/code&gt;, &lt;code&gt;gitlab&lt;/code&gt;, &lt;code&gt;haproxy&lt;/code&gt;, &lt;code&gt;mongodb&lt;/code&gt;, and &lt;code&gt;mysql&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;In general, &lt;code&gt;node&lt;/code&gt; (Linux system repositories) and &lt;code&gt;pgsql&lt;/code&gt; (PGDG + Pigsty) are required for PostgreSQL installation. The &lt;code&gt;infra&lt;/code&gt; repository is optional and contains tools, IvorySQL kernel packages, and similar components. The special &lt;code&gt;all&lt;/code&gt; module adds all required repositories at once and is a suitable starting point for most users.&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-df8cbeb1-fence-2&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;3&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-df8cbeb1-fence-2&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-df8cbeb1-fence-2-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig repo add all      &lt;span class=&#34;c1&#34;&gt;# add node, pgsql, and infra repositories&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig repo add          &lt;span class=&#34;c1&#34;&gt;# default to the all module when no argument is given&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig repo &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt;          &lt;span class=&#34;c1&#34;&gt;# set clears/backups existing definitions and overwrites with new repo definitions&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;h2 id=&#34;repository-definitions&#34;&gt;Repository Definitions&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#repository-definitions&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;The full repository definition bundled with Pigsty is in &lt;a href=&#34;https://github.com/pgsty/pig/blob/main/cli/repo/assets/repo.yml&#34;&gt;&lt;code&gt;cli/repo/assets/repo.yml&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;You can create &lt;code&gt;~/.pig/repo.yml&lt;/code&gt; to explicitly modify and override pig&amp;rsquo;s repository definitions. When editing repository definitions, you can add extra regional mirror URLs under &lt;code&gt;baseurl&lt;/code&gt;, such as China or Europe mirrors. When &lt;code&gt;--region&lt;/code&gt; is specified, pig first looks for the matching regional URL and falls back to the &lt;code&gt;default&lt;/code&gt; URL if the region is unavailable.&lt;/p&gt;
&lt;p&gt;Since v1.7.0, &lt;code&gt;--mirror&lt;/code&gt; on &lt;code&gt;repo add&lt;/code&gt; or &lt;code&gt;repo set&lt;/code&gt; explicitly selects the
bundled &lt;code&gt;china&lt;/code&gt; definitions. PGDG uses Tencent Cloud first and retains any
declared Pigsty fallback; other modules use their maintained China-region URLs.
Pig no longer rewrites PGDG URLs through a separate runtime proxy route.&lt;/p&gt;
&lt;p&gt;Ordinary EL repositories keep native DNF module filtering. Only definitions
that explicitly declare &lt;code&gt;module_hotfixes=1&lt;/code&gt;—notably Pigsty and PGDG
repositories—override module streams, and the key is removed when rendering
EL7 YUM configuration.&lt;/p&gt;
&lt;h2 id=&#34;repo-list&#34;&gt;repo list&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#repo-list&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;pig repo list&lt;/code&gt; lists all repository modules available on the current system.&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-df8cbeb1-fence-3&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;2&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-df8cbeb1-fence-3&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-df8cbeb1-fence-3-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig repo list                &lt;span class=&#34;c1&#34;&gt;# list repositories available on current system&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig repo list all            &lt;span class=&#34;c1&#34;&gt;# list all repositories without filtering&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;h2 id=&#34;repo-info&#34;&gt;repo info&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#repo-info&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Show detailed information for specific repositories or modules, including URLs, metadata, regional mirrors, and &lt;code&gt;.repo&lt;/code&gt; / &lt;code&gt;.list&lt;/code&gt; repository file content.&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-df8cbeb1-fence-4&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;3&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-df8cbeb1-fence-4&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-df8cbeb1-fence-4-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig repo info pgdg               &lt;span class=&#34;c1&#34;&gt;# show pgdg module information&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig repo info pigsty pgdg        &lt;span class=&#34;c1&#34;&gt;# show multiple modules&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig repo info all                &lt;span class=&#34;c1&#34;&gt;# show all modules&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;h2 id=&#34;repo-status&#34;&gt;repo status&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#repo-status&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Show current repository configuration on the system.&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-df8cbeb1-fence-5&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;1&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-df8cbeb1-fence-5&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-df8cbeb1-fence-5-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig repo status&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;h2 id=&#34;repo-add&#34;&gt;repo add&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#repo-add&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Add repository configuration files to the system. Requires root/sudo privileges.&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-df8cbeb1-fence-6&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;8&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-df8cbeb1-fence-6&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-df8cbeb1-fence-6-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig repo add pgdg                &lt;span class=&#34;c1&#34;&gt;# add PGDG repository&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig repo add pgdg pigsty         &lt;span class=&#34;c1&#34;&gt;# add multiple repositories&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig repo add all                 &lt;span class=&#34;c1&#34;&gt;# add all required repositories (pgdg + pigsty + node)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig repo add pigsty -u           &lt;span class=&#34;c1&#34;&gt;# add and update cache&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig repo add all -r              &lt;span class=&#34;c1&#34;&gt;# remove existing repos before adding&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig repo add all -ru             &lt;span class=&#34;c1&#34;&gt;# remove, add, and update (full reset)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig repo add pgdg --region&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;china &lt;span class=&#34;c1&#34;&gt;# use China mirror&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig repo add pgdg -m             &lt;span class=&#34;c1&#34;&gt;# select China definitions; Tencent first for PGDG&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Options:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-r|--remove&lt;/code&gt;: remove existing repositories before adding new ones&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-u|--update&lt;/code&gt;: run package cache update after adding repositories&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--region &amp;lt;region&amp;gt;&lt;/code&gt;: use regional mirror repositories (&lt;code&gt;default&lt;/code&gt; / &lt;code&gt;china&lt;/code&gt; / &lt;code&gt;europe&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-m|--mirror&lt;/code&gt;: explicitly select the bundled &lt;code&gt;china&lt;/code&gt; definitions&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;td-table-scroll td-table-scroll--full&#34; tabindex=&#34;0&#34; role=&#34;region&#34; aria-label=&#34;Scrollable table&#34;&gt;
&lt;table class=&#34;full-width&#34;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: center&#34;&gt;Platform&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Module Location&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: center&#34;&gt;EL&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;/etc/yum.repos.d/&amp;lt;module&amp;gt;.repo&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: center&#34;&gt;Debian&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;/etc/apt/sources.list.d/&amp;lt;module&amp;gt;.list&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;h2 id=&#34;repo-set&#34;&gt;repo set&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#repo-set&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Equivalent to &lt;code&gt;repo add --remove --update&lt;/code&gt;. It clears existing repositories, sets up new ones, then updates cache.&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-df8cbeb1-fence-7&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;4&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-df8cbeb1-fence-7&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-df8cbeb1-fence-7-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig repo &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt;                     &lt;span class=&#34;c1&#34;&gt;# replace with default repositories&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig repo &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; pgdg pigsty         &lt;span class=&#34;c1&#34;&gt;# replace with selected repositories and update&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig repo &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; all --region&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;china  &lt;span class=&#34;c1&#34;&gt;# use China mirror&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig repo &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; -m                  &lt;span class=&#34;c1&#34;&gt;# explicitly select the bundled China definitions&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;h2 id=&#34;repo-rm&#34;&gt;repo rm&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#repo-rm&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Remove repository configuration files and back them up.&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-df8cbeb1-fence-8&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;3&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-df8cbeb1-fence-8&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-df8cbeb1-fence-8-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig repo rm                      &lt;span class=&#34;c1&#34;&gt;# remove all repositories&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig repo rm pgdg                 &lt;span class=&#34;c1&#34;&gt;# remove selected repository&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig repo rm pgdg pigsty -u       &lt;span class=&#34;c1&#34;&gt;# remove and update cache&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;div class=&#34;td-table-scroll td-table-scroll--full&#34; tabindex=&#34;0&#34; role=&#34;region&#34; aria-label=&#34;Scrollable table&#34;&gt;
&lt;table class=&#34;full-width&#34;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: center&#34;&gt;Platform&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Backup Location&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: center&#34;&gt;EL&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;/etc/yum.repos.d/backup/&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: center&#34;&gt;Debian&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;/etc/apt/sources.list.d/backup/&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;h2 id=&#34;repo-update&#34;&gt;repo update&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#repo-update&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Update package-manager cache to reflect repository changes.&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-df8cbeb1-fence-9&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;1&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-df8cbeb1-fence-9&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-df8cbeb1-fence-9-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig repo update                  &lt;span class=&#34;c1&#34;&gt;# update package cache&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;div class=&#34;td-table-scroll td-table-scroll--full&#34; tabindex=&#34;0&#34; role=&#34;region&#34; aria-label=&#34;Scrollable table&#34;&gt;
&lt;table class=&#34;full-width&#34;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: center&#34;&gt;Platform&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Equivalent Command&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: center&#34;&gt;EL&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;dnf makecache&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: center&#34;&gt;Debian&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;apt update&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;h2 id=&#34;repo-create&#34;&gt;repo create&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#repo-create&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Create a local package repository for offline installation.&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-df8cbeb1-fence-10&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;2&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-df8cbeb1-fence-10&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-df8cbeb1-fence-10-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig repo create                  &lt;span class=&#34;c1&#34;&gt;# Linux: /www/pigsty; macOS: current directory&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig repo create /srv/repo        &lt;span class=&#34;c1&#34;&gt;# create at custom location&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;The current implementation prefers &lt;a href=&#34;https://sow.pgsty.com/docs/reference/cli/create/&#34;&gt;&lt;code&gt;sow&lt;/code&gt;&lt;/a&gt; when it is available in &lt;code&gt;PATH&lt;/code&gt;. On Linux, the SOW backend runs the equivalent of the following with &lt;code&gt;sudo&lt;/code&gt; for every target directory:&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-df8cbeb1-fence-11&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;1&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-df8cbeb1-fence-11&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-df8cbeb1-fence-11-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sow create --pigsty --timeout 10m -- /absolute/repository/path&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;On macOS, SOW is required, runs without &lt;code&gt;sudo&lt;/code&gt;, and the default target is the current directory. On Linux, if &lt;code&gt;sow&lt;/code&gt; is not installed, EL falls back to &lt;code&gt;createrepo_c&lt;/code&gt; and Debian/Ubuntu falls back to &lt;code&gt;dpkg-scanpackages&lt;/code&gt; from &lt;code&gt;dpkg-dev&lt;/code&gt;. If neither the preferred backend nor the platform fallback is available, &lt;code&gt;pig repo create&lt;/code&gt; fails. A SOW execution error is returned directly rather than retried through the legacy backend. The &lt;code&gt;10m&lt;/code&gt; timeout limits the wait for SOW&amp;rsquo;s directory lock; it does not cap repository indexing time.&lt;/p&gt;
&lt;p&gt;SOW&amp;rsquo;s &lt;code&gt;--pigsty&lt;/code&gt; transaction:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Scans only top-level regular &lt;code&gt;.rpm&lt;/code&gt; and &lt;code&gt;.deb&lt;/code&gt; files—no recursion and no symlink following.&lt;/li&gt;
&lt;li&gt;Removes parsed 32-bit x86 packages (RPM &lt;code&gt;i386/i486/i586/i686&lt;/code&gt;, DEB &lt;code&gt;i386&lt;/code&gt;) and packages whose binary name is exactly &lt;code&gt;patroni&lt;/code&gt; with upstream version exactly &lt;code&gt;3.0.4&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Builds the applicable RPM/DEB metadata atomically and writes &lt;code&gt;repo_complete&lt;/code&gt; last. The marker contains SHA-256 hashes for remaining top-level packages, sorted by basename.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Non-package files and directories are left untouched; malformed package candidates or conflicting package coordinates make the SOW transaction fail closed. The legacy fallback has different cleanup and metadata semantics and writes an MD5 package list to &lt;code&gt;repo_complete&lt;/code&gt;. After either backend exits, PIG requires &lt;code&gt;repo_complete&lt;/code&gt; to exist as a regular file, but it does not validate the marker contents or hashes. Consumers that use the marker as a delivery gate should perform that verification themselves.&lt;/p&gt;
&lt;h2 id=&#34;repo-cache&#34;&gt;repo cache&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#repo-cache&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Create a compressed tarball of repository contents for offline distribution.&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-df8cbeb1-fence-12&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;2&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-df8cbeb1-fence-12&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-df8cbeb1-fence-12-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig repo cache                   &lt;span class=&#34;c1&#34;&gt;# default: /www to /tmp/pkg.tgz&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig repo cache -d /srv           &lt;span class=&#34;c1&#34;&gt;# custom source directory&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Options:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-d, --dir&lt;/code&gt;: source directory, default &lt;code&gt;/www/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-p, --path&lt;/code&gt;: output path, default &lt;code&gt;/tmp/pkg.tgz&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;repo-boot&#34;&gt;repo boot&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#repo-boot&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Extract and set up a local repository from an offline package.&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-df8cbeb1-fence-13&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;3&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-df8cbeb1-fence-13&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-df8cbeb1-fence-13-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig repo boot                    &lt;span class=&#34;c1&#34;&gt;# default: /tmp/pkg.tgz to /www&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig repo boot -p /mnt/pkg.tgz    &lt;span class=&#34;c1&#34;&gt;# custom package path&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig repo boot -d /srv            &lt;span class=&#34;c1&#34;&gt;# custom target directory&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Options:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-p, --path&lt;/code&gt;: package path, default &lt;code&gt;/tmp/pkg.tgz&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-d, --dir&lt;/code&gt;: target directory, default &lt;code&gt;/www/&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;repo-reload&#34;&gt;repo reload&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#repo-reload&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Refresh repository metadata from GitHub to the latest version.&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-df8cbeb1-fence-14&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;1&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-df8cbeb1-fence-14&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-df8cbeb1-fence-14-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig repo reload                  &lt;span class=&#34;c1&#34;&gt;# refresh repository catalog&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;The updated file is placed in &lt;code&gt;~/.pig/repo.yml&lt;/code&gt;.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>CMD: ext</title>
      <link>https://ext.pgsty.com/pig/cmd/ext/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://ext.pgsty.com/pig/cmd/ext/</guid>
      <description>
        
        
        &lt;p&gt;The &lt;code&gt;pig ext&lt;/code&gt; command is an all-in-one tool for managing PostgreSQL extensions. It lets you search, install, remove, update, and manage PostgreSQL extensions, and it can also handle PostgreSQL kernel packages.&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-a8d2d57b-fence-0&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;18&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-a8d2d57b-fence-0&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-a8d2d57b-fence-0-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig ext - Manage PostgreSQL Extensions
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig repo add -ru             &lt;span class=&#34;c1&#34;&gt;# add all repo and update cache (brute but effective)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig ext add pg18             &lt;span class=&#34;c1&#34;&gt;# install optional postgresql 18 package&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig ext list duck            &lt;span class=&#34;c1&#34;&gt;# search extension in catalog&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig ext scan -v &lt;span class=&#34;m&#34;&gt;18&lt;/span&gt;           &lt;span class=&#34;c1&#34;&gt;# scan installed extension for pg 18&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig ext add pg_duckdb        &lt;span class=&#34;c1&#34;&gt;# install certain postgresql extension&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Examples:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig ext list    &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;query&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;      &lt;span class=&#34;c1&#34;&gt;# list &amp;amp; search extension&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig ext info    &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;ext...&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;     &lt;span class=&#34;c1&#34;&gt;# get information of a specific extension&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig ext status  &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-v&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;         &lt;span class=&#34;c1&#34;&gt;# show installed extension and pg status&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig ext add     &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;ext...&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;     &lt;span class=&#34;c1&#34;&gt;# install extension for current pg version&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig ext rm      &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;ext...&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;     &lt;span class=&#34;c1&#34;&gt;# remove extension for current pg version&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig ext update  &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;ext...&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;     &lt;span class=&#34;c1&#34;&gt;# update extension to the latest version&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig ext import  &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;ext...&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;     &lt;span class=&#34;c1&#34;&gt;# download extension to local repo&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig ext link    &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;ext...&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;     &lt;span class=&#34;c1&#34;&gt;# link postgres installation to path&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig ext reload               &lt;span class=&#34;c1&#34;&gt;# reload the latest extension catalog data&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;div class=&#34;td-table-scroll td-table-scroll--full&#34; tabindex=&#34;0&#34; role=&#34;region&#34; aria-label=&#34;Scrollable table&#34;&gt;
&lt;table class=&#34;full-width&#34;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Command&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Notes&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;ext list&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Search extensions&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;ext info&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Show extension details&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;ext avail&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Show extension availability matrix&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;ext status&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Show installed extensions&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;ext scan&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Scan installed extensions&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;ext add&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Install extensions&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Requires sudo or root&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;ext rm&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Remove extensions&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Requires sudo or root&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;ext update&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Update extensions&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Requires sudo or root&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;ext import&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Download extensions for offline use&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Requires sudo or root&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;ext link&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Link a PG version into PATH&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Requires sudo or root&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;ext reload&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Refresh extension catalog&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;h2 id=&#34;quick-start&#34;&gt;Quick Start&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#quick-start&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Before installing PostgreSQL extensions, add the required repositories with &lt;a href=&#34;https://pig.pgsty.com/repo/&#34;&gt;&lt;code&gt;pig repo add&lt;/code&gt;&lt;/a&gt;:&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-a8d2d57b-fence-1&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;2&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-a8d2d57b-fence-1&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-a8d2d57b-fence-1-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig repo add pgdg pigsty -u    &lt;span class=&#34;c1&#34;&gt;# gentle way to add pgdg and pigsty repos&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig repo &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt;                   &lt;span class=&#34;c1&#34;&gt;# brute-force way to remove and add all required repos&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;Then search and install PostgreSQL extensions:&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-a8d2d57b-fence-2&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;6&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-a8d2d57b-fence-2&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-a8d2d57b-fence-2-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig ext install pg_duckdb
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig ext install pg_partman
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig ext install pg_cron
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig ext install pg_repack
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig ext install pg_stat_statements
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig ext install pg_stat_kcache&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;See the &lt;a href=&#34;https://ext.pgsty.com/list/&#34;&gt;&lt;strong&gt;extension list&lt;/strong&gt;&lt;/a&gt; for available extensions and package names.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Notes:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;If no PostgreSQL version is specified, pig tries to detect the active PostgreSQL installation from &lt;code&gt;pg_config&lt;/code&gt; in &lt;code&gt;PATH&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;PostgreSQL can be selected by major version (&lt;code&gt;-v&lt;/code&gt;) or by pg_config path (&lt;code&gt;-p&lt;/code&gt;).
&lt;ul&gt;
&lt;li&gt;With &lt;code&gt;-v&lt;/code&gt;, pig uses the default PGDG kernel package path for that major version.
&lt;ul&gt;
&lt;li&gt;EL distros: &lt;code&gt;/usr/pgsql-$v/bin/pg_config&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;DEB distros: &lt;code&gt;/usr/lib/postgresql/$v/bin/pg_config&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;With &lt;code&gt;-p&lt;/code&gt;, pig locates PostgreSQL directly from that path.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;The extension manager automatically adapts to the OS package format:
&lt;ul&gt;
&lt;li&gt;RPM packages for RHEL/CentOS/Rocky Linux/AlmaLinux&lt;/li&gt;
&lt;li&gt;DEB packages for Debian/Ubuntu&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Extension dependencies are resolved automatically when possible.&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;-y&lt;/code&gt; carefully because it auto-confirms prompts.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Pigsty assumes official PGDG kernel packages are installed. If not, install them with:&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-a8d2d57b-fence-3&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;1&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-a8d2d57b-fence-3&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-a8d2d57b-fence-3-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig ext install pg18          &lt;span class=&#34;c1&#34;&gt;# install PostgreSQL 18 kernel packages except devel&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;h2 id=&#34;ext-list&#34;&gt;ext list&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#ext-list&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;List or search extensions in the extension catalog.&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-a8d2d57b-fence-4&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;6&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-a8d2d57b-fence-4&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-a8d2d57b-fence-4-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig ext list                     &lt;span class=&#34;c1&#34;&gt;# list all extensions&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig ext list duck                &lt;span class=&#34;c1&#34;&gt;# search extensions containing &amp;#34;duck&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig ext list -v &lt;span class=&#34;m&#34;&gt;18&lt;/span&gt;               &lt;span class=&#34;c1&#34;&gt;# filter by PG version&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig ext ls olap                  &lt;span class=&#34;c1&#34;&gt;# list OLAP category extensions&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig ext ls gis -v &lt;span class=&#34;m&#34;&gt;16&lt;/span&gt;             &lt;span class=&#34;c1&#34;&gt;# list GIS extensions for PG 16&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig ext ls rag                   &lt;span class=&#34;c1&#34;&gt;# list RAG category extensions&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;Category filtering is done by passing the category name as the query. Supported categories include: &lt;code&gt;time&lt;/code&gt;, &lt;code&gt;gis&lt;/code&gt;, &lt;code&gt;rag&lt;/code&gt;, &lt;code&gt;fts&lt;/code&gt;, &lt;code&gt;olap&lt;/code&gt;, &lt;code&gt;feat&lt;/code&gt;, &lt;code&gt;lang&lt;/code&gt;, &lt;code&gt;type&lt;/code&gt;, &lt;code&gt;func&lt;/code&gt;, &lt;code&gt;util&lt;/code&gt;, &lt;code&gt;admin&lt;/code&gt;, &lt;code&gt;stat&lt;/code&gt;, &lt;code&gt;sec&lt;/code&gt;, &lt;code&gt;fdw&lt;/code&gt;, &lt;code&gt;sim&lt;/code&gt;, and &lt;code&gt;etl&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Options:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-v|--version&lt;/code&gt;: filter by PG version&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--pkg&lt;/code&gt;: show package names instead of extension names, listing only leading extensions&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Status column:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;installed&lt;/code&gt;: extension is installed&lt;/li&gt;
&lt;li&gt;&lt;code&gt;available&lt;/code&gt;: extension is available but not installed&lt;/li&gt;
&lt;li&gt;&lt;code&gt;not avail&lt;/code&gt;: extension is not available on the current system&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The default extension catalog is defined in &lt;a href=&#34;https://github.com/pgsty/pig/blob/main/cli/ext/assets/extension.csv&#34;&gt;&lt;strong&gt;&lt;code&gt;cli/ext/assets/extension.csv&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Use &lt;code&gt;pig ext reload&lt;/code&gt; to refresh to the latest catalog. The downloaded catalog is stored at &lt;code&gt;~/.pig/extension.csv&lt;/code&gt;; the latest online catalog is also published at &lt;a href=&#34;https://pigsty.io/ext/data/extension.csv&#34;&gt;&lt;strong&gt;pigsty.io/ext/data/extension.csv&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;ext-info&#34;&gt;ext info&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#ext-info&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Show detailed information for selected extensions.&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-a8d2d57b-fence-5&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;3&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-a8d2d57b-fence-5&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-a8d2d57b-fence-5-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig ext info postgis        &lt;span class=&#34;c1&#34;&gt;# show PostGIS details&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig ext info timescaledb    &lt;span class=&#34;c1&#34;&gt;# show TimescaleDB details&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig ext info vector postgis &lt;span class=&#34;c1&#34;&gt;# show multiple extensions&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;h2 id=&#34;ext-avail&#34;&gt;ext avail&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#ext-avail&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Show the extension availability matrix across operating systems, architectures, and PostgreSQL versions.&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-a8d2d57b-fence-6&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;5&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-a8d2d57b-fence-6&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-a8d2d57b-fence-6-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig ext avail                     &lt;span class=&#34;c1&#34;&gt;# show package availability on current system&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig ext avail timescaledb         &lt;span class=&#34;c1&#34;&gt;# show timescaledb availability matrix&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig ext avail postgis pg_duckdb   &lt;span class=&#34;c1&#34;&gt;# show multiple extensions&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig ext av pgvector               &lt;span class=&#34;c1&#34;&gt;# show pgvector availability&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig ext matrix citus              &lt;span class=&#34;c1&#34;&gt;# alias for avail&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;The matrix shows availability across operating systems (EL8/9/10, Debian 12/13, Ubuntu 22/24/26), architectures (x86_64/aarch64), and PostgreSQL versions (14-18).&lt;/p&gt;
&lt;h2 id=&#34;ext-status&#34;&gt;ext status&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#ext-status&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Show installed extension status for the current PostgreSQL instance.&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-a8d2d57b-fence-7&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;3&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-a8d2d57b-fence-7&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-a8d2d57b-fence-7-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig ext status              &lt;span class=&#34;c1&#34;&gt;# show installed extensions&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig ext status -c           &lt;span class=&#34;c1&#34;&gt;# include contrib extensions&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig ext status -v &lt;span class=&#34;m&#34;&gt;16&lt;/span&gt;        &lt;span class=&#34;c1&#34;&gt;# show installed extensions for PG 16&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Options:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-c|--contrib&lt;/code&gt;: include contrib extensions in the result&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;ext-scan&#34;&gt;ext scan&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#ext-scan&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Scan installed extensions for the current PostgreSQL instance.&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-a8d2d57b-fence-8&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;1&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-a8d2d57b-fence-8&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-a8d2d57b-fence-8-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig ext scan &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-v version&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;This command scans the PostgreSQL extension directory and finds extensions that are actually installed.&lt;/p&gt;
&lt;h2 id=&#34;ext-add&#34;&gt;ext add&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#ext-add&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Install one or more PostgreSQL extensions. Same-level aliases for &lt;code&gt;pig ext add&lt;/code&gt; include &lt;code&gt;pig ext install&lt;/code&gt;, &lt;code&gt;pig ext ins&lt;/code&gt;, and &lt;code&gt;pig ext a&lt;/code&gt;. The top-level &lt;a href=&#34;https://pig.pgsty.com/cmd/#pig-install&#34;&gt;&lt;code&gt;pig install&lt;/code&gt;&lt;/a&gt; command is a separate native package-manager wrapper that also supports PostgreSQL and extension alias translation.&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-a8d2d57b-fence-9&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;16&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-a8d2d57b-fence-9&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-a8d2d57b-fence-9-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig ext add pg_duckdb            &lt;span class=&#34;c1&#34;&gt;# install pg_duckdb&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig ext add pg_duckdb -v &lt;span class=&#34;m&#34;&gt;18&lt;/span&gt;      &lt;span class=&#34;c1&#34;&gt;# install for PG 18&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig ext add pg_duckdb -y         &lt;span class=&#34;c1&#34;&gt;# auto-confirm installation&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig ext add vector postgis       &lt;span class=&#34;c1&#34;&gt;# install multiple extensions&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig ext add postgis --plan       &lt;span class=&#34;c1&#34;&gt;# preview install plan without executing&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Using alias&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig install pg_duckdb
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig install pg_duckdb -v &lt;span class=&#34;m&#34;&gt;18&lt;/span&gt; -y
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Install PostgreSQL kernel packages&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig ext install pgsql            &lt;span class=&#34;c1&#34;&gt;# install latest PostgreSQL kernel&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig ext a pg18                   &lt;span class=&#34;c1&#34;&gt;# install PostgreSQL 18 kernel packages&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig ext ins pg16                 &lt;span class=&#34;c1&#34;&gt;# install PostgreSQL 16 kernel packages&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig ext install pg15-core        &lt;span class=&#34;c1&#34;&gt;# install PostgreSQL 15 core packages&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig ext install pg14-main -y     &lt;span class=&#34;c1&#34;&gt;# install PG 14 + common extensions (vector, repack, wal2json)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Options:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-v|--version&lt;/code&gt;: specify PG major version&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-y|--yes&lt;/code&gt;: auto-confirm installation&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--plan&lt;/code&gt;: preview the install plan without running package-manager commands&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;ext-rm&#34;&gt;ext rm&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#ext-rm&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Remove one or more PostgreSQL extensions.&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-a8d2d57b-fence-10&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;4&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-a8d2d57b-fence-10&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-a8d2d57b-fence-10-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig ext rm pg_duckdb             &lt;span class=&#34;c1&#34;&gt;# remove pg_duckdb&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig ext rm pg_duckdb -v &lt;span class=&#34;m&#34;&gt;18&lt;/span&gt;       &lt;span class=&#34;c1&#34;&gt;# remove PG 18 package&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig ext rm pgvector -y           &lt;span class=&#34;c1&#34;&gt;# auto-confirm removal&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig ext rm pgvector --plan       &lt;span class=&#34;c1&#34;&gt;# preview remove plan without executing&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Options:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-v|--version&lt;/code&gt;: specify PG major version&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-y|--yes&lt;/code&gt;: auto-confirm removal&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--plan&lt;/code&gt;: preview the remove plan without running package-manager commands&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;ext-update&#34;&gt;ext update&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#ext-update&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Update explicitly selected installed extensions to the latest version. For safety, &lt;code&gt;pig ext update&lt;/code&gt; with no arguments is a no-op; you must name the targets explicitly.&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-a8d2d57b-fence-11&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;5&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-a8d2d57b-fence-11&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-a8d2d57b-fence-11-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig ext update                   &lt;span class=&#34;c1&#34;&gt;# no-op: explicit targets are required&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig ext update pg_duckdb         &lt;span class=&#34;c1&#34;&gt;# update one extension&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig ext update postgis timescaledb  &lt;span class=&#34;c1&#34;&gt;# update multiple extensions&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig ext update pg_duckdb -y      &lt;span class=&#34;c1&#34;&gt;# auto-confirm update&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig ext update pg_duckdb -m      &lt;span class=&#34;c1&#34;&gt;# refresh catalog from mirror first&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Options:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-v|--version&lt;/code&gt;: specify PG major version&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-y|--yes&lt;/code&gt;: auto-confirm update&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-m|--mirror&lt;/code&gt;: reload the extension catalog from the &lt;code&gt;pigsty.cc&lt;/code&gt; mirror before updating&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;ext-import&#34;&gt;ext import&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#ext-import&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Download extension packages into a local repository for offline installation.&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-a8d2d57b-fence-12&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;5&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-a8d2d57b-fence-12&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-a8d2d57b-fence-12-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig ext import postgis                &lt;span class=&#34;c1&#34;&gt;# import PostGIS packages&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig ext import timescaledb pg_cron    &lt;span class=&#34;c1&#34;&gt;# import multiple extension packages&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig ext import pg16                   &lt;span class=&#34;c1&#34;&gt;# import PostgreSQL 16 packages&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig ext import pgsql-common           &lt;span class=&#34;c1&#34;&gt;# import common utility packages&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig ext import -d /www/pigsty postgis &lt;span class=&#34;c1&#34;&gt;# import to a selected path&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Options:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-d|--repo&lt;/code&gt;: local repository directory (default: &lt;code&gt;/www/pigsty&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;ext-link&#34;&gt;ext link&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#ext-link&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Link a selected PG version into the system PATH.&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-a8d2d57b-fence-13&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;6&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-a8d2d57b-fence-13&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-a8d2d57b-fence-13-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig ext link &lt;span class=&#34;m&#34;&gt;18&lt;/span&gt;                  &lt;span class=&#34;c1&#34;&gt;# link PG 18 to PATH&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig ext link &lt;span class=&#34;m&#34;&gt;16&lt;/span&gt;                  &lt;span class=&#34;c1&#34;&gt;# link PG 16 to /usr/pgsql&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig ext link /usr/pgsql-16       &lt;span class=&#34;c1&#34;&gt;# link from a selected path to /usr/pgsql&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig ext link polar               &lt;span class=&#34;c1&#34;&gt;# link PolarDB 17 from /usr/polar-17&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig ext link null                &lt;span class=&#34;c1&#34;&gt;# remove current PostgreSQL link&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig ext link none                &lt;span class=&#34;c1&#34;&gt;# null / none / nil / nop / no all remove the link&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;This command creates the &lt;code&gt;/usr/pgsql&lt;/code&gt; symlink and writes &lt;code&gt;/etc/profile.d/pgsql.sh&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&#34;ext-reload&#34;&gt;ext reload&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#ext-reload&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Refresh extension metadata.&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-a8d2d57b-fence-14&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;1&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-a8d2d57b-fence-14&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-a8d2d57b-fence-14-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig ext reload                   &lt;span class=&#34;c1&#34;&gt;# refresh extension catalog&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;The updated catalog is stored at &lt;code&gt;~/.pig/extension.csv&lt;/code&gt;.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>CMD: sty</title>
      <link>https://ext.pgsty.com/pig/cmd/sty/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://ext.pgsty.com/pig/cmd/sty/</guid>
      <description>
        
        
        &lt;p&gt;&lt;strong&gt;pig&lt;/strong&gt; can also be used as a CLI tool for Pigsty, a batteries-included free PostgreSQL RDS solution.
It brings HA, PITR, monitoring, infrastructure as code (IaC), and rich extension support to your PostgreSQL clusters.&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-a872c0c6-fence-0&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;15&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-a872c0c6-fence-0&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-a872c0c6-fence-0-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig sty - Init &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;Download&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;, Bootstrap, Configure, and Deploy Pigsty
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig sty init    &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-mpfvd&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;        &lt;span class=&#34;c1&#34;&gt;# install pigsty (~/pigsty by default)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig sty boot    &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-rmpk&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;         &lt;span class=&#34;c1&#34;&gt;# native controller bootstrap&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig sty conf    &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;mode&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;flags&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;  &lt;span class=&#34;c1&#34;&gt;# native Inventory-aware configuration&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig sty deploy                  &lt;span class=&#34;c1&#34;&gt;# use pigsty to deploy everything (CAUTION!)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig sty get                     &lt;span class=&#34;c1&#34;&gt;# download pigsty source tarball&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig sty list                    &lt;span class=&#34;c1&#34;&gt;# list available pigsty versions&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig sty grafana &amp;lt;verb&amp;gt;          &lt;span class=&#34;c1&#34;&gt;# manage grafana dashboards (native HTTP)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Examples:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig sty init                 &lt;span class=&#34;c1&#34;&gt;# extract and init ~/pigsty&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig sty boot                 &lt;span class=&#34;c1&#34;&gt;# install ansible &amp;amp; other deps&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig sty conf                 &lt;span class=&#34;c1&#34;&gt;# generate pigsty.yml config file&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig sty deploy               &lt;span class=&#34;c1&#34;&gt;# run the deploy.yml playbook&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;div class=&#34;td-table-scroll td-table-scroll--full&#34; tabindex=&#34;0&#34; role=&#34;region&#34; aria-label=&#34;Scrollable table&#34;&gt;
&lt;table class=&#34;full-width&#34;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Command&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Notes&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;sty init&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Install Pigsty&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;sty boot&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Bootstrap the Pigsty controller&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Auto-elevates when needed&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;sty conf&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Generate and validate Inventory&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Native Go workflow&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;sty deploy&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Run deployment playbook&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;sty list&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;List available Pigsty versions&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;sty get&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Download Pigsty source tarball&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;sty grafana&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Manage Grafana dashboards (alias &lt;code&gt;gf&lt;/code&gt;)&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;New in v1.6.0&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;Since v1.8.0, &lt;code&gt;pig sty boot&lt;/code&gt; and &lt;code&gt;pig sty conf&lt;/code&gt; are native Go workflows. They no longer
invoke Pigsty&amp;rsquo;s legacy &lt;code&gt;bootstrap&lt;/code&gt; or &lt;code&gt;configure&lt;/code&gt; shell scripts. Since v1.6.0, the former&lt;code&gt;pig sty edit&lt;/code&gt; / &lt;code&gt;validate&lt;/code&gt; / &lt;code&gt;check&lt;/code&gt; commands moved to the
root-level &lt;a href=&#34;https://pig.pgsty.com/inventory/&#34;&gt;&lt;code&gt;pig inventory&lt;/code&gt;&lt;/a&gt; command group, and the experimental&lt;code&gt;pig sty dashboard&lt;/code&gt; was replaced by &lt;code&gt;pig sty grafana&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;quick-start&#34;&gt;Quick Start&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#quick-start&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Use &lt;code&gt;pig sty&lt;/code&gt; to bootstrap and deploy Pigsty on the current node.&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-a872c0c6-fence-1&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;4&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-a872c0c6-fence-1&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-a872c0c6-fence-1-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig sty boot                     &lt;span class=&#34;c1&#34;&gt;# prepare the controller; auto-elevates when needed&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig sty conf -g                  &lt;span class=&#34;c1&#34;&gt;# generate and validate pigsty.yml&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig inventory edit              &lt;span class=&#34;c1&#34;&gt;# optional: review and adjust the Inventory&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig sty deploy                   &lt;span class=&#34;c1&#34;&gt;# run deployment playbook&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;See the detailed setup guide: &lt;a href=&#34;https://pigsty.io/docs/setup/install/&#34;&gt;https://pigsty.io/docs/setup/install/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;sty boot&lt;/code&gt; initializes a missing default &lt;code&gt;~/pigsty&lt;/code&gt; tree on a best-effort basis. Use&lt;code&gt;pig sty init&lt;/code&gt; first when you need to select an explicit Pigsty version or installation path.&lt;/p&gt;
&lt;h2 id=&#34;sty-init&#34;&gt;sty init&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#sty-init&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Download and install the Pigsty distribution into &lt;code&gt;~/pigsty&lt;/code&gt;.&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-a872c0c6-fence-2&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;6&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-a872c0c6-fence-2&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-a872c0c6-fence-2-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig sty init                   &lt;span class=&#34;c1&#34;&gt;# install latest version to ~/pigsty&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig sty init -f                &lt;span class=&#34;c1&#34;&gt;# install and overwrite existing pigsty directory&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig sty init -m                &lt;span class=&#34;c1&#34;&gt;# prefer the pigsty.cc mirror for downloads&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig sty init -p /tmp/pigsty    &lt;span class=&#34;c1&#34;&gt;# install to selected directory /tmp/pigsty&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig sty init -v 3.4            &lt;span class=&#34;c1&#34;&gt;# fetch and install selected version v3.4.1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig sty init &lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;                 &lt;span class=&#34;c1&#34;&gt;# fetch and install latest v3 major version&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Options:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-p|--path&lt;/code&gt;: target installation directory, default &lt;code&gt;~/pigsty&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-f|--force&lt;/code&gt;: force overwrite of existing pigsty directory&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-m|--mirror&lt;/code&gt;: prefer the &lt;code&gt;pigsty.cc&lt;/code&gt; mirror&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-v|--version&lt;/code&gt;: Pigsty version&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-d|--dir&lt;/code&gt;: download directory, default &lt;code&gt;/tmp&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;sty-boot&#34;&gt;sty boot&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#sty-boot&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Bootstrap the Pigsty controller with the native Go workflow. The command prepares a usable
Ansible environment, supports online and offline repositories, repairs common controller
prerequisites, and reports a structured result. It never delegates to Pigsty&amp;rsquo;s legacy&lt;code&gt;bootstrap&lt;/code&gt; script and does not require &lt;code&gt;curl&lt;/code&gt;, &lt;code&gt;wget&lt;/code&gt;, &lt;code&gt;tar&lt;/code&gt;, or &lt;code&gt;gzip&lt;/code&gt; for package download
and extraction.&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-a872c0c6-fence-3&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;7&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-a872c0c6-fence-3&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-a872c0c6-fence-3-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo pig sty boot                         &lt;span class=&#34;c1&#34;&gt;# online bootstrap with the default region&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo pig sty boot -r china                &lt;span class=&#34;c1&#34;&gt;# use China-region repositories&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo pig sty boot -m                      &lt;span class=&#34;c1&#34;&gt;# equivalent to --region china&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo pig sty boot -k                      &lt;span class=&#34;c1&#34;&gt;# preserve existing repository definitions&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo pig sty boot -p /path/to/pkg.tgz     &lt;span class=&#34;c1&#34;&gt;# use an explicit offline package&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo pig sty boot -p https://host/pkg.tgz &lt;span class=&#34;c1&#34;&gt;# download and use an offline package&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo pig sty boot -o json                 &lt;span class=&#34;c1&#34;&gt;# machine-readable result and warnings&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;You may invoke the command without &lt;code&gt;sudo&lt;/code&gt;. Pig resolves and downloads an explicit source first,
then re-executes itself through &lt;code&gt;sudo&lt;/code&gt; once when root access is required. Set &lt;code&gt;PIG_NO_SUDO=1&lt;/code&gt; to
disable automatic elevation, or &lt;code&gt;PIG_NON_INTERACTIVE=1&lt;/code&gt; to make the sudo attempt non-interactive.&lt;/p&gt;
&lt;h3 id=&#34;bootstrap-stages&#34;&gt;Bootstrap stages&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#bootstrap-stages&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;The native workflow performs these stages:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;On Debian 12/13, check and repair &lt;code&gt;en_US.UTF-8&lt;/code&gt; when possible so Ansible can start.&lt;/li&gt;
&lt;li&gt;Execute &lt;code&gt;ansible-playbook&lt;/code&gt;, discover its Python interpreter, and verify &lt;code&gt;yaml&lt;/code&gt;, &lt;code&gt;jmespath&lt;/code&gt;,
and either &lt;code&gt;cryptography&lt;/code&gt; or &lt;code&gt;OpenSSL&lt;/code&gt;. A binary that cannot actually run is not considered ready.&lt;/li&gt;
&lt;li&gt;Resolve the repository source, prepare offline content when selected, and install the lean
controller package set only when Ansible is missing or unusable.&lt;/li&gt;
&lt;li&gt;Verify Ansible again after package installation and retry locale preparation when packages may
have made locale tools available.&lt;/li&gt;
&lt;li&gt;Probe controller helpers, repair key-based SSH to &lt;code&gt;127.0.0.1&lt;/code&gt; for the invoking admin user, and
initialize a missing default &lt;code&gt;~/pigsty&lt;/code&gt; tree when possible.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Explicit, automatically discovered, and already committed offline sources are prepared even when
Ansible is already usable. This makes &lt;code&gt;sty boot&lt;/code&gt; suitable for staging an offline repository on an
otherwise ready controller.&lt;/p&gt;
&lt;h3 id=&#34;source-selection-and-modes&#34;&gt;Source selection and modes&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#source-selection-and-modes&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;The result records one of four bootstrap modes:&lt;/p&gt;
&lt;div class=&#34;td-table-scroll&#34; tabindex=&#34;0&#34; role=&#34;region&#34; aria-label=&#34;Scrollable table&#34;&gt;
&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th scope=&#34;col&#34;&gt;Mode&lt;/th&gt;
      &lt;th scope=&#34;col&#34;&gt;Meaning&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code&gt;ready&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;Ansible was already usable and no offline source needed preparation.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code&gt;offline&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;An explicit, trusted automatic, or committed offline repository was selected.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code&gt;online&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;Regional online repositories were configured to repair the controller.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code&gt;existing&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;An online refresh failed under &lt;code&gt;--keep&lt;/code&gt;, and existing repository definitions were successfully used as a fallback.&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;p&gt;Source precedence and safety rules are deterministic:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;--path&lt;/code&gt; accepts a local archive or an HTTP(S) URL. URL credentials are rejected, and a bad
explicit source is a hard error rather than an online fallback.&lt;/li&gt;
&lt;li&gt;An automatically discovered &lt;code&gt;/tmp/pkg.tgz&lt;/code&gt; must be a regular, non-group/world-writable file
owned by root or the invoking sudo user. Unsafe candidates are ignored with a warning.&lt;/li&gt;
&lt;li&gt;A completed &lt;code&gt;/www/pigsty&lt;/code&gt; repository takes precedence over a selected package. If both exist,
the committed repository is reused and the package is left untouched with a warning.&lt;/li&gt;
&lt;li&gt;Archives are downloaded and extracted by Pig itself. If &lt;code&gt;/www&lt;/code&gt; does not exist, Pig creates&lt;code&gt;/data/nginx&lt;/code&gt; and the expected &lt;code&gt;/www -&amp;gt; /data/nginx&lt;/code&gt; symbolic link before committing content.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Offline mode enables only the strict &lt;code&gt;pigsty-local&lt;/code&gt; repository. Online mode configures the
selected region, installs Pigsty&amp;rsquo;s embedded signing key with repository signature checks enabled,
and installs the &lt;code&gt;node&lt;/code&gt; and &lt;code&gt;pigsty&lt;/code&gt; controller modules.&lt;/p&gt;
&lt;h3 id=&#34;repository-transaction-and-failure-boundary&#34;&gt;Repository transaction and failure boundary&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#repository-transaction-and-failure-boundary&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;By default, repository definitions are backed up before replacement. If repository setup or
package installation fails, Pig attempts to restore the backup and reports whether rollback
succeeded or failed. &lt;code&gt;--keep&lt;/code&gt; changes the policy to additive operation: existing definitions are
preserved, online refresh may fall back to them, and no replacement rollback is required.&lt;/p&gt;
&lt;p&gt;Invalid explicit sources, unsupported package management when installation is required,
repository/package failures, and an unusable post-install Ansible runtime are command failures.
Locale repair, optional helper probes, localhost SSH repair, and Pigsty tree initialization are
advisory finishing steps; their failures are retained as warnings in an otherwise usable result.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Options:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-r|--region&lt;/code&gt;: region, such as default, china, europe&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-m|--mirror&lt;/code&gt;: equivalent to &lt;code&gt;--region china&lt;/code&gt;; mutually exclusive with &lt;code&gt;--region&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-p|--path&lt;/code&gt;: offline package file or HTTP(S) URL; an invalid explicit source is a hard error&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-k|--keep&lt;/code&gt;: preserve existing repositories instead of replacing them&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;structured-output&#34;&gt;Structured output&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#structured-output&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;Use the global &lt;code&gt;-o json&lt;/code&gt; or &lt;code&gt;-o yaml&lt;/code&gt; flag for automation. The payload kind is&lt;code&gt;pig.sty.boot/v2&lt;/code&gt; and includes the Ansible state, selected mode and package manager, repository
policy and rollback result, source and repository paths, locale, localhost SSH and Pigsty tree
initialization status, whether the machine changed, warnings, and these recommended next steps:&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-a872c0c6-fence-4&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;3&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-a872c0c6-fence-4&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-a872c0c6-fence-4-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig sty conf -g
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig inv edit
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig sty deploy&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;Dynamic progress is suppressed in structured mode, so stdout remains machine-readable.&lt;/p&gt;
&lt;p&gt;See: &lt;a href=&#34;https://pigsty.io/docs/setup/offline/#bootstrap&#34;&gt;https://pigsty.io/docs/setup/offline/#bootstrap&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;sty-conf&#34;&gt;sty conf&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#sty-conf&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Generate Pigsty Inventory through the native Go workflow. &lt;code&gt;sty conf&lt;/code&gt; reads one template below&lt;code&gt;&amp;lt;PIGSTY_HOME&amp;gt;/conf&lt;/code&gt;, applies bounded structural mutations, validates the complete candidate,
and atomically writes an owner-only Inventory. It does not invoke or fall back to &lt;code&gt;./configure&lt;/code&gt;.&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-a872c0c6-fence-5&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;11&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-a872c0c6-fence-5&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-a872c0c6-fence-5-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig sty conf                         &lt;span class=&#34;c1&#34;&gt;# use conf/meta.yml and write pigsty.yml&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig sty conf -g                      &lt;span class=&#34;c1&#34;&gt;# generate random passwords (recommended)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig sty conf rich                    &lt;span class=&#34;c1&#34;&gt;# positional mode selects conf/rich.yml&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig sty conf -c ha/full              &lt;span class=&#34;c1&#34;&gt;# equivalent flag form; do not combine both forms&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig sty conf ha/trio --ip 10.0.0.10,10.0.0.11,10.0.0.12
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig sty conf --domain infra.example.com
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig sty conf rich -v &lt;span class=&#34;m&#34;&gt;18&lt;/span&gt;              &lt;span class=&#34;c1&#34;&gt;# request PostgreSQL 18 for a generic template&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig sty conf -r china -s             &lt;span class=&#34;c1&#34;&gt;# China region, placeholder IP, no admin preflight&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig sty conf -x                       &lt;span class=&#34;c1&#34;&gt;# materialize proxy environment variables&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig sty conf full -g -O ha.yml       &lt;span class=&#34;c1&#34;&gt;# custom owner-only output file&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig sty conf -n --ip 10.0.0.10 -o json&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;The default mode is &lt;code&gt;meta&lt;/code&gt;; &lt;code&gt;pig sty c&lt;/code&gt; and &lt;code&gt;pig sty configure&lt;/code&gt; are command aliases. Note that&lt;code&gt;-O&lt;/code&gt; selects the Inventory output file, while the global lowercase &lt;code&gt;-o&lt;/code&gt; selects text, JSON, or
YAML command output.&lt;/p&gt;
&lt;h3 id=&#34;template-and-output-safety&#34;&gt;Template and output safety&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#template-and-output-safety&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;A mode is a slash-separated relative name below &lt;code&gt;&amp;lt;PIGSTY_HOME&amp;gt;/conf&lt;/code&gt;; &lt;code&gt;.yml&lt;/code&gt; is optional.
Absolute paths, traversal, empty segments, and path escape are rejected.&lt;/li&gt;
&lt;li&gt;Relative output paths are resolved below &lt;code&gt;&amp;lt;PIGSTY_HOME&amp;gt;&lt;/code&gt;; absolute output paths are retained.&lt;/li&gt;
&lt;li&gt;The destination cannot alias the source through the same path, an existing symlink, a
symlinked parent, or a hard link. An existing output symlink is always refused.&lt;/li&gt;
&lt;li&gt;Pig parses the source and rejects conflicting IP mappings before running external preflight
checks. A parse, mutation, preflight, or validation failure leaves the destination unchanged.&lt;/li&gt;
&lt;li&gt;A successful result is written atomically with mode &lt;code&gt;0600&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;structural-mutations&#34;&gt;Structural mutations&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#structural-mutations&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;The command edits parsed YAML structures and bounded scalar tokens rather than applying broad
text substitutions:&lt;/p&gt;
&lt;div class=&#34;td-table-scroll&#34; tabindex=&#34;0&#34; role=&#34;region&#34; aria-label=&#34;Scrollable table&#34;&gt;
&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th scope=&#34;col&#34;&gt;Input&lt;/th&gt;
      &lt;th scope=&#34;col&#34;&gt;Native behavior&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code&gt;--ip A,B,...&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;Maps up to ten distinct addresses, in order, to &lt;code&gt;10.10.10.10&lt;/code&gt; through &lt;code&gt;10.10.10.19&lt;/code&gt;. Replacement is simultaneous, so swaps are safe and unrelated VIPs remain intact.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;no &lt;code&gt;--ip&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;Detects local interfaces. Interactive mode asks when selection is ambiguous; &lt;code&gt;--non-interactive&lt;/code&gt; or closed stdin fails with guidance to pass &lt;code&gt;--ip&lt;/code&gt;.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code&gt;--domain NAME&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;Replaces only the exact &lt;code&gt;i.pigsty&lt;/code&gt; token, not names such as &lt;code&gt;cli.pigsty&lt;/code&gt; or &lt;code&gt;i.pigsty.cc&lt;/code&gt;; NAME must be a valid DNS domain.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;small controller&lt;/td&gt;
      &lt;td&gt;When detected CPU count is below four, rewrites &lt;code&gt;node_tune: oltp&lt;/code&gt; and &lt;code&gt;pg_conf: oltp.yml&lt;/code&gt; to their &lt;code&gt;tiny&lt;/code&gt; profiles.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code&gt;--region REGION&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;Updates &lt;code&gt;all.vars.region&lt;/code&gt; for non-default regions. &lt;code&gt;china&lt;/code&gt; also activates template-provided Docker and pip mirrors, but never invents values absent from the template.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code&gt;--proxy&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;Writes non-empty &lt;code&gt;HTTP_PROXY&lt;/code&gt;/&lt;code&gt;http_proxy&lt;/code&gt;, &lt;code&gt;HTTPS_PROXY&lt;/code&gt; (falling back to &lt;code&gt;ALL_PROXY&lt;/code&gt;), &lt;code&gt;ALL_PROXY&lt;/code&gt;, and &lt;code&gt;NO_PROXY&lt;/code&gt; values into &lt;code&gt;all.vars.proxy_env&lt;/code&gt;; a safe default no-proxy list is used when needed.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code&gt;--version MAJOR&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;Updates generic templates for PostgreSQL 14-18, or explicit 19 beta, and selects the matching locale. Version-pinned &lt;code&gt;mssql&lt;/code&gt;, &lt;code&gt;polar&lt;/code&gt;, and &lt;code&gt;pgNN&lt;/code&gt; modes keep their template version and report a warning.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code&gt;--generate&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;Generates one 24-character value per known credential identifier and consistently replaces its active values and documented placeholders.&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;p&gt;An IP mapping that would collide with an unreplaced Inventory key is rejected as an invalid
argument. A supplied address with no matching placeholder slot is retained in structured output
as a discarded-IP warning rather than being silently ignored.&lt;/p&gt;
&lt;p&gt;For PostgreSQL 19 beta, Pig also enables the &lt;code&gt;beta&lt;/code&gt; repository after &lt;code&gt;pgsql&lt;/code&gt; when the template
contains the expected repository list. Modes below &lt;code&gt;conf/build/&lt;/code&gt; intentionally bypass IP mapping
and controller-admin preflight so build templates remain portable.&lt;/p&gt;
&lt;p&gt;Active password identifiers are &lt;code&gt;grafana_admin_password&lt;/code&gt;, &lt;code&gt;pg_admin_password&lt;/code&gt;,&lt;code&gt;pg_monitor_password&lt;/code&gt;, &lt;code&gt;pg_replication_password&lt;/code&gt;, &lt;code&gt;patroni_password&lt;/code&gt;,&lt;code&gt;haproxy_admin_password&lt;/code&gt;, &lt;code&gt;minio_secret_key&lt;/code&gt;, and &lt;code&gt;etcd_root_password&lt;/code&gt;. Generation also covers
the documented &lt;code&gt;DBUser.Meta&lt;/code&gt;, &lt;code&gt;DBUser.Viewer&lt;/code&gt;, &lt;code&gt;S3User.Backup&lt;/code&gt;, &lt;code&gt;S3User.Meta&lt;/code&gt;, &lt;code&gt;S3User.Data&lt;/code&gt;,&lt;code&gt;DBUser.Supa&lt;/code&gt;, and &lt;code&gt;Vibe.Coding&lt;/code&gt; placeholders. Repeated occurrences of one identifier receive the
same generated value.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Options:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-c|--conf&lt;/code&gt;: template mode, equivalent to positional &lt;code&gt;[mode]&lt;/code&gt;; the two forms are exclusive&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--ip&lt;/code&gt;: up to ten distinct comma-separated IPv4 addresses&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--domain&lt;/code&gt;: replace the exact &lt;code&gt;i.pigsty&lt;/code&gt; placeholder with a valid DNS domain&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-v|--version&lt;/code&gt;: PostgreSQL major version, 18/17/16/15/14; 19 beta can be specified explicitly&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-r|--region&lt;/code&gt;: upstream repository region, such as default/china/europe&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-m|--mirror&lt;/code&gt;: equivalent to &lt;code&gt;--region china&lt;/code&gt;; mutually exclusive with &lt;code&gt;--region&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-O|--output-file&lt;/code&gt;: output config file path, default &lt;code&gt;pigsty.yml&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-s|--skip&lt;/code&gt;: keep the placeholder IP and skip admin SSH/sudo preflight; exclusive with &lt;code&gt;--ip&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-p|--port&lt;/code&gt;: SSH port&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-x|--proxy&lt;/code&gt;: write non-empty proxy environment variables into &lt;code&gt;all.vars.proxy_env&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-n|--non-interactive&lt;/code&gt;: refuse ambiguous IP selection instead of prompting&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-g|--generate&lt;/code&gt;: replace known demo credentials with random 24-character values&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;preflight-and-validation&#34;&gt;Preflight and validation&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#preflight-and-validation&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;Unless &lt;code&gt;--skip&lt;/code&gt; is used, Pig inspects the kernel, architecture, package manager, platform vendor,
controller resources, sudo/admin access, localhost SSH, and Ansible availability. &lt;code&gt;--port&lt;/code&gt; is used
for the SSH check. These diagnostics are returned as actionable warnings where the Inventory can
still be generated; invalid arguments and unsafe configuration transformations remain errors.&lt;/p&gt;
&lt;p&gt;The rendered candidate must pass Pig&amp;rsquo;s native Inventory validation. When &lt;code&gt;ansible-inventory&lt;/code&gt; is
available, Pig also runs a bounded external parse before committing the file. &lt;code&gt;--skip&lt;/code&gt; preserves
placeholder IPs and bypasses admin SSH/sudo preflight, but it does not disable template parsing,
safe mutation, Inventory validation, or atomic writing.&lt;/p&gt;
&lt;h3 id=&#34;structured-output-1&#34;&gt;Structured output&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#structured-output-1&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;With global &lt;code&gt;-o json&lt;/code&gt; or &lt;code&gt;-o yaml&lt;/code&gt;, the payload kind is &lt;code&gt;pig.sty.configure/v1&lt;/code&gt;. It reports the
mode, source and output paths, region, chosen primary address, applied and discarded IPs, domain,
SSH port, requested and effective PostgreSQL versions, native-workflow marker, generated secret
identifiers, and warnings. Secret values are never printed.&lt;/p&gt;
&lt;p&gt;See: &lt;a href=&#34;https://pigsty.io/docs/setup/install/#configure&#34;&gt;https://pigsty.io/docs/setup/install/#configure&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;sty-deploy&#34;&gt;sty deploy&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#sty-deploy&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Deploy Pigsty with the &lt;code&gt;deploy.yml&lt;/code&gt; playbook.&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-a872c0c6-fence-6&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;3&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-a872c0c6-fence-6&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-a872c0c6-fence-6-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig sty deploy       &lt;span class=&#34;c1&#34;&gt;# run deploy.yml, falling back to install.yml if not found&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig sty d            &lt;span class=&#34;c1&#34;&gt;# short alias&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig sty de           &lt;span class=&#34;c1&#34;&gt;# short alias&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;This command runs the &lt;code&gt;deploy.yml&lt;/code&gt; playbook from your Pigsty installation directory. For backward compatibility, if &lt;code&gt;deploy.yml&lt;/code&gt; does not exist but &lt;code&gt;install.yml&lt;/code&gt; exists, &lt;code&gt;install.yml&lt;/code&gt; is used instead.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Warning&lt;/strong&gt;: This operation modifies your system, and &lt;strong&gt;invocation is explicit consent&lt;/strong&gt; —
deploy starts immediately without a &lt;code&gt;--yes&lt;/code&gt; gate; use Ctrl+C to interrupt a mistaken run.
(The &lt;code&gt;pig sty install&lt;/code&gt; / &lt;code&gt;ins&lt;/code&gt; aliases were removed in v1.6.0.)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;sty-list&#34;&gt;sty list&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#sty-list&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;List available Pigsty versions.&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-a872c0c6-fence-7&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;1&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-a872c0c6-fence-7&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-a872c0c6-fence-7-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig sty list                     &lt;span class=&#34;c1&#34;&gt;# list available versions&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;h2 id=&#34;sty-get&#34;&gt;sty get&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#sty-get&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Download the Pigsty source tarball.&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-a872c0c6-fence-8&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;3&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-a872c0c6-fence-8&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-a872c0c6-fence-8-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig sty get                      &lt;span class=&#34;c1&#34;&gt;# download latest version&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig sty get v3.4.0               &lt;span class=&#34;c1&#34;&gt;# download selected version&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig sty get -m                   &lt;span class=&#34;c1&#34;&gt;# prefer the pigsty.cc mirror&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;h2 id=&#34;sty-grafana&#34;&gt;sty grafana&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#sty-grafana&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Since v1.6.0, &lt;code&gt;pig sty grafana&lt;/code&gt; (alias &lt;code&gt;gf&lt;/code&gt;) manages Grafana dashboards through the native
HTTP API, replacing the experimental &lt;code&gt;pig sty dashboard&lt;/code&gt;. The &lt;code&gt;PATH&lt;/code&gt; argument may select the
grafana root, one direct folder, or one dashboard JSON file; without &lt;code&gt;PATH&lt;/code&gt;, pig resolves&lt;code&gt;&amp;lt;PIGSTY_HOME&amp;gt;/files/grafana&lt;/code&gt; and never falls back to the current directory.&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-a872c0c6-fence-9&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;9&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-a872c0c6-fence-9&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-a872c0c6-fence-9-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig sty grafana info             &lt;span class=&#34;c1&#34;&gt;# check Grafana health, authentication, and basic info&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig sty grafana list             &lt;span class=&#34;c1&#34;&gt;# list all dashboards in the active organization&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig sty grafana boot             &lt;span class=&#34;c1&#34;&gt;# bootstrap Grafana around the existing pigsty dashboards&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig sty grafana init             &lt;span class=&#34;c1&#34;&gt;# load the complete dashboard corpus, then bootstrap&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig sty grafana load &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;PATH&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;      &lt;span class=&#34;c1&#34;&gt;# load dashboards selected by a local path&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig sty grafana dump &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;PATH&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;      &lt;span class=&#34;c1&#34;&gt;# export remote dashboards into a local path&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig sty grafana clean &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;PATH&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;     &lt;span class=&#34;c1&#34;&gt;# delete dashboards selected by a path (--dry-run/--yes)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig sty grafana lang zh-Hans     &lt;span class=&#34;c1&#34;&gt;# set the organization and current-user language&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig sty grafana style            &lt;span class=&#34;c1&#34;&gt;# set the organization and current-user visual style&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Connection and credentials&lt;/strong&gt;:&lt;/p&gt;
&lt;div class=&#34;td-table-scroll td-table-scroll--full&#34; tabindex=&#34;0&#34; role=&#34;region&#34; aria-label=&#34;Scrollable table&#34;&gt;
&lt;table class=&#34;full-width&#34;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Option&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--endpoint&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Grafana origin and optional path prefix (default &lt;code&gt;http://i.pigsty/ui&lt;/code&gt;)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--username&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Grafana API username&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--password&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Grafana API password (&lt;strong&gt;insecure&lt;/strong&gt;: visible in process arguments and shell history)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--password-file&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Owner-only file containing the password (recommended)&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;p&gt;Password resolution order: &lt;code&gt;--password&lt;/code&gt; → &lt;code&gt;--password-file&lt;/code&gt; → the &lt;code&gt;GRAFANA_PASSWORD&lt;/code&gt;
environment variable → &lt;code&gt;all.vars.grafana_admin_password&lt;/code&gt; from the inventory.
The HTTP client enforces timeouts and response-size limits, refuses redirects, and
verifies TLS certificates by default.&lt;/p&gt;
&lt;h3 id=&#34;legacy-dashboards-and-schema-v2-resources&#34;&gt;Legacy dashboards and schema v2 resources&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#legacy-dashboards-and-schema-v2-resources&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;load&lt;/code&gt; and &lt;code&gt;init&lt;/code&gt; accept both classic Grafana dashboard JSON and the resource form whose identity is exactly:&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-a872c0c6-fence-10&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;json&#34; data-td-line-count=&#34;1&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-a872c0c6-fence-10&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-a872c0c6-fence-10-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;#34;apiVersion&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;dashboard.grafana.app/v2&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;#34;kind&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Dashboard&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;#34;metadata&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:{&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;#34;name&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;pgsql-overview&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;#34;namespace&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;default&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;#34;spec&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:{}}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;The two formats are not flattened into one another during loading:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Classic JSON takes its UID from top-level &lt;code&gt;uid&lt;/code&gt; and uses the legacy dashboard API.&lt;/li&gt;
&lt;li&gt;Schema v2 takes its UID from &lt;code&gt;metadata.name&lt;/code&gt;, defaults a missing namespace to &lt;code&gt;default&lt;/code&gt;, requires an object-valued &lt;code&gt;spec&lt;/code&gt;, and uses Grafana&amp;rsquo;s dashboard resource API.&lt;/li&gt;
&lt;li&gt;The JSON filename (without &lt;code&gt;.json&lt;/code&gt;) must match the resolved UID. Only one local folder layer is allowed; its directory name becomes the Grafana folder UID.&lt;/li&gt;
&lt;li&gt;For schema v2, PIG preserves &lt;code&gt;spec&lt;/code&gt; and the &lt;code&gt;grafana.app/message&lt;/code&gt; annotation, sets &lt;code&gt;grafana.app/folder&lt;/code&gt; from the local folder, and deliberately removes server-managed metadata/status before upsert.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dump&lt;/code&gt; preserves schema v2 only when the target file already exists locally in v2 form; it then fetches the native v2 resource using that file&amp;rsquo;s namespace. A new dump target defaults to classic JSON. Local-only files are never deleted by &lt;code&gt;dump&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Other &lt;code&gt;dashboard.grafana.app/*&lt;/code&gt; versions or malformed resource envelopes are rejected instead of being silently treated as classic dashboards. Format preservation therefore depends on keeping the existing local file when round-tripping v2 resources.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>CMD: build</title>
      <link>https://ext.pgsty.com/pig/cmd/build/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://ext.pgsty.com/pig/cmd/build/</guid>
      <description>
        
        
        &lt;p&gt;The &lt;code&gt;pig build&lt;/code&gt; command simplifies the full workflow for building PostgreSQL extensions from source. It provides build infrastructure setup, dependency management, and compilation environments for standard and custom PostgreSQL extensions across supported operating systems.&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-fac13c84-fence-0&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;20&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-fac13c84-fence-0&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-fac13c84-fence-0-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig build - Build Postgres Extension
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Environment Setup:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig build spec                   &lt;span class=&#34;c1&#34;&gt;# init build spec and directory (~ext)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig build repo                   &lt;span class=&#34;c1&#34;&gt;# init build repo (=repo set -ru)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig build repo  &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;--beta&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;         &lt;span class=&#34;c1&#34;&gt;# init build repo with PostgreSQL beta repo&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig build tool  &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;mini&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;full&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;...&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;  &lt;span class=&#34;c1&#34;&gt;# init build toolset&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig build rust  &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-y&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-m&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;        &lt;span class=&#34;c1&#34;&gt;# install Rust toolchain&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig build pgrx  &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-v &amp;lt;ver&amp;gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-b&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;  &lt;span class=&#34;c1&#34;&gt;# install &amp;amp; init pgrx (0.19.1)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig build proxy &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;id@host:port &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;  &lt;span class=&#34;c1&#34;&gt;# init build proxy (optional)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Package Building:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig build pkg   &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;ext&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;pkg...&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;     &lt;span class=&#34;c1&#34;&gt;# complete pipeline: get + dep + ext&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig build get   &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;ext&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;pkg...&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;     &lt;span class=&#34;c1&#34;&gt;# download extension source tarball&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig build dep   &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;ext&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;pkg...&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;     &lt;span class=&#34;c1&#34;&gt;# install extension build dependencies&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig build ext   &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;ext&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;pkg...&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;     &lt;span class=&#34;c1&#34;&gt;# build extension package&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Quick Start:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig build spec                   &lt;span class=&#34;c1&#34;&gt;# setup build spec and directory&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig build pkg citus              &lt;span class=&#34;c1&#34;&gt;# build citus extension&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;div class=&#34;td-table-scroll td-table-scroll--full&#34; tabindex=&#34;0&#34; role=&#34;region&#34; aria-label=&#34;Scrollable table&#34;&gt;
&lt;table class=&#34;full-width&#34;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Command&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Notes&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;build spec&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Initialize build specification directory&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;build repo&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Initialize required repositories&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Requires sudo or root&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;build tool&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Initialize build tools&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Requires sudo or root&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;build rust&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Install Rust toolchain&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Requires sudo or root&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;build pgrx&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Install and initialize pgrx&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Requires sudo or root&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;build proxy&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Initialize build proxy&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;build get&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Download source tarballs&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;build dep&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Install extension build dependencies&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Requires sudo or root&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;build ext&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Build extension packages&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Requires sudo or root&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;build pkg&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Complete pipeline: get, dep, ext&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Requires sudo or root&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;h2 id=&#34;quick-start&#34;&gt;Quick Start&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#quick-start&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;The fastest way to set up a build environment and build an extension:&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-fac13c84-fence-1&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;9&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-fac13c84-fence-1&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-fac13c84-fence-1-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Step 1: initialize build specs&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig build spec
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Step 2: build an extension with the complete pipeline&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig build pkg citus
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Built packages will be placed under:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# - EL: ~/ext/pkg/ (also available via ~/rpmbuild/RPMS/)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# - Debian: ~/ext/pkg/ (also available via ~/debbuild/DEBS/)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;For finer control:&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-fac13c84-fence-2&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;12&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-fac13c84-fence-2&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-fac13c84-fence-2-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Environment setup&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig build spec                   &lt;span class=&#34;c1&#34;&gt;# initialize build specs&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig build repo                   &lt;span class=&#34;c1&#34;&gt;# configure repositories&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig build tool                   &lt;span class=&#34;c1&#34;&gt;# install build tools&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Build steps&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig build get citus              &lt;span class=&#34;c1&#34;&gt;# download source&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig build dep citus              &lt;span class=&#34;c1&#34;&gt;# install dependencies&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig build ext citus              &lt;span class=&#34;c1&#34;&gt;# build package&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Or run all three steps at once&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig build pkg citus              &lt;span class=&#34;c1&#34;&gt;# get + dep + ext&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;h2 id=&#34;build-infrastructure&#34;&gt;Build Infrastructure&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#build-infrastructure&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;h3 id=&#34;directory-layout&#34;&gt;Directory Layout&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#directory-layout&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h3&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-fac13c84-fence-3&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;&#34; data-td-line-count=&#34;19&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-fac13c84-fence-3&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-fac13c84-fence-3-viewport&#34; data-td-code-viewport&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;~/ext/                           # real working directory
├── pkg/                         # built package output
├── src/                         # source tarball downloads
├── log/                         # build logs
└── tmp/                         # temporary files

~/rpmbuild/                      # EL build directory
├── RPMS -&amp;gt; ~/ext/pkg            # RPM output symlink
├── SOURCES -&amp;gt; ~/ext/src         # source symlink
├── SPECS/
├── BUILD/
├── BUILDROOT/
└── SRPMS/

~/debbuild/                      # Debian / Ubuntu build directory
├── DEBS -&amp;gt; ~/ext/pkg            # DEB output symlink
├── SOURCES -&amp;gt; ~/ext/src         # source symlink
├── SPECS/
└── BUILD/&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Build output locations:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;EL systems&lt;/strong&gt;: &lt;code&gt;~/ext/pkg/&lt;/code&gt;, also accessible through &lt;code&gt;~/rpmbuild/RPMS/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Debian systems&lt;/strong&gt;: &lt;code&gt;~/ext/pkg/&lt;/code&gt;, also accessible through &lt;code&gt;~/debbuild/DEBS/&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;build-spec&#34;&gt;build spec&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#build-spec&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Set up build specifications and directory layout.&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-fac13c84-fence-4&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;3&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-fac13c84-fence-4&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-fac13c84-fence-4-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig build spec                   &lt;span class=&#34;c1&#34;&gt;# initialize ~/ext at the default location&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig build spec -f                &lt;span class=&#34;c1&#34;&gt;# force re-download of the build spec tarball&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig build spec -m                &lt;span class=&#34;c1&#34;&gt;# prefer the pigsty.cc China mirror&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;What it does:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Downloads the RPM or DEB build specification tarball.&lt;/li&gt;
&lt;li&gt;Creates &lt;code&gt;~/ext/{pkg,src,log,tmp}&lt;/code&gt; and the platform build directory.&lt;/li&gt;
&lt;li&gt;Links &lt;code&gt;RPMS&lt;/code&gt;/&lt;code&gt;DEBS&lt;/code&gt; and &lt;code&gt;SOURCES&lt;/code&gt; to &lt;code&gt;~/ext/pkg&lt;/code&gt; and &lt;code&gt;~/ext/src&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Syncs makefiles, specs, and Debian packaging files with incremental &lt;code&gt;rsync&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Working directory:&lt;/strong&gt; &lt;code&gt;~/ext/&lt;/code&gt; stores sources, packages, logs, and temporary files. The platform packaging directory is &lt;code&gt;~/rpmbuild/&lt;/code&gt; or &lt;code&gt;~/debbuild/&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&#34;build-repo&#34;&gt;build repo&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#build-repo&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Initialize package repositories required for building extensions.&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-fac13c84-fence-5&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;3&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-fac13c84-fence-5&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-fac13c84-fence-5-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig build repo                   &lt;span class=&#34;c1&#34;&gt;# equivalent to: pig repo set -ru&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig build repo -m                &lt;span class=&#34;c1&#34;&gt;# use China mirrors (Tencent Cloud first for PGDG)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig build repo -b                &lt;span class=&#34;c1&#34;&gt;# include PostgreSQL beta repository&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;What it does:&lt;/strong&gt; initializes build repositories with &lt;code&gt;pig repo set -ru&lt;/code&gt;: remove old repositories, add required repositories, and refresh package caches.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Options:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-m|--mirror&lt;/code&gt;: prefer China mirrors (Tencent Cloud first for PGDG).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-b|--beta&lt;/code&gt;: include the PostgreSQL beta repository module, currently for PG19 beta builds.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;build-tool&#34;&gt;build tool&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#build-tool&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Install development tools and compilers.&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-fac13c84-fence-6&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;5&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-fac13c84-fence-6&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-fac13c84-fence-6-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig build tool                   &lt;span class=&#34;c1&#34;&gt;# install default toolset&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig build tool mini              &lt;span class=&#34;c1&#34;&gt;# minimal toolset&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig build tool full              &lt;span class=&#34;c1&#34;&gt;# full toolset&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig build tool rust              &lt;span class=&#34;c1&#34;&gt;# add Rust development tools&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig build tool -b                &lt;span class=&#34;c1&#34;&gt;# include PostgreSQL beta build packages&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Toolsets:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Minimal (&lt;code&gt;mini&lt;/code&gt;)&lt;/strong&gt;: GCC/Clang compilers, Make, core build tools, PostgreSQL development headers, and basic libraries.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Default&lt;/strong&gt;: minimal tools plus extra compilers, development libraries, and packaging tools such as &lt;code&gt;rpmbuild&lt;/code&gt; and &lt;code&gt;dpkg-dev&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Full (&lt;code&gt;full&lt;/code&gt;)&lt;/strong&gt;: default tools plus language-specific development tools and advanced debugging or profiling utilities.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;On EL systems, the default build toolset installs explicit PostgreSQL development/server packages for the stable active majors. Use &lt;code&gt;--beta&lt;/code&gt; when you also need the current beta major.&lt;/p&gt;
&lt;h2 id=&#34;build-rust&#34;&gt;build rust&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#build-rust&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Install the Rust toolchain required by Rust-based extensions.&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-fac13c84-fence-7&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;3&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-fac13c84-fence-7&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-fac13c84-fence-7-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig build rust                   &lt;span class=&#34;c1&#34;&gt;# install with confirmation&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig build rust -y                &lt;span class=&#34;c1&#34;&gt;# force reinstall Rust toolchain&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig build rust -m                &lt;span class=&#34;c1&#34;&gt;# use rsproxy.cn and Cargo mirror config&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Installed components:&lt;/strong&gt; Rust compiler (&lt;code&gt;rustc&lt;/code&gt;), Cargo, Rust standard library, and development tools.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Options:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-y|--yes&lt;/code&gt;: force Rust reinstallation even if Cargo already exists.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-m|--mirror&lt;/code&gt;: download &lt;code&gt;rustup&lt;/code&gt; from the China mirror and write &lt;code&gt;~/.cargo/config.toml&lt;/code&gt; for &lt;code&gt;rsproxy.cn&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;build-pgrx&#34;&gt;build pgrx&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#build-pgrx&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Install and initialize PGRX, the PostgreSQL extension framework for Rust.&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-fac13c84-fence-8&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;5&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-fac13c84-fence-8&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-fac13c84-fence-8-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig build pgrx                   &lt;span class=&#34;c1&#34;&gt;# install latest stable version (0.19.1)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig build pgrx -v 0.19.1         &lt;span class=&#34;c1&#34;&gt;# install a specific pgrx version&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig build pgrx --pg 18,17,16     &lt;span class=&#34;c1&#34;&gt;# initialize pgrx for selected PG versions&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig build pgrx --pg init         &lt;span class=&#34;c1&#34;&gt;# run cargo pgrx init without PG arguments&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig build pgrx -b                &lt;span class=&#34;c1&#34;&gt;# include beta PostgreSQL pg_config in auto-detect&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Prerequisites:&lt;/strong&gt; Rust toolchain and PostgreSQL development headers must be installed first.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Options:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-v|--pgrx&lt;/code&gt;: cargo-pgrx version to install.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--pg&lt;/code&gt;: comma-separated PostgreSQL majors, &lt;code&gt;init&lt;/code&gt; for no PostgreSQL arguments, or empty for auto-detection.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-b|--beta&lt;/code&gt;: include the current beta major during auto-detection.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;build-proxy&#34;&gt;build proxy&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#build-proxy&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Configure a proxy for build environments with restricted internet access.&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-fac13c84-fence-9&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;3&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-fac13c84-fence-9&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-fac13c84-fence-9-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig build proxy                  &lt;span class=&#34;c1&#34;&gt;# interactive setup&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig build proxy user@host:8080   &lt;span class=&#34;c1&#34;&gt;# use default local endpoint 127.0.0.1:12345&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig build proxy user@host:8080 127.0.0.1:1080&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;h2 id=&#34;build-get&#34;&gt;build get&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#build-get&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Download extension source tarballs.&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-fac13c84-fence-10&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;5&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-fac13c84-fence-10&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-fac13c84-fence-10-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig build get citus              &lt;span class=&#34;c1&#34;&gt;# single extension&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig build get citus pgvector     &lt;span class=&#34;c1&#34;&gt;# multiple extensions&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig build get pdu pgdog          &lt;span class=&#34;c1&#34;&gt;# use built-in source aliases&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig build get citus -f           &lt;span class=&#34;c1&#34;&gt;# re-download even if the file already exists&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig build get citus -m           &lt;span class=&#34;c1&#34;&gt;# prefer the pigsty.cc China mirror&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;Arguments to &lt;code&gt;pig build get&lt;/code&gt; are extension names, package names, or source filenames. Unknown names are treated as source filenames. It does not expand &lt;code&gt;all&lt;/code&gt; or &lt;code&gt;std&lt;/code&gt; into built-in package sets; list the target package names explicitly for batch downloads.&lt;/p&gt;
&lt;p&gt;Some source packages do not map directly to extension names, so &lt;code&gt;pig build get&lt;/code&gt; includes special aliases for direct source downloads.&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-fac13c84-fence-11&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;6&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-fac13c84-fence-11&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-fac13c84-fence-11-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig build get pdu                &lt;span class=&#34;c1&#34;&gt;# download pdu-3.0.25.12.tar.gz&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig build get pgdog              &lt;span class=&#34;c1&#34;&gt;# download pgdog-0.1.32.tar.gz&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig build get pgedge-17          &lt;span class=&#34;c1&#34;&gt;# download PostgreSQL 17 plus pgEdge suite sources&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig build get babelfish-18       &lt;span class=&#34;c1&#34;&gt;# download Babelfish PG18 source bundle&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig build get orioledb-16        &lt;span class=&#34;c1&#34;&gt;# download OrioleDB plus PG16 patch bundle&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig build get onesparse          &lt;span class=&#34;c1&#34;&gt;# download onesparse, graphblas, and lagraph&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;Common special source aliases include: &lt;code&gt;babelfish&lt;/code&gt; / &lt;code&gt;babelfish-17&lt;/code&gt; / &lt;code&gt;babelfish-18&lt;/code&gt;, &lt;code&gt;ivorysql&lt;/code&gt;, &lt;code&gt;orioledb&lt;/code&gt; / &lt;code&gt;orioledb-16&lt;/code&gt; / &lt;code&gt;orioledb-17&lt;/code&gt; / &lt;code&gt;orioledb-18&lt;/code&gt;, &lt;code&gt;cloudberry&lt;/code&gt; / &lt;code&gt;cloudberry-backup&lt;/code&gt; / &lt;code&gt;cloudberry-pxf&lt;/code&gt;, &lt;code&gt;pgedge&lt;/code&gt; / &lt;code&gt;pgedge-15&lt;/code&gt; / &lt;code&gt;pgedge-16&lt;/code&gt; / &lt;code&gt;pgedge-17&lt;/code&gt; / &lt;code&gt;pgedge-18&lt;/code&gt;, &lt;code&gt;polardb&lt;/code&gt;, &lt;code&gt;polarstore&lt;/code&gt;, &lt;code&gt;zlog&lt;/code&gt;, &lt;code&gt;pdu&lt;/code&gt;, &lt;code&gt;pgdog&lt;/code&gt;, &lt;code&gt;rdkit&lt;/code&gt;, &lt;code&gt;onesparse&lt;/code&gt;, &lt;code&gt;libpgfeutils&lt;/code&gt;, and &lt;code&gt;libfq&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&#34;build-dep&#34;&gt;build dep&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#build-dep&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Install dependencies required to build extensions.&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-fac13c84-fence-12&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;3&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-fac13c84-fence-12&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-fac13c84-fence-12-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig build dep citus              &lt;span class=&#34;c1&#34;&gt;# single extension&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig build dep citus pgvector     &lt;span class=&#34;c1&#34;&gt;# multiple extensions&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig build dep citus --pg 17,16   &lt;span class=&#34;c1&#34;&gt;# for selected PG versions&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Options:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;--pg&lt;/code&gt;: specify one or more PostgreSQL major versions. If omitted, pig infers versions from extension metadata or local PostgreSQL installations.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;build-ext&#34;&gt;build ext&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#build-ext&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Compile extensions and create installation packages.&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-fac13c84-fence-13&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;4&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-fac13c84-fence-13&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-fac13c84-fence-13-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig build ext citus              &lt;span class=&#34;c1&#34;&gt;# build one extension&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig build ext citus pgvector     &lt;span class=&#34;c1&#34;&gt;# build multiple extensions&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig build ext citus --pg &lt;span class=&#34;m&#34;&gt;17&lt;/span&gt;      &lt;span class=&#34;c1&#34;&gt;# build for a selected PG version&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig build ext citus -s           &lt;span class=&#34;c1&#34;&gt;# include debug symbols (RPM only)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Options:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;--pg&lt;/code&gt;: specify one or more PostgreSQL major versions.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-s|--symbol&lt;/code&gt;: build debug symbol packages (RPM only).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;build-pkg&#34;&gt;build pkg&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#build-pkg&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Run the complete build pipeline: download, dependency installation, and build.&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-fac13c84-fence-14&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;6&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-fac13c84-fence-14&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-fac13c84-fence-14-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig build pkg citus              &lt;span class=&#34;c1&#34;&gt;# build one extension&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig build pkg citus pgvector     &lt;span class=&#34;c1&#34;&gt;# build multiple extensions&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig build pkg citus --pg 17,16   &lt;span class=&#34;c1&#34;&gt;# build for multiple PG versions&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig build pkg citus -s           &lt;span class=&#34;c1&#34;&gt;# include debug symbols&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig build pkg citus -m           &lt;span class=&#34;c1&#34;&gt;# prefer the pigsty.cc China mirror for sources&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig build pkg cloudberry         &lt;span class=&#34;c1&#34;&gt;# build cloudberry, backup, and pxf in order&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Options:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;--pg&lt;/code&gt;: specify one or more PostgreSQL major versions.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-s|--symbol&lt;/code&gt;: build debug symbol packages (RPM only).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-m|--mirror&lt;/code&gt;: prefer the &lt;code&gt;pigsty.cc&lt;/code&gt; mirror when downloading source files.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;pig build pkg cloudberry&lt;/code&gt; is a suite workflow: it downloads the full Cloudberry source bundle, builds the core package first, installs the local artifact, then builds &lt;code&gt;cloudberry-backup&lt;/code&gt; and &lt;code&gt;cloudberry-pxf&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&#34;common-workflows&#34;&gt;Common Workflows&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#common-workflows&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;h3 id=&#34;workflow-1-build-a-standard-extension&#34;&gt;Workflow 1: Build a Standard Extension&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#workflow-1-build-a-standard-extension&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h3&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-fac13c84-fence-15&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;11&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-fac13c84-fence-15&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-fac13c84-fence-15-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 1. Set up the build environment once&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig build spec
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig build repo
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig build tool
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 2. Build the extension&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig build pkg pg_partman
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 3. Install the built package&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo rpm -ivh ~/ext/pkg/pg_partman*.rpm  &lt;span class=&#34;c1&#34;&gt;# EL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo dpkg -i ~/ext/pkg/*partman*.deb     &lt;span class=&#34;c1&#34;&gt;# Debian&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;h3 id=&#34;workflow-2-build-a-rust-extension&#34;&gt;Workflow 2: Build a Rust Extension&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#workflow-2-build-a-rust-extension&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h3&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-fac13c84-fence-16&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;11&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-fac13c84-fence-16&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-fac13c84-fence-16-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 1. Set up Rust environment&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig build spec
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig build tool
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig build rust                   &lt;span class=&#34;c1&#34;&gt;# add -y only if you need to force reinstall&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig build pgrx
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 2. Build Rust extension&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig build pkg pgmq
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 3. Install&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo pig ext add pgmq&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;h3 id=&#34;workflow-3-build-multiple-versions&#34;&gt;Workflow 3: Build Multiple Versions&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#workflow-3-build-multiple-versions&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h3&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-fac13c84-fence-17&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;7&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-fac13c84-fence-17&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-fac13c84-fence-17-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Build for multiple PostgreSQL versions&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig build pkg citus --pg 15,16,17
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Results in packages for each version:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# citus_15-*.rpm&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# citus_16-*.rpm&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# citus_17-*.rpm&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;h2 id=&#34;troubleshooting&#34;&gt;Troubleshooting&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#troubleshooting&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;h3 id=&#34;build-tools-not-found&#34;&gt;Build Tools Not Found&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#build-tools-not-found&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h3&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-fac13c84-fence-18&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;6&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-fac13c84-fence-18&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-fac13c84-fence-18-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Install build tools&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig build tool
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# For specific compiler sets&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo dnf groupinstall &lt;span class=&#34;s2&#34;&gt;&amp;#34;Development Tools&amp;#34;&lt;/span&gt;  &lt;span class=&#34;c1&#34;&gt;# EL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt install build-essential          &lt;span class=&#34;c1&#34;&gt;# Debian&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;h3 id=&#34;missing-dependencies&#34;&gt;Missing Dependencies&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#missing-dependencies&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h3&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-fac13c84-fence-19&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;7&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-fac13c84-fence-19&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-fac13c84-fence-19-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Install extension dependencies&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig build dep &amp;lt;extension&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Check error messages for specific packages&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Install manually if needed&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo dnf install &amp;lt;package&amp;gt;  &lt;span class=&#34;c1&#34;&gt;# EL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt install &amp;lt;package&amp;gt;  &lt;span class=&#34;c1&#34;&gt;# Debian&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;h3 id=&#34;postgresql-headers-not-found&#34;&gt;PostgreSQL Headers Not Found&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#postgresql-headers-not-found&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h3&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-fac13c84-fence-20&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;5&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-fac13c84-fence-20&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-fac13c84-fence-20-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Install PostgreSQL development package&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo pig ext install pg18-devel
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Or specify pg_config path&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;PG_CONFIG&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/pgsql-18/bin/pg_config&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;h3 id=&#34;rustpgrx-issues&#34;&gt;Rust/PGRX Issues&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#rustpgrx-issues&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h3&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-fac13c84-fence-21&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;8&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-fac13c84-fence-21&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-fac13c84-fence-21-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Reinstall Rust&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl --proto &lt;span class=&#34;s1&#34;&gt;&amp;#39;=https&amp;#39;&lt;/span&gt; --tlsv1.2 -sSf https://sh.rustup.rs &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sh
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Update PGRX&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cargo install --locked cargo-pgrx@0.19.1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Reinitialize PGRX&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cargo pgrx init&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;h2 id=&#34;extension-build-matrix&#34;&gt;Extension Build Matrix&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#extension-build-matrix&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;h3 id=&#34;common-extensions-to-build&#34;&gt;Common Extensions to Build&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#common-extensions-to-build&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h3&gt;
&lt;div class=&#34;td-table-scroll td-table-scroll--full&#34; tabindex=&#34;0&#34; role=&#34;region&#34; aria-label=&#34;Scrollable table&#34;&gt;
&lt;table class=&#34;full-width&#34;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Extension&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: center&#34;&gt;Type&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Build Time&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Complexity&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Special Requirements&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;pg_repack&lt;/td&gt;
      &lt;td style=&#34;text-align: center&#34;&gt;C&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Fast&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Simple&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;None&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;pg_partman&lt;/td&gt;
      &lt;td style=&#34;text-align: center&#34;&gt;SQL/PLPGSQL&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Fast&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Simple&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;None&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;citus&lt;/td&gt;
      &lt;td style=&#34;text-align: center&#34;&gt;C&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Medium&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Medium&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;None&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;timescaledb&lt;/td&gt;
      &lt;td style=&#34;text-align: center&#34;&gt;C&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Slow&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Complex&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;CMake&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;postgis&lt;/td&gt;
      &lt;td style=&#34;text-align: center&#34;&gt;C&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Very slow&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Complex&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;GDAL, GEOS, Proj&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;pg_duckdb&lt;/td&gt;
      &lt;td style=&#34;text-align: center&#34;&gt;C++&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Medium&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Medium&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;C++17 compiler&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;pgroonga&lt;/td&gt;
      &lt;td style=&#34;text-align: center&#34;&gt;C&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Medium&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Medium&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Groonga libraries&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;pgvector&lt;/td&gt;
      &lt;td style=&#34;text-align: center&#34;&gt;C&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Fast&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Simple&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;None&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;plpython3&lt;/td&gt;
      &lt;td style=&#34;text-align: center&#34;&gt;C&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Medium&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Medium&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Python development&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;pgrx extensions&lt;/td&gt;
      &lt;td style=&#34;text-align: center&#34;&gt;Rust&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Slow&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Complex&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Rust, PGRX&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;


      </description>
    </item>
    
    <item>
      <title>CMD: inventory</title>
      <link>https://ext.pgsty.com/pig/cmd/inventory/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://ext.pgsty.com/pig/cmd/inventory/</guid>
      <description>
        
        
        &lt;p&gt;The &lt;code&gt;pig inventory&lt;/code&gt; command group (alias &lt;code&gt;pig inv&lt;/code&gt;), introduced in v1.6.0, provides&lt;strong&gt;lossless&lt;/strong&gt; inspection, editing, validation, and readiness checks for the Pigsty inventory
(&lt;code&gt;pigsty.yml&lt;/code&gt;), plus an experimental &lt;code&gt;cmdb&lt;/code&gt; subtree that exchanges the inventory with the
PostgreSQL CMDB.&lt;/p&gt;
&lt;p&gt;The lossless engine preserves YAML comments, formatting, key order, anchors, and line
endings byte-for-byte; &lt;code&gt;edit&lt;/code&gt; re-parses the whole document before writing and writes
atomically — &lt;strong&gt;invalid YAML can never reach disk&lt;/strong&gt;.&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-95374c93-fence-0&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;17&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-95374c93-fence-0&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-95374c93-fence-0-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Inspect, edit, validate, check, and exchange Pigsty Inventory
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Usage:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig inventory &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;command&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Aliases:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  inventory, inv
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Available Commands:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  check       Check Inventory, controller, and opt-in target readiness
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  cmdb        Exchange Inventory with Pigsty&lt;span class=&#34;err&#34;&gt;&amp;#39;&lt;/span&gt;s existing PostgreSQL CMDB &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;experimental&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  diff        Compare declarations without emitting Inventory values
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  edit        Edit Inventory or one selected YAML fragment
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  list        List ordered Inventory topology and value kinds
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  show        Show verbatim Inventory YAML &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;may contain secrets&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  status      Inspect the active Inventory &lt;span class=&#34;nb&#34;&gt;source&lt;/span&gt; without executing it
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  validate    Validate one &lt;span class=&#34;nb&#34;&gt;complete&lt;/span&gt; static Pigsty Inventory&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;div class=&#34;td-table-scroll td-table-scroll--full&#34; tabindex=&#34;0&#34; role=&#34;region&#34; aria-label=&#34;Scrollable table&#34;&gt;
&lt;table class=&#34;full-width&#34;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Command&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Alias&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;inv status&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Inspect the active inventory source (without executing)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;inv list&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;ls&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;List inventory topology and value kinds (&lt;code&gt;--depth&lt;/code&gt;)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;inv show&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Show verbatim inventory YAML (&lt;strong&gt;may contain secrets&lt;/strong&gt;)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;inv edit&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;e&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Edit the inventory or one fragment in &lt;code&gt;$EDITOR&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;inv validate&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;v&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Validate one complete static Pigsty inventory&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;inv check&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;ck&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Check inventory, controller, and target readiness&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;inv diff&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Compare declarations of two inventories (value-free)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;inv cmdb&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Exchange with the PostgreSQL CMDB (&lt;strong&gt;experimental&lt;/strong&gt;)&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;p&gt;The inventory path comes from pig&amp;rsquo;s config resolution (the global &lt;code&gt;-i/--inventory&lt;/code&gt; flag or
the Pigsty home directory), and every command supports &lt;code&gt;-o json|yaml&lt;/code&gt; structured output.&lt;/p&gt;
&lt;h2 id=&#34;quick-start&#34;&gt;Quick Start&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#quick-start&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-95374c93-fence-1&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;6&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-95374c93-fence-1&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-95374c93-fence-1-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig inventory status                     &lt;span class=&#34;c1&#34;&gt;# which inventory source is active?&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig inventory list                       &lt;span class=&#34;c1&#34;&gt;# browse the inventory topology&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig inventory edit pg-meta               &lt;span class=&#34;c1&#34;&gt;# edit only the pg-meta cluster fragment&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig inventory validate                   &lt;span class=&#34;c1&#34;&gt;# full validation&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig inventory check -p ssh --sudo        &lt;span class=&#34;c1&#34;&gt;# add SSH/sudo readiness probes&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig inventory diff /path/other.yml       &lt;span class=&#34;c1&#34;&gt;# compare declarations with another file&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;h2 id=&#34;selectors&#34;&gt;Selectors&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#selectors&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;list&lt;/code&gt; / &lt;code&gt;show&lt;/code&gt; / &lt;code&gt;edit&lt;/code&gt; accept an optional &lt;strong&gt;selector&lt;/strong&gt; that addresses one fragment:&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-95374c93-fence-2&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;5&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-95374c93-fence-2&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-95374c93-fence-2-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig inv e                                &lt;span class=&#34;c1&#34;&gt;# the whole inventory&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig inv e vars                           &lt;span class=&#34;c1&#34;&gt;# all.vars global parameters&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig inv e pg-meta                        &lt;span class=&#34;c1&#34;&gt;# one cluster group&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig inv e pg-meta.vars.pg_databases      &lt;span class=&#34;c1&#34;&gt;# a nested key path&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig inv e &lt;span class=&#34;s1&#34;&gt;&amp;#39;pg-meta.hosts[&amp;#34;10.10.10.10&amp;#34;]&amp;#39;&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;# dotted keys (e.g. IPs) via quoted brackets&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;h2 id=&#34;inv-edit&#34;&gt;inv edit&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#inv-edit&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Opens the selected fragment in &lt;code&gt;$EDITOR&lt;/code&gt;. After you save and exit, pig re-applies
indentation and newline style → &lt;strong&gt;re-parses the whole document&lt;/strong&gt; (aborting and keeping the
temp file on failure) → checks that the on-disk file was not concurrently modified → writes
atomically.&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-95374c93-fence-3&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;3&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-95374c93-fence-3&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-95374c93-fence-3-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig inventory edit                       &lt;span class=&#34;c1&#34;&gt;# edit the whole inventory&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig inv e pg-meta                        &lt;span class=&#34;c1&#34;&gt;# edit one fragment&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig inv e vars --from vars.yml           &lt;span class=&#34;c1&#34;&gt;# replace the fragment from a file (or stdin: -)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;div class=&#34;td-table-scroll td-table-scroll--full&#34; tabindex=&#34;0&#34; role=&#34;region&#34; aria-label=&#34;Scrollable table&#34;&gt;
&lt;table class=&#34;full-width&#34;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Option&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--from&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Replace the selected fragment from a regular file or stdin (&lt;code&gt;-&lt;/code&gt;), skipping the editor&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: after a successful edit, pig tightens the inventory file mode to &lt;code&gt;0600&lt;/code&gt; (the
file may contain database passwords and other secrets); the result reports this via the&lt;code&gt;mode_tightened&lt;/code&gt; field. If other users or tools read the file directly, adjust permissions
or ownership accordingly.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;inv-validate&#34;&gt;inv validate&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#inv-validate&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Validates one complete static Pigsty inventory: YAML structure, Ansible conventions, and
Pigsty semantics (such as &lt;code&gt;admin_ip&lt;/code&gt;, the &lt;code&gt;infra&lt;/code&gt; group, and IPv4 host keys) are checked
layer by layer; diagnostics never echo sensitive values.&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-95374c93-fence-4&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;5&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-95374c93-fence-4&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-95374c93-fence-4-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig inventory validate                   &lt;span class=&#34;c1&#34;&gt;# validate the active inventory&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig inv v ./pigsty.yml                   &lt;span class=&#34;c1&#34;&gt;# validate a specific file&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig inv v --strict                       &lt;span class=&#34;c1&#34;&gt;# treat warnings as failures&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig inv v --ansible                      &lt;span class=&#34;c1&#34;&gt;# cross-check with ansible-inventory&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig inv v --strict -o json               &lt;span class=&#34;c1&#34;&gt;# structured output (CI-friendly)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;div class=&#34;td-table-scroll td-table-scroll--full&#34; tabindex=&#34;0&#34; role=&#34;region&#34; aria-label=&#34;Scrollable table&#34;&gt;
&lt;table class=&#34;full-width&#34;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Option&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--strict&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Treat validation warnings as failures&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--ansible&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Also parse with a bounded &lt;code&gt;ansible-inventory&lt;/code&gt; adapter&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--timeout&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Timeout for &lt;code&gt;--ansible&lt;/code&gt; compatibility validation (default 10s)&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;validate&lt;/code&gt; is a &lt;strong&gt;Pigsty-semantics validator&lt;/strong&gt;, not a generic Ansible linter; its rules
stay aligned with Pigsty&amp;rsquo;s own &lt;code&gt;bin/validate&lt;/code&gt; (intentionally stricter in a few places).
Also note that parsing outright rejects &lt;strong&gt;duplicate keys&lt;/strong&gt; and &lt;strong&gt;multi-document YAML&lt;/strong&gt; —
such files cannot even be used with &lt;code&gt;show&lt;/code&gt; / &lt;code&gt;edit&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;inv-check&#34;&gt;inv check&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#inv-check&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Readiness checks on top of static validation: by default only the inventory and local
controller conditions are checked; add probes with &lt;code&gt;--profile&lt;/code&gt;.&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-95374c93-fence-5&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;5&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-95374c93-fence-5&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-95374c93-fence-5-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig inventory check                      &lt;span class=&#34;c1&#34;&gt;# inventory + controller basics&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig inv ck -p ansible                    &lt;span class=&#34;c1&#34;&gt;# add ansible environment checks&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig inv ck -p network                    &lt;span class=&#34;c1&#34;&gt;# add network reachability probes&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig inv ck -p ssh --user admin           &lt;span class=&#34;c1&#34;&gt;# add SSH login probes&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig inv ck -p ssh --sudo                 &lt;span class=&#34;c1&#34;&gt;# SSH probes plus sudo -n validation&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;div class=&#34;td-table-scroll td-table-scroll--full&#34; tabindex=&#34;0&#34; role=&#34;region&#34; aria-label=&#34;Scrollable table&#34;&gt;
&lt;table class=&#34;full-width&#34;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Option&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Short&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--profile&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;-p&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Additional probes: &lt;code&gt;ansible&lt;/code&gt; / &lt;code&gt;network&lt;/code&gt; / &lt;code&gt;ssh&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--user&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Explicit SSH user (defaults to the controller user)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--port&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;TCP/SSH target port (default 22)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--sudo&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;With the ssh profile, also observe &lt;code&gt;sudo -n true&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;h2 id=&#34;inv-cmdb-experimental&#34;&gt;inv cmdb (experimental)&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#inv-cmdb-experimental&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Experimental&lt;/strong&gt;: interfaces and behavior may change.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;code&gt;pig inventory cmdb&lt;/code&gt; exchanges the inventory with Pigsty&amp;rsquo;s existing CMDB schema
(&lt;code&gt;files/cmdb.sql&lt;/code&gt;, the &lt;code&gt;pigsty&lt;/code&gt; / &lt;code&gt;pglog&lt;/code&gt; schemas) over a native PostgreSQL driver.
Connection resolution: &lt;code&gt;-d/--database&lt;/code&gt; (database name, URI, or libpq conninfo) →&lt;code&gt;METADB_URL&lt;/code&gt; environment variable → &lt;code&gt;service=meta&lt;/code&gt;.&lt;/p&gt;
&lt;div class=&#34;td-table-scroll td-table-scroll--full&#34; tabindex=&#34;0&#34; role=&#34;region&#34; aria-label=&#34;Scrollable table&#34;&gt;
&lt;table class=&#34;full-width&#34;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Subcommand&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;check&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Read-only: verify CMDB projections, optionally against the static inventory&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;init&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Apply the &lt;code&gt;cmdb.sql&lt;/code&gt; baseline (&lt;code&gt;--yes&lt;/code&gt; required over existing schemas; &lt;code&gt;--plan&lt;/code&gt; preview)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;load&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;strong&gt;Replace all&lt;/strong&gt; CMDB declaration rows from the static inventory (single transaction; &lt;code&gt;--yes&lt;/code&gt;; &lt;code&gt;--plan&lt;/code&gt;/&lt;code&gt;--strict&lt;/code&gt;)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;dump&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Export the CMDB as a static inventory file (&lt;code&gt;--force&lt;/code&gt; to overwrite a differing target)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;enable&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Guarded switch of the &lt;code&gt;ansible.cfg&lt;/code&gt; inventory to the CMDB (&lt;code&gt;inventory.sh&lt;/code&gt;)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;disable&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Switch back to the static &lt;code&gt;pigsty.yml&lt;/code&gt; (both support &lt;code&gt;--plan&lt;/code&gt;; atomic, rollback-safe writes)&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-95374c93-fence-6&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;6&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-95374c93-fence-6&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-95374c93-fence-6-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig inventory cmdb check                 &lt;span class=&#34;c1&#34;&gt;# verify CMDB state&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig inventory cmdb init --plan           &lt;span class=&#34;c1&#34;&gt;# preview the init plan&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig inventory cmdb load -y               &lt;span class=&#34;c1&#34;&gt;# load the static inventory into the CMDB&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig inventory cmdb dump -f pigsty.yml    &lt;span class=&#34;c1&#34;&gt;# export the CMDB as a static inventory&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig inventory cmdb &lt;span class=&#34;nb&#34;&gt;enable&lt;/span&gt;                &lt;span class=&#34;c1&#34;&gt;# switch the ansible inventory source to the CMDB&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig inventory cmdb disable               &lt;span class=&#34;c1&#34;&gt;# switch back to the static pigsty.yml&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: &lt;code&gt;init&lt;/code&gt; applies the &lt;code&gt;cmdb.sql&lt;/code&gt; baseline directly and does &lt;strong&gt;not&lt;/strong&gt; take a backup
of an existing CMDB — back it up yourself before running against real data; &lt;code&gt;load&lt;/code&gt;
replaces all declaration rows. Destructive operations are gated by a target-fingerprint
confirmation, and structured output mode requires an explicit &lt;code&gt;--yes&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

      </description>
    </item>
    
    <item>
      <title>CMD: pg</title>
      <link>https://ext.pgsty.com/pig/cmd/pg/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://ext.pgsty.com/pig/cmd/pg/</guid>
      <description>
        
        
        &lt;p&gt;The &lt;code&gt;pig pg&lt;/code&gt; command (alias &lt;code&gt;pig postgres&lt;/code&gt;) manages local PostgreSQL servers and databases. It wraps local primitives such as &lt;code&gt;pg_ctl&lt;/code&gt;, &lt;code&gt;psql&lt;/code&gt;, and &lt;code&gt;vacuumdb&lt;/code&gt;; use &lt;code&gt;pig pt&lt;/code&gt; for Patroni cluster operations and &lt;code&gt;pig pitr&lt;/code&gt; for orchestrated PITR.&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-68c1ca79-fence-0&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;41&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-68c1ca79-fence-0&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-68c1ca79-fence-0-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg - Local PostgreSQL primitives &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;pg_ctl / psql / &lt;span class=&#34;nb&#34;&gt;local&lt;/span&gt; files&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Server Control &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;via pg_ctl&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig pg init     &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-v ver&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-D datadir&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;     initialize data directory
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig pg start    &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-D datadir&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;              start PostgreSQL server
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig pg stop     &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-D datadir&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-m fast&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;    stop PostgreSQL server
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig pg restart  &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-D datadir&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-m fast&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;    restart PostgreSQL server
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig pg reload   &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-D datadir&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;              reload configuration
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig pg status   &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-D datadir&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;              show server status
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig pg promote  &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-D datadir&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;              promote standby to primary
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig pg role     &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-D datadir&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-V&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;         detect instance role &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;primary/replica&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Service Management &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;via systemctl&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig pg svc start                          start postgres systemd service
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig pg svc stop                           stop postgres systemd service
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig pg svc restart                        restart postgres systemd service
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig pg svc reload                         reload postgres systemd service
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig pg svc status                         show postgres service status
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Connection &lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt; Query:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig pg psql     &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;db&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-c cmd&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;             connect to database via psql
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig pg ps       &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-a&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-u user&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;            show current connections
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig pg &lt;span class=&#34;nb&#34;&gt;kill&lt;/span&gt;     &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-x&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-u user&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;            terminate connections &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;dry-run by default&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig pg clone    &amp;lt;src&amp;gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;dst&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;               clone database with CREATE DATABASE TEMPLATE
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Database Maintenance:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig pg vacuum   &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;db&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-a&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-t table&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;      vacuum tables
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig pg analyze  &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;db&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-a&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-t table&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;      analyze tables
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig pg freeze   &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;db&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-a&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-t table&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;      vacuum freeze tables
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig pg repack   &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;db&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-a&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-t table&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;      repack tables &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;online rebuild&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Tuning:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig pg tune     &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-p profile&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;     generate optimized parameters
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Instance Fork:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig pg fork init &amp;lt;name&amp;gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-D datadir&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;      fork PGDATA into /pg/data-&amp;lt;name&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig pg fork list                          list managed forks
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig pg fork start&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;stop&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;rm &amp;lt;name&amp;gt;          manage fork lifecycle
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Utilities:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig pg log &amp;lt;list&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;tail&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;cat&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;less&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;grep&amp;gt;      view PostgreSQL logs&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;h2 id=&#34;command-overview&#34;&gt;Command Overview&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#command-overview&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Service Control&lt;/strong&gt; (pg_ctl wrapper):&lt;/p&gt;
&lt;div class=&#34;td-table-scroll td-table-scroll--full&#34; tabindex=&#34;0&#34; role=&#34;region&#34; aria-label=&#34;Scrollable table&#34;&gt;
&lt;table class=&#34;full-width&#34;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Command&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Alias&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Notes&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pg init&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;initdb, i&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Initialize data directory&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Wraps initdb&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pg start&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;boot, up&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Start PostgreSQL&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Wraps pg_ctl start&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pg stop&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;halt, down&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Stop PostgreSQL&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Wraps pg_ctl stop&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pg restart&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;reboot&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Restart PostgreSQL&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Wraps pg_ctl restart&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pg reload&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;hup&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Reload configuration&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Wraps pg_ctl reload&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pg status&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;st, stat&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Show service status&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Shows processes &amp;amp; related services&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pg promote&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pro&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Promote replica to primary&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Wraps pg_ctl promote&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pg role&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;r&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Detect instance role&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Outputs primary/replica&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Connection &amp;amp; Query&lt;/strong&gt;:&lt;/p&gt;
&lt;div class=&#34;td-table-scroll td-table-scroll--full&#34; tabindex=&#34;0&#34; role=&#34;region&#34; aria-label=&#34;Scrollable table&#34;&gt;
&lt;table class=&#34;full-width&#34;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Command&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Alias&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Notes&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pg psql&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;sql, connect&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Connect to database&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Wraps psql&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pg ps&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;activity, act&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Show current connections&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Queries pg_stat_activity&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pg kill&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;k&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Terminate connections&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Default dry-run mode&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pg clone&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Clone a single database&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;CREATE DATABASE ... TEMPLATE ... FILE_COPY&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Database Maintenance&lt;/strong&gt;:&lt;/p&gt;
&lt;div class=&#34;td-table-scroll td-table-scroll--full&#34; tabindex=&#34;0&#34; role=&#34;region&#34; aria-label=&#34;Scrollable table&#34;&gt;
&lt;table class=&#34;full-width&#34;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Command&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Alias&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Notes&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pg vacuum&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;vac, vc&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Vacuum tables&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Wraps vacuumdb&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pg analyze&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;ana, az&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Analyze tables&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Wraps vacuumdb &amp;ndash;analyze-only&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pg freeze&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Freeze vacuum&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Wraps vacuumdb &amp;ndash;freeze&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pg repack&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;rp&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Online table repacking&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Requires pg_repack extension&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Parameter Tuning&lt;/strong&gt;:&lt;/p&gt;
&lt;div class=&#34;td-table-scroll td-table-scroll--full&#34; tabindex=&#34;0&#34; role=&#34;region&#34; aria-label=&#34;Scrollable table&#34;&gt;
&lt;table class=&#34;full-width&#34;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Command&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Alias&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Notes&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pg tune&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;tuning&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Generate PostgreSQL tuning parameters&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Auto-detects hardware and supports structured output&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Instance Fork&lt;/strong&gt;:&lt;/p&gt;
&lt;div class=&#34;td-table-scroll td-table-scroll--full&#34; tabindex=&#34;0&#34; role=&#34;region&#34; aria-label=&#34;Scrollable table&#34;&gt;
&lt;table class=&#34;full-width&#34;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Command&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Alias&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Notes&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pg fork&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Shortcut for &lt;code&gt;fork init&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Creates a managed fork by default, does not start it&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pg fork init&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;create&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Create a local one-off physical copy&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Default &lt;code&gt;/pg/data-&amp;lt;name&amp;gt;&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pg fork list&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;List managed forks&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Scans &lt;code&gt;/pg/data-*&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pg fork start&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Start an existing fork&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Supports managed names or unmanaged &lt;code&gt;--dst-data&lt;/code&gt; directories&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pg fork stop&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Stop an existing fork&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Supports shutdown mode&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pg fork rm&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;remove, delete&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Remove a fork&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Running forks require &lt;code&gt;--stop&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Log Tools&lt;/strong&gt;:&lt;/p&gt;
&lt;div class=&#34;td-table-scroll td-table-scroll--full&#34; tabindex=&#34;0&#34; role=&#34;region&#34; aria-label=&#34;Scrollable table&#34;&gt;
&lt;table class=&#34;full-width&#34;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Command&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Alias&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Notes&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pg log&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;l&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Log management&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Parent command&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pg log list&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;ls&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;List log files&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pg log tail&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;t, f&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Real-time log viewing&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;tail -f&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pg log show&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;cat, c&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Output log content&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pg log less&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;vi, v&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;View with less&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pg log grep&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;g, search&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Search logs&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Service Subcommand&lt;/strong&gt; (&lt;code&gt;pg svc&lt;/code&gt;, also &lt;code&gt;pg service&lt;/code&gt; or &lt;code&gt;pg s&lt;/code&gt;):&lt;/p&gt;
&lt;div class=&#34;td-table-scroll td-table-scroll--full&#34; tabindex=&#34;0&#34; role=&#34;region&#34; aria-label=&#34;Scrollable table&#34;&gt;
&lt;table class=&#34;full-width&#34;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Command&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Alias&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pg svc start&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;boot, up&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Start postgres service&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pg svc stop&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;halt, dn, down&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Stop postgres service&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pg svc restart&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;reboot, rt&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Restart postgres service&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pg svc reload&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;rl, hup&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Reload postgres service&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pg svc status&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;st, stat&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Show service status&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;h2 id=&#34;quick-start&#34;&gt;Quick Start&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#quick-start&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-68c1ca79-fence-1&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;35&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-68c1ca79-fence-1&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-68c1ca79-fence-1-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Service control&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg init                       &lt;span class=&#34;c1&#34;&gt;# Initialize data directory&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg start                      &lt;span class=&#34;c1&#34;&gt;# Start PostgreSQL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg status                     &lt;span class=&#34;c1&#34;&gt;# Check status&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg stop                       &lt;span class=&#34;c1&#34;&gt;# Stop PostgreSQL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg restart                    &lt;span class=&#34;c1&#34;&gt;# Restart PostgreSQL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg reload                     &lt;span class=&#34;c1&#34;&gt;# Reload configuration&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Connection &amp;amp; query&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg psql                       &lt;span class=&#34;c1&#34;&gt;# Connect to postgres database&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg psql mydb                  &lt;span class=&#34;c1&#34;&gt;# Connect to specific database&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg ps                         &lt;span class=&#34;c1&#34;&gt;# View current connections&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg &lt;span class=&#34;nb&#34;&gt;kill&lt;/span&gt; -x                    &lt;span class=&#34;c1&#34;&gt;# Terminate connections (requires -x to execute)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg clone meta meta_fork       &lt;span class=&#34;c1&#34;&gt;# Clone a single database&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Database maintenance&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg vacuum mydb                &lt;span class=&#34;c1&#34;&gt;# Vacuum specific database&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg analyze mydb               &lt;span class=&#34;c1&#34;&gt;# Analyze specific database&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg repack mydb                &lt;span class=&#34;c1&#34;&gt;# Online repack database&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Parameter tuning&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg tune                       &lt;span class=&#34;c1&#34;&gt;# Auto-detect hardware and generate tuned parameters&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg tune -p olap               &lt;span class=&#34;c1&#34;&gt;# Use the OLAP workload profile&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg tune -c &lt;span class=&#34;m&#34;&gt;8&lt;/span&gt; -m &lt;span class=&#34;m&#34;&gt;32768&lt;/span&gt; -d &lt;span class=&#34;m&#34;&gt;500&lt;/span&gt;  &lt;span class=&#34;c1&#34;&gt;# Override CPU / memory / disk detection&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Instance fork&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg fork dev                   &lt;span class=&#34;c1&#34;&gt;# Create /pg/data-dev&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg fork init dev --start      &lt;span class=&#34;c1&#34;&gt;# Create and start fork, auto-assign high port&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg fork init dev -s --dst-port &lt;span class=&#34;m&#34;&gt;15433&lt;/span&gt;  &lt;span class=&#34;c1&#34;&gt;# Create and start on specified port&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg fork list                  &lt;span class=&#34;c1&#34;&gt;# List /pg/data-* forks&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Log viewing&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg log tail                   &lt;span class=&#34;c1&#34;&gt;# Real-time view latest log&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg log list --log-dir /var/log/pg  &lt;span class=&#34;c1&#34;&gt;# Custom log directory&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg log grep ERROR             &lt;span class=&#34;c1&#34;&gt;# Search logs&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;h2 id=&#34;global-options&#34;&gt;Global Options&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#global-options&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;These options apply to all &lt;code&gt;pig pg&lt;/code&gt; subcommands:&lt;/p&gt;
&lt;div class=&#34;td-table-scroll td-table-scroll--full&#34; tabindex=&#34;0&#34; role=&#34;region&#34; aria-label=&#34;Scrollable table&#34;&gt;
&lt;table class=&#34;full-width&#34;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Option&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Short&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Default&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--version&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;-v&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;auto-detect&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;PostgreSQL major version&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--data&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;-D&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;/pg/data&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Data directory path&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--dbsu&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;-U&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;postgres&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Database superuser (or &lt;code&gt;$PIG_DBSU&lt;/code&gt; env)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--systemd&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;-S&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;false&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Use systemctl instead of pg_ctl&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Version Detection Logic:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;If &lt;code&gt;-v&lt;/code&gt; specified, use that version&lt;/li&gt;
&lt;li&gt;Otherwise read from &lt;code&gt;PG_VERSION&lt;/code&gt; file in data directory&lt;/li&gt;
&lt;li&gt;If neither available, use default PostgreSQL in PATH&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;service-control-commands&#34;&gt;Service Control Commands&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#service-control-commands&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;h3 id=&#34;pg-init&#34;&gt;pg init&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#pg-init&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;Initialize PostgreSQL data directory. Wraps &lt;code&gt;initdb&lt;/code&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Data checksums are enabled by default unless explicitly disabled with &lt;code&gt;-K|--no-data-checksums&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Prefer the platform-independent built-in &lt;code&gt;C.UTF-8&lt;/code&gt; locale on PG 17+, fall back to system &lt;code&gt;C.UTF-8&lt;/code&gt; / &lt;code&gt;C&lt;/code&gt;, then system default locale.&lt;/li&gt;
&lt;li&gt;If the data directory already exists, the command refuses to run unless &lt;code&gt;-f|--force&lt;/code&gt; is used. If PostgreSQL is running on that data directory, it refuses even with &lt;code&gt;--force&lt;/code&gt; to prevent data loss.&lt;/li&gt;
&lt;li&gt;Extra arguments after &lt;code&gt;--&lt;/code&gt; are passed to &lt;code&gt;initdb&lt;/code&gt;, for example &lt;code&gt;--waldir=/wal&lt;/code&gt;. Use &lt;code&gt;initdb&lt;/code&gt; directly if you need to override locale or encoding options.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-68c1ca79-fence-2&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;6&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-68c1ca79-fence-2&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-68c1ca79-fence-2-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg init                       &lt;span class=&#34;c1&#34;&gt;# Initialize with defaults&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg init -v &lt;span class=&#34;m&#34;&gt;18&lt;/span&gt;                 &lt;span class=&#34;c1&#34;&gt;# Specify PostgreSQL 18&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg init -D /data/pg18         &lt;span class=&#34;c1&#34;&gt;# Specify data directory&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg init -K                    &lt;span class=&#34;c1&#34;&gt;# Disable data checksums&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg init -f                    &lt;span class=&#34;c1&#34;&gt;# Force init (remove existing data)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg init -- --waldir&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/wal      &lt;span class=&#34;c1&#34;&gt;# Pass extra args to initdb&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Options:&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;td-table-scroll td-table-scroll--full&#34; tabindex=&#34;0&#34; role=&#34;region&#34; aria-label=&#34;Scrollable table&#34;&gt;
&lt;table class=&#34;full-width&#34;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Option&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Short&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Default&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--no-data-checksums&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;-K&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;false&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Disable data checksums&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--force&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;-f&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;false&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Force init and remove existing data (dangerous!)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--yes&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;-y&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;false&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Skip overwrite confirmation when used with &lt;code&gt;--force&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Safety:&lt;/strong&gt; Even with &lt;code&gt;--force&lt;/code&gt;, command refuses to run if PostgreSQL is running.&lt;/p&gt;
&lt;h3 id=&#34;pg-start&#34;&gt;pg start&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#pg-start&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;Start PostgreSQL server.&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-68c1ca79-fence-3&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;6&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-68c1ca79-fence-3&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-68c1ca79-fence-3-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg start                      &lt;span class=&#34;c1&#34;&gt;# Start with defaults&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg start -D /data/pg18        &lt;span class=&#34;c1&#34;&gt;# Specify data directory&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg start -l /pg/log/pg.log    &lt;span class=&#34;c1&#34;&gt;# Redirect output to log file&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg start -O &lt;span class=&#34;s2&#34;&gt;&amp;#34;-p 5433&amp;#34;&lt;/span&gt;         &lt;span class=&#34;c1&#34;&gt;# Pass options to postgres&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg start -o json              &lt;span class=&#34;c1&#34;&gt;# Structured JSON output&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg start -S                   &lt;span class=&#34;c1&#34;&gt;# Use systemctl to start&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Options:&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;td-table-scroll td-table-scroll--full&#34; tabindex=&#34;0&#34; role=&#34;region&#34; aria-label=&#34;Scrollable table&#34;&gt;
&lt;table class=&#34;full-width&#34;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Option&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Short&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--log&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;-l&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Redirect stdout/stderr to log file&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--timeout&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;-t&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Wait timeout (seconds)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--no-wait&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Don&amp;rsquo;t wait for startup completion&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--options&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;-O&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Options to pass to postgres&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;p&gt;If PostgreSQL is already running, the command prints the existing postmaster PID and returns successfully.&lt;/p&gt;
&lt;h3 id=&#34;pg-stop&#34;&gt;pg stop&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#pg-stop&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;Stop PostgreSQL server.&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-68c1ca79-fence-4&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;5&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-68c1ca79-fence-4&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-68c1ca79-fence-4-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg stop                       &lt;span class=&#34;c1&#34;&gt;# Fast shutdown (default)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg stop -m smart              &lt;span class=&#34;c1&#34;&gt;# Wait for clients to disconnect&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg stop -m immediate          &lt;span class=&#34;c1&#34;&gt;# Immediate shutdown&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg stop -S                    &lt;span class=&#34;c1&#34;&gt;# Use systemctl to stop&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg stop --plan                &lt;span class=&#34;c1&#34;&gt;# Preview stop plan&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Options:&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;td-table-scroll td-table-scroll--full&#34; tabindex=&#34;0&#34; role=&#34;region&#34; aria-label=&#34;Scrollable table&#34;&gt;
&lt;table class=&#34;full-width&#34;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Option&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Short&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Default&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--mode&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;-m&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;fast&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Shutdown mode: smart/fast/immediate&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--timeout&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;-t&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;60&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Wait timeout (seconds)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--no-wait&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;false&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Don&amp;rsquo;t wait for shutdown completion&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--plan&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;false&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Preview local &lt;code&gt;pg_ctl stop&lt;/code&gt; plan only&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Shutdown Modes:&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;td-table-scroll td-table-scroll--full&#34; tabindex=&#34;0&#34; role=&#34;region&#34; aria-label=&#34;Scrollable table&#34;&gt;
&lt;table class=&#34;full-width&#34;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Mode&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;smart&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Wait for all clients to disconnect&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;fast&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Rollback active transactions, disconnect clients, clean shutdown&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;immediate&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Terminate all processes immediately, requires recovery on next start&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;h3 id=&#34;pg-restart&#34;&gt;pg restart&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#pg-restart&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;Restart PostgreSQL server.&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-68c1ca79-fence-5&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;5&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-68c1ca79-fence-5&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-68c1ca79-fence-5-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg restart                    &lt;span class=&#34;c1&#34;&gt;# Fast restart&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg restart -m immediate       &lt;span class=&#34;c1&#34;&gt;# Immediate restart&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg restart -O &lt;span class=&#34;s2&#34;&gt;&amp;#34;-p 5433&amp;#34;&lt;/span&gt;       &lt;span class=&#34;c1&#34;&gt;# Restart with new options&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg restart -S                 &lt;span class=&#34;c1&#34;&gt;# Use systemctl to restart&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg restart --plan             &lt;span class=&#34;c1&#34;&gt;# Preview restart plan&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Options:&lt;/strong&gt; Same as &lt;code&gt;pg stop&lt;/code&gt;, plus &lt;code&gt;--options&lt;/code&gt; (&lt;code&gt;-O&lt;/code&gt;) to pass to postgres.&lt;/p&gt;
&lt;h3 id=&#34;pg-reload&#34;&gt;pg reload&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#pg-reload&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;Reload PostgreSQL configuration. Sends SIGHUP signal to server.&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-68c1ca79-fence-6&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;3&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-68c1ca79-fence-6&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-68c1ca79-fence-6-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg reload                     &lt;span class=&#34;c1&#34;&gt;# Reload configuration&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg reload -D /data/pg18       &lt;span class=&#34;c1&#34;&gt;# Specify data directory&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg reload -S                  &lt;span class=&#34;c1&#34;&gt;# Use systemctl reload&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;h3 id=&#34;pg-status&#34;&gt;pg status&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#pg-status&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;Show PostgreSQL server status. Displays not only &lt;code&gt;pg_ctl status&lt;/code&gt; output, but also postgres processes and Pigsty-related service status.&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-68c1ca79-fence-7&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;2&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-68c1ca79-fence-7&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-68c1ca79-fence-7-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg status                     &lt;span class=&#34;c1&#34;&gt;# Check service status&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg status -D /data/pg18       &lt;span class=&#34;c1&#34;&gt;# Specify data directory&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Output includes:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;pg_ctl status&lt;/code&gt; output (running status, PID, etc.)&lt;/li&gt;
&lt;li&gt;PostgreSQL process list (&lt;code&gt;ps -u postgres&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Related service status:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;postgres&lt;/code&gt;: PostgreSQL systemd service&lt;/li&gt;
&lt;li&gt;&lt;code&gt;patroni&lt;/code&gt;: Patroni HA manager&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pgbouncer&lt;/code&gt;: Connection pooler&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pgbackrest&lt;/code&gt;: Backup service&lt;/li&gt;
&lt;li&gt;&lt;code&gt;vip-manager&lt;/code&gt;: VIP manager&lt;/li&gt;
&lt;li&gt;&lt;code&gt;haproxy&lt;/code&gt;: Load balancer&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;pg-promote&#34;&gt;pg promote&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#pg-promote&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;Promote replica to primary.&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-68c1ca79-fence-8&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;4&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-68c1ca79-fence-8&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-68c1ca79-fence-8-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg promote                    &lt;span class=&#34;c1&#34;&gt;# Promote replica&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg promote -D /data/pg18      &lt;span class=&#34;c1&#34;&gt;# Specify data directory&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg promote --plan             &lt;span class=&#34;c1&#34;&gt;# Preview promotion plan&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg promote -y                 &lt;span class=&#34;c1&#34;&gt;# Skip confirmation prompt&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Options:&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;td-table-scroll td-table-scroll--full&#34; tabindex=&#34;0&#34; role=&#34;region&#34; aria-label=&#34;Scrollable table&#34;&gt;
&lt;table class=&#34;full-width&#34;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Option&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Short&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--timeout&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;-t&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Wait timeout (seconds)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--no-wait&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Don&amp;rsquo;t wait for promotion completion&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--plan&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Preview promotion plan only&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--yes&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;-y&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Skip confirmation prompt&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;h3 id=&#34;pg-role&#34;&gt;pg role&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#pg-role&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;Detect PostgreSQL instance role (primary or replica).&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-68c1ca79-fence-9&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;3&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-68c1ca79-fence-9&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-68c1ca79-fence-9-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg role                       &lt;span class=&#34;c1&#34;&gt;# Output: primary, replica, or unknown&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg role -V                    &lt;span class=&#34;c1&#34;&gt;# Verbose output, show detection process&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg role -D /data/pg18         &lt;span class=&#34;c1&#34;&gt;# Specify data directory&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Options:&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;td-table-scroll td-table-scroll--full&#34; tabindex=&#34;0&#34; role=&#34;region&#34; aria-label=&#34;Scrollable table&#34;&gt;
&lt;table class=&#34;full-width&#34;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Option&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Short&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--verbose&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;-V&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Show detailed detection process&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;primary&lt;/code&gt;: Current instance is primary&lt;/li&gt;
&lt;li&gt;&lt;code&gt;replica&lt;/code&gt;: Current instance is replica&lt;/li&gt;
&lt;li&gt;&lt;code&gt;unknown&lt;/code&gt;: Cannot determine instance role&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Detection Strategy (by priority):&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Process detection&lt;/strong&gt;: Check for &lt;code&gt;walreceiver&lt;/code&gt;, &lt;code&gt;recovery&lt;/code&gt; processes&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SQL query&lt;/strong&gt;: Execute &lt;code&gt;pg_is_in_recovery()&lt;/code&gt; (requires PostgreSQL running)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Data directory check&lt;/strong&gt;: Check for &lt;code&gt;standby.signal&lt;/code&gt;, &lt;code&gt;recovery.signal&lt;/code&gt;, &lt;code&gt;recovery.conf&lt;/code&gt; files&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;connection--query-commands&#34;&gt;Connection &amp;amp; Query Commands&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#connection--query-commands&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;h3 id=&#34;pg-psql&#34;&gt;pg psql&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#pg-psql&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;Connect to PostgreSQL database via psql.&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-68c1ca79-fence-10&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;4&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-68c1ca79-fence-10&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-68c1ca79-fence-10-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg psql                       &lt;span class=&#34;c1&#34;&gt;# Connect to postgres database&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg psql mydb                  &lt;span class=&#34;c1&#34;&gt;# Connect to specific database&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg psql mydb -c &lt;span class=&#34;s2&#34;&gt;&amp;#34;SELECT 1&amp;#34;&lt;/span&gt;    &lt;span class=&#34;c1&#34;&gt;# Execute single command&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg psql -f script.sql         &lt;span class=&#34;c1&#34;&gt;# Execute SQL script file&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Options:&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;td-table-scroll td-table-scroll--full&#34; tabindex=&#34;0&#34; role=&#34;region&#34; aria-label=&#34;Scrollable table&#34;&gt;
&lt;table class=&#34;full-width&#34;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Option&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Short&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--command&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;-c&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Execute single SQL command&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--file&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;-f&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Execute SQL script file&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;h3 id=&#34;pg-ps&#34;&gt;pg ps&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#pg-ps&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;Show PostgreSQL current connections. Queries &lt;code&gt;pg_stat_activity&lt;/code&gt; view.&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-68c1ca79-fence-11&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;4&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-68c1ca79-fence-11&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-68c1ca79-fence-11-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg ps                         &lt;span class=&#34;c1&#34;&gt;# Show client connections&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg ps -a                      &lt;span class=&#34;c1&#34;&gt;# Show all connections (including system)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg ps -u admin                &lt;span class=&#34;c1&#34;&gt;# Filter by user&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg ps -d mydb                 &lt;span class=&#34;c1&#34;&gt;# Filter by database&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Options:&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;td-table-scroll td-table-scroll--full&#34; tabindex=&#34;0&#34; role=&#34;region&#34; aria-label=&#34;Scrollable table&#34;&gt;
&lt;table class=&#34;full-width&#34;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Option&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Short&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--all&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;-a&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Show all connections (including system)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--user&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;-u&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Filter by user&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--database&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;-d&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Filter by database&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;h3 id=&#34;pg-kill&#34;&gt;pg kill&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#pg-kill&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;Terminate PostgreSQL connections. &lt;strong&gt;Default is dry-run mode&lt;/strong&gt;, requires &lt;code&gt;-x&lt;/code&gt; to execute.&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-68c1ca79-fence-12&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;9&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-68c1ca79-fence-12&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-68c1ca79-fence-12-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg &lt;span class=&#34;nb&#34;&gt;kill&lt;/span&gt;                       &lt;span class=&#34;c1&#34;&gt;# Show connections to be terminated (dry-run)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg &lt;span class=&#34;nb&#34;&gt;kill&lt;/span&gt; -x                    &lt;span class=&#34;c1&#34;&gt;# Actually terminate connections&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg &lt;span class=&#34;nb&#34;&gt;kill&lt;/span&gt; --pid &lt;span class=&#34;m&#34;&gt;12345&lt;/span&gt; -x        &lt;span class=&#34;c1&#34;&gt;# Terminate specific PID&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg &lt;span class=&#34;nb&#34;&gt;kill&lt;/span&gt; -u admin -x           &lt;span class=&#34;c1&#34;&gt;# Terminate user&amp;#39;s connections&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg &lt;span class=&#34;nb&#34;&gt;kill&lt;/span&gt; -d mydb -x            &lt;span class=&#34;c1&#34;&gt;# Terminate database connections&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg &lt;span class=&#34;nb&#34;&gt;kill&lt;/span&gt; -s idle -x            &lt;span class=&#34;c1&#34;&gt;# Terminate idle connections&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg &lt;span class=&#34;nb&#34;&gt;kill&lt;/span&gt; --cancel -x           &lt;span class=&#34;c1&#34;&gt;# Cancel queries instead of terminating&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg &lt;span class=&#34;nb&#34;&gt;kill&lt;/span&gt; --watch &lt;span class=&#34;m&#34;&gt;5&lt;/span&gt; -x          &lt;span class=&#34;c1&#34;&gt;# Repeat every 5 seconds&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg &lt;span class=&#34;nb&#34;&gt;kill&lt;/span&gt; --plan                &lt;span class=&#34;c1&#34;&gt;# Preview connection termination plan&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Options:&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;td-table-scroll td-table-scroll--full&#34; tabindex=&#34;0&#34; role=&#34;region&#34; aria-label=&#34;Scrollable table&#34;&gt;
&lt;table class=&#34;full-width&#34;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Option&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Short&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--execute&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;-x&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Actually execute (default is dry-run)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--pid&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Terminate specific PID&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--user&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;-u&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Filter by user&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--database&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;-d&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Filter by database&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--state&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;-s&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Filter by state (idle/active/idle in transaction)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--query&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;-q&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Filter by query pattern&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--all&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;-a&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Include replication connections&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--cancel&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;-c&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Cancel queries instead of terminating&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--watch&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Repeat every N seconds&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--plan&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Preview execution plan without terminating connections&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Security:&lt;/strong&gt; &lt;code&gt;--state&lt;/code&gt; and &lt;code&gt;--query&lt;/code&gt; parameters are validated to accept only simple alphanumeric patterns, preventing SQL injection.&lt;/p&gt;
&lt;h3 id=&#34;pg-clone&#34;&gt;pg clone&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#pg-clone&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;Clone a database inside the current PostgreSQL instance. This command wraps &lt;code&gt;CREATE DATABASE ... TEMPLATE ... STRATEGY FILE_COPY&lt;/code&gt;, terminates existing sessions on the source database before cloning, and follows the same semantics as Pigsty&amp;rsquo;s &lt;code&gt;pgsql-db clone&lt;/code&gt; workflow.&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-68c1ca79-fence-13&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;5&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-68c1ca79-fence-13&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-68c1ca79-fence-13-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg clone meta                       &lt;span class=&#34;c1&#34;&gt;# Clone meta as meta_1/meta_2/...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg clone meta meta_fork            &lt;span class=&#34;c1&#34;&gt;# Clone to a specific database name&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg clone meta meta_fork --owner dba &lt;span class=&#34;c1&#34;&gt;# Try to change new database owner&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg clone meta meta_fork --port &lt;span class=&#34;m&#34;&gt;5433&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;# Connect to a specific local port&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg clone meta meta_fork --plan      &lt;span class=&#34;c1&#34;&gt;# Preview clone plan&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Options:&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;td-table-scroll td-table-scroll--full&#34; tabindex=&#34;0&#34; role=&#34;region&#34; aria-label=&#34;Scrollable table&#34;&gt;
&lt;table class=&#34;full-width&#34;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Option&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Short&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--port&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;PostgreSQL port, default &lt;code&gt;5432&lt;/code&gt; or &lt;code&gt;$PG_PORT&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--conn-db&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Database used to execute &lt;code&gt;CREATE DATABASE&lt;/code&gt;; defaults to &lt;code&gt;template1&lt;/code&gt; when cloning &lt;code&gt;postgres&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--owner&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Try to change the owner of the cloned database&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--conn-limit&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Connection limit for the new database (&lt;code&gt;-1&lt;/code&gt; unlimited, &lt;code&gt;0&lt;/code&gt; disallow connections)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--plan&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Show execution plan only&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--yes&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;-y&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Skip confirmation prompt&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Notes:&lt;/strong&gt; On PostgreSQL 18+ with &lt;code&gt;file_copy_method=clone&lt;/code&gt;, database cloning can use CoW semantics; otherwise it falls back to ordinary file copy. This command clones a single database and does not create a new PostgreSQL instance.&lt;/p&gt;
&lt;h2 id=&#34;database-maintenance-commands&#34;&gt;Database Maintenance Commands&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#database-maintenance-commands&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;h3 id=&#34;pg-vacuum&#34;&gt;pg vacuum&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#pg-vacuum&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;Vacuum database tables. Wraps &lt;code&gt;vacuumdb&lt;/code&gt;.&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-68c1ca79-fence-14&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;6&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-68c1ca79-fence-14&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-68c1ca79-fence-14-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg vacuum                     &lt;span class=&#34;c1&#34;&gt;# Vacuum current database&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg vacuum mydb                &lt;span class=&#34;c1&#34;&gt;# Vacuum specific database&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg vacuum -a                  &lt;span class=&#34;c1&#34;&gt;# Vacuum all databases&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg vacuum mydb -t mytable     &lt;span class=&#34;c1&#34;&gt;# Vacuum specific table&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg vacuum mydb -n myschema    &lt;span class=&#34;c1&#34;&gt;# Vacuum tables in schema&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg vacuum mydb --full         &lt;span class=&#34;c1&#34;&gt;# VACUUM FULL (requires exclusive lock)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Options:&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;td-table-scroll td-table-scroll--full&#34; tabindex=&#34;0&#34; role=&#34;region&#34; aria-label=&#34;Scrollable table&#34;&gt;
&lt;table class=&#34;full-width&#34;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Option&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Short&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--all&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;-a&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Process all databases&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--schema&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;-n&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Specify schema&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--table&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;-t&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Specify table&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--verbose&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;-V&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Verbose output&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--full&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;-F&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;VACUUM FULL (requires exclusive lock)&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Security:&lt;/strong&gt; &lt;code&gt;--schema&lt;/code&gt; and &lt;code&gt;--table&lt;/code&gt; parameters are validated for proper PostgreSQL identifier format.&lt;/p&gt;
&lt;h3 id=&#34;pg-analyze&#34;&gt;pg analyze&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#pg-analyze&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;Analyze database tables to update statistics.&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-68c1ca79-fence-15&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;4&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-68c1ca79-fence-15&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-68c1ca79-fence-15-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg analyze                    &lt;span class=&#34;c1&#34;&gt;# Analyze current database&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg analyze mydb               &lt;span class=&#34;c1&#34;&gt;# Analyze specific database&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg analyze -a                 &lt;span class=&#34;c1&#34;&gt;# Analyze all databases&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg analyze mydb -t mytable    &lt;span class=&#34;c1&#34;&gt;# Analyze specific table&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Options:&lt;/strong&gt; Same as &lt;code&gt;pg vacuum&lt;/code&gt; (without &lt;code&gt;--full&lt;/code&gt;).&lt;/p&gt;
&lt;h3 id=&#34;pg-freeze&#34;&gt;pg freeze&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#pg-freeze&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;Freeze vacuum database to prevent transaction ID wraparound.&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-68c1ca79-fence-16&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;3&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-68c1ca79-fence-16&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-68c1ca79-fence-16-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg freeze                     &lt;span class=&#34;c1&#34;&gt;# Freeze current database&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg freeze mydb                &lt;span class=&#34;c1&#34;&gt;# Freeze specific database&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg freeze -a                  &lt;span class=&#34;c1&#34;&gt;# Freeze all databases&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Options:&lt;/strong&gt; Same as &lt;code&gt;pg analyze&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id=&#34;pg-repack&#34;&gt;pg repack&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#pg-repack&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;Online table repacking. Requires &lt;code&gt;pg_repack&lt;/code&gt; extension.&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-68c1ca79-fence-17&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;6&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-68c1ca79-fence-17&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-68c1ca79-fence-17-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg repack mydb                &lt;span class=&#34;c1&#34;&gt;# Repack all tables in database&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg repack -a                  &lt;span class=&#34;c1&#34;&gt;# Repack all databases&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg repack mydb -t mytable     &lt;span class=&#34;c1&#34;&gt;# Repack specific table&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg repack mydb -n myschema    &lt;span class=&#34;c1&#34;&gt;# Repack tables in schema&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg repack mydb -j &lt;span class=&#34;m&#34;&gt;4&lt;/span&gt;           &lt;span class=&#34;c1&#34;&gt;# Use 4 parallel jobs&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg repack mydb --plan         &lt;span class=&#34;c1&#34;&gt;# Show tables to be repacked&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Options:&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;td-table-scroll td-table-scroll--full&#34; tabindex=&#34;0&#34; role=&#34;region&#34; aria-label=&#34;Scrollable table&#34;&gt;
&lt;table class=&#34;full-width&#34;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Option&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Short&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--all&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;-a&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Process all databases&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--schema&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;-n&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Specify schema&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--table&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;-t&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Specify table&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--verbose&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;-V&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Verbose output&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--jobs&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;-j&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Number of parallel jobs (default 1)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--plan&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;-N&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Show tables to be repacked&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;h2 id=&#34;parameter-tuning-commands&#34;&gt;Parameter Tuning Commands&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#parameter-tuning-commands&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;h3 id=&#34;pg-tune&#34;&gt;pg tune&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#pg-tune&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;Generate a recommended set of PostgreSQL parameters based on the current PostgreSQL major version, host hardware, and workload profile. By default, it auto-detects CPU, memory, and data disk size, then prints the result as text output.&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-68c1ca79-fence-18&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;9&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-68c1ca79-fence-18&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-68c1ca79-fence-18-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg tune                       &lt;span class=&#34;c1&#34;&gt;# auto-detect hardware, use oltp profile&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg tuning                     &lt;span class=&#34;c1&#34;&gt;# alias&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg tune -p olap               &lt;span class=&#34;c1&#34;&gt;# use OLAP profile&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg tune -p tiny               &lt;span class=&#34;c1&#34;&gt;# for small instances&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg tune -c &lt;span class=&#34;m&#34;&gt;8&lt;/span&gt; -m &lt;span class=&#34;m&#34;&gt;32768&lt;/span&gt; -d &lt;span class=&#34;m&#34;&gt;500&lt;/span&gt;  &lt;span class=&#34;c1&#34;&gt;# override hardware detection&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg tune -C &lt;span class=&#34;m&#34;&gt;500&lt;/span&gt;                &lt;span class=&#34;c1&#34;&gt;# override max_connections&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg tune -R 0.30               &lt;span class=&#34;c1&#34;&gt;# adjust shared_buffers ratio&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg tune -o json               &lt;span class=&#34;c1&#34;&gt;# structured JSON output&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg tune -o yaml               &lt;span class=&#34;c1&#34;&gt;# structured YAML output&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Options:&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;td-table-scroll td-table-scroll--full&#34; tabindex=&#34;0&#34; role=&#34;region&#34; aria-label=&#34;Scrollable table&#34;&gt;
&lt;table class=&#34;full-width&#34;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Option&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Short&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Default&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--profile&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;-p&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;oltp&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Tuning profile: &lt;code&gt;oltp&lt;/code&gt; / &lt;code&gt;olap&lt;/code&gt; / &lt;code&gt;tiny&lt;/code&gt; / &lt;code&gt;crit&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--cpu&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;-c&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;0&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;CPU cores, &lt;code&gt;0&lt;/code&gt; means auto-detect&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--mem&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;-m&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;0&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Total memory in MB, &lt;code&gt;0&lt;/code&gt; means auto-detect&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--disk&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;-d&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;0&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Data disk size in GB, &lt;code&gt;0&lt;/code&gt; means auto-detect&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--max-conn&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;-C&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;0&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Override &lt;code&gt;max_connections&lt;/code&gt;, &lt;code&gt;0&lt;/code&gt; uses profile default&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--shmem-ratio&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;-R&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;0.25&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Fraction of memory used for &lt;code&gt;shared_buffers&lt;/code&gt;, range &lt;code&gt;0.1 ~ 0.4&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Profiles:&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;td-table-scroll td-table-scroll--full&#34; tabindex=&#34;0&#34; role=&#34;region&#34; aria-label=&#34;Scrollable table&#34;&gt;
&lt;table class=&#34;full-width&#34;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Profile&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Best for&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Characteristics&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;oltp&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;General transactional workloads&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Balanced connection count, cache, and parallelism&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;olap&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Analytical workloads&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;More aggressive parallelism and work memory&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;tiny&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Small instances&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Constrained memory footprint and parallelism&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;crit&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Latency-sensitive workloads&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Restricts parallel gather and favors stable response time&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Notes:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Generated parameters are automatically gated by PostgreSQL major version. For example, &lt;code&gt;io_workers&lt;/code&gt; is only emitted for PG 18+.&lt;/li&gt;
&lt;li&gt;Text output can be redirected into a config snippet, while structured output is better suited for automation.&lt;/li&gt;
&lt;li&gt;The command currently generates recommendations only; it does not modify PostgreSQL configuration files directly.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;instance-fork&#34;&gt;Instance Fork&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#instance-fork&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;h3 id=&#34;pg-fork&#34;&gt;pg fork&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#pg-fork&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;Create a local one-off PostgreSQL physical copy for temporary analysis, troubleshooting, recovery validation, and development testing. Managed forks are written to &lt;code&gt;/pg/data-&amp;lt;name&amp;gt;&lt;/code&gt; by default and are not registered with Pigsty, systemd, or Patroni. When &lt;code&gt;--dst-data&lt;/code&gt; is specified explicitly, the command creates an unmanaged fork that is not enumerated by &lt;code&gt;fork list&lt;/code&gt;.&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-68c1ca79-fence-19&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;10&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-68c1ca79-fence-19&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-68c1ca79-fence-19-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg fork dev                       &lt;span class=&#34;c1&#34;&gt;# Create /pg/data-dev, do not start&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg fork init dev --start          &lt;span class=&#34;c1&#34;&gt;# Create and start, probing ports from 15432&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg fork init dev -s --dst-port &lt;span class=&#34;m&#34;&gt;15433&lt;/span&gt;    &lt;span class=&#34;c1&#34;&gt;# Create and start on specified port&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg fork init dev -D /pg/data2 --src-port &lt;span class=&#34;m&#34;&gt;15431&lt;/span&gt;  &lt;span class=&#34;c1&#34;&gt;# Specify source dir and source port&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg fork init dev --dst-data /tmp/dev    &lt;span class=&#34;c1&#34;&gt;# Create unmanaged fork&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg fork list                      &lt;span class=&#34;c1&#34;&gt;# List managed forks&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg fork start dev                 &lt;span class=&#34;c1&#34;&gt;# Start existing managed fork&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg fork stop dev                  &lt;span class=&#34;c1&#34;&gt;# Stop existing managed fork&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg fork rm dev --stop             &lt;span class=&#34;c1&#34;&gt;# Stop and remove a running fork&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg fork init dev --plan           &lt;span class=&#34;c1&#34;&gt;# Show execution plan only&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Create Options:&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;td-table-scroll td-table-scroll--full&#34; tabindex=&#34;0&#34; role=&#34;region&#34; aria-label=&#34;Scrollable table&#34;&gt;
&lt;table class=&#34;full-width&#34;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Option&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Short&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Default&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--dst-data&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;/pg/data-&amp;lt;name&amp;gt;&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Unmanaged target data directory&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--dst-port&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;auto-detect&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Target port, probes free ports starting at 15432&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--src-data&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;/pg/data&lt;/code&gt; or &lt;code&gt;$PG_DATA&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Source data directory; can also be set globally with &lt;code&gt;pg -D/--data&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--src-port&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;5432&lt;/code&gt; or &lt;code&gt;$PG_PORT&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Source port&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--start&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;-s&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;false&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Start the fork after creation&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--force&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;-f&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;false&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Overwrite an existing stopped target directory and skip confirmation&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--timeout&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;-t&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;60&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Startup wait timeout in seconds&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--yes&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;-y&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;false&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Skip confirmation prompt&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--plan&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;false&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Show execution plan only&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Management Commands:&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;td-table-scroll td-table-scroll--full&#34; tabindex=&#34;0&#34; role=&#34;region&#34; aria-label=&#34;Scrollable table&#34;&gt;
&lt;table class=&#34;full-width&#34;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Command&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Common Options&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pig pg fork list&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;List managed forks&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pig pg fork start &amp;lt;name&amp;gt; or --dst-data &amp;lt;dir&amp;gt;&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--dst-data&lt;/code&gt;, &lt;code&gt;--dst-port&lt;/code&gt;, &lt;code&gt;-t/--timeout&lt;/code&gt;, &lt;code&gt;--plan&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Start existing fork&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pig pg fork stop &amp;lt;name&amp;gt; or --dst-data &amp;lt;dir&amp;gt;&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--dst-data&lt;/code&gt;, &lt;code&gt;-m/--mode&lt;/code&gt;, &lt;code&gt;-t/--timeout&lt;/code&gt;, &lt;code&gt;--plan&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Stop existing fork&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pig pg fork rm &amp;lt;name&amp;gt; or --dst-data &amp;lt;dir&amp;gt;&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--dst-data&lt;/code&gt;, &lt;code&gt;--stop&lt;/code&gt;, &lt;code&gt;-m/--mode&lt;/code&gt;, &lt;code&gt;-t/--timeout&lt;/code&gt;, &lt;code&gt;-f/--force&lt;/code&gt;, &lt;code&gt;-y/--yes&lt;/code&gt;, &lt;code&gt;--plan&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Remove fork; running forks require &lt;code&gt;--stop&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Behavior Notes:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;When the source instance is running, the command uses PostgreSQL low-level backup APIs to create a consistent physical copy; when the source is stopped, it can perform a cold copy.&lt;/li&gt;
&lt;li&gt;The command prefers CoW/reflink. If only ordinary copy is available, interactive mode warns about disk-space risk and waits for confirmation.&lt;/li&gt;
&lt;li&gt;To avoid deleting source data by mistake, the target directory cannot be &lt;code&gt;/&lt;/code&gt;, &lt;code&gt;/pg&lt;/code&gt;, source PGDATA, or a parent/child of source PGDATA. Symlinks are resolved before checks.&lt;/li&gt;
&lt;li&gt;After copy, runtime and replication state is cleaned from the fork and &lt;code&gt;fork.json&lt;/code&gt; is written. The new instance starts only when &lt;code&gt;-s|--start&lt;/code&gt; is specified.&lt;/li&gt;
&lt;li&gt;Managed forks must be managed by name. Unmanaged forks require &lt;code&gt;--dst-data&lt;/code&gt; when starting, stopping, or removing.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;List Forks:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;pig pg fork list&lt;/code&gt; scans &lt;code&gt;/pg/data-*&lt;/code&gt; and reads &lt;code&gt;fork.json&lt;/code&gt;. Text status only distinguishes &lt;code&gt;forked&lt;/code&gt; and &lt;code&gt;orphan&lt;/code&gt;; it does not check live process state.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Structured Output:&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-68c1ca79-fence-20&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;2&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-68c1ca79-fence-20&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-68c1ca79-fence-20-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg fork init dev --plan -o yaml
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg fork list -o json&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;h2 id=&#34;log-commands&#34;&gt;Log Commands&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#log-commands&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Log commands view PostgreSQL log files. Default log directory is &lt;code&gt;/pg/log/postgres&lt;/code&gt;, can be changed via &lt;code&gt;--log-dir&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Log Command Global Options:&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;td-table-scroll td-table-scroll--full&#34; tabindex=&#34;0&#34; role=&#34;region&#34; aria-label=&#34;Scrollable table&#34;&gt;
&lt;table class=&#34;full-width&#34;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Option&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--log-dir&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Log directory path (default: &lt;code&gt;/pg/log/postgres&lt;/code&gt;)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--lines&lt;/code&gt; / &lt;code&gt;-n&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Number of lines to show, default 50&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--follow&lt;/code&gt; / &lt;code&gt;-f&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Follow latest log, only on parent &lt;code&gt;pg log&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Permission Handling:&lt;/strong&gt; If current user lacks permission to read log directory, command automatically retries with &lt;code&gt;sudo&lt;/code&gt;. &lt;code&gt;-o json&lt;/code&gt; emits JSONL log records; log snapshots do not support &lt;code&gt;yaml&lt;/code&gt; or &lt;code&gt;json-pretty&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id=&#34;pg-log&#34;&gt;pg log&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#pg-log&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;Show the latest log snapshot; with &lt;code&gt;-f&lt;/code&gt;, follow the latest log.&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-68c1ca79-fence-21&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;3&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-68c1ca79-fence-21&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-68c1ca79-fence-21-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg log                        &lt;span class=&#34;c1&#34;&gt;# Show latest 50 lines&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg log -n &lt;span class=&#34;m&#34;&gt;100&lt;/span&gt;                 &lt;span class=&#34;c1&#34;&gt;# Show latest 100 lines&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg log -f                     &lt;span class=&#34;c1&#34;&gt;# Follow latest log&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;h3 id=&#34;pg-log-list&#34;&gt;pg log list&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#pg-log-list&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;List log files in log directory.&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-68c1ca79-fence-22&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;2&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-68c1ca79-fence-22&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-68c1ca79-fence-22-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg log list                              &lt;span class=&#34;c1&#34;&gt;# List logs in default directory&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg log list --log-dir /var/log/postgres  &lt;span class=&#34;c1&#34;&gt;# List logs in specified directory&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;h3 id=&#34;pg-log-tail&#34;&gt;pg log tail&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#pg-log-tail&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;Real-time log viewing (like &lt;code&gt;tail -f&lt;/code&gt;). Default views latest CSV log file.&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-68c1ca79-fence-23&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;4&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-68c1ca79-fence-23&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-68c1ca79-fence-23-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg log tail                   &lt;span class=&#34;c1&#34;&gt;# View latest log&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg log tail postgresql.csv    &lt;span class=&#34;c1&#34;&gt;# View specific log file&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg log tail -n &lt;span class=&#34;m&#34;&gt;100&lt;/span&gt;            &lt;span class=&#34;c1&#34;&gt;# Show last 100 lines then follow&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg log tail --log-dir /var/log/postgres  &lt;span class=&#34;c1&#34;&gt;# Use custom directory&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Options:&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;td-table-scroll td-table-scroll--full&#34; tabindex=&#34;0&#34; role=&#34;region&#34; aria-label=&#34;Scrollable table&#34;&gt;
&lt;table class=&#34;full-width&#34;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Option&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Short&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Default&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--lines&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;-n&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;50&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Number of lines to show&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;h3 id=&#34;pg-log-show&#34;&gt;pg log show&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#pg-log-show&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;Output log file content.&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-68c1ca79-fence-24&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;5&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-68c1ca79-fence-24&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-68c1ca79-fence-24-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg log show                   &lt;span class=&#34;c1&#34;&gt;# Output latest log&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg log cat                    &lt;span class=&#34;c1&#34;&gt;# Alias for show&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg log c                      &lt;span class=&#34;c1&#34;&gt;# Alias for show&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg log show -n &lt;span class=&#34;m&#34;&gt;100&lt;/span&gt;            &lt;span class=&#34;c1&#34;&gt;# Output last 100 lines&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg log show postgresql.csv    &lt;span class=&#34;c1&#34;&gt;# Output specific log file&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Options:&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;td-table-scroll td-table-scroll--full&#34; tabindex=&#34;0&#34; role=&#34;region&#34; aria-label=&#34;Scrollable table&#34;&gt;
&lt;table class=&#34;full-width&#34;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Option&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Short&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Default&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--lines&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;-n&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;50&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Number of lines to show&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;h3 id=&#34;pg-log-less&#34;&gt;pg log less&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#pg-log-less&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;Open log file with less. Defaults to end of file (&lt;code&gt;+G&lt;/code&gt;).&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-68c1ca79-fence-25&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;4&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-68c1ca79-fence-25&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-68c1ca79-fence-25-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg log less                   &lt;span class=&#34;c1&#34;&gt;# Open latest log with less&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg log vi                     &lt;span class=&#34;c1&#34;&gt;# Alias&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg log v                      &lt;span class=&#34;c1&#34;&gt;# Alias&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg log less postgresql.csv    &lt;span class=&#34;c1&#34;&gt;# Open specific log file&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;h3 id=&#34;pg-log-grep&#34;&gt;pg log grep&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#pg-log-grep&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;Search log file content.&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-68c1ca79-fence-26&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;4&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-68c1ca79-fence-26&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-68c1ca79-fence-26-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg log grep ERROR             &lt;span class=&#34;c1&#34;&gt;# Search for ERROR&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg log grep --ignore-case error  &lt;span class=&#34;c1&#34;&gt;# Ignore case&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg log grep -C &lt;span class=&#34;m&#34;&gt;3&lt;/span&gt; ERROR        &lt;span class=&#34;c1&#34;&gt;# Show context&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg log grep ERROR pg.csv      &lt;span class=&#34;c1&#34;&gt;# Search specific log file&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Options:&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;td-table-scroll td-table-scroll--full&#34; tabindex=&#34;0&#34; role=&#34;region&#34; aria-label=&#34;Scrollable table&#34;&gt;
&lt;table class=&#34;full-width&#34;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Option&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Short&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--ignore-case&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Ignore case&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--context&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;-C&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Show context lines&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;h2 id=&#34;pg-svc-subcommand&#34;&gt;pg svc Subcommand&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#pg-svc-subcommand&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;pg svc&lt;/code&gt; (also &lt;code&gt;pg service&lt;/code&gt; or &lt;code&gt;pg s&lt;/code&gt;) provides systemctl-based PostgreSQL service management:&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-68c1ca79-fence-27&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;5&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-68c1ca79-fence-27&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-68c1ca79-fence-27-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg svc start                 &lt;span class=&#34;c1&#34;&gt;# Start postgres service&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg svc stop                  &lt;span class=&#34;c1&#34;&gt;# Stop postgres service&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg svc restart               &lt;span class=&#34;c1&#34;&gt;# Restart postgres service&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg svc reload                &lt;span class=&#34;c1&#34;&gt;# Reload postgres service&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg svc status                &lt;span class=&#34;c1&#34;&gt;# Show service status&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Alias Reference:&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;td-table-scroll td-table-scroll--full&#34; tabindex=&#34;0&#34; role=&#34;region&#34; aria-label=&#34;Scrollable table&#34;&gt;
&lt;table class=&#34;full-width&#34;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Command&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Alias&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pg svc start&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;boot, up&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pg svc stop&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;halt, dn, down&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pg svc restart&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;reboot, rt&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pg svc reload&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;rl, hup&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pg svc status&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;st, stat&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;h2 id=&#34;design-notes&#34;&gt;Design Notes&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#design-notes&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Relationship with Native Tools:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;pig pg&lt;/code&gt; is not a simple wrapper of PostgreSQL native tools, but a higher-level abstraction for common operations:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Service control commands (init/start/stop/restart/reload/promote) call &lt;code&gt;pg_ctl&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;status&lt;/code&gt; command shows process and related service status beyond &lt;code&gt;pg_ctl status&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Connection management commands (psql/ps/kill) call &lt;code&gt;psql&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;clone&lt;/code&gt; command uses SQL to create a database copy&lt;/li&gt;
&lt;li&gt;Maintenance commands (vacuum/analyze/freeze) call &lt;code&gt;vacuumdb&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;repack command calls &lt;code&gt;pg_repack&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;fork&lt;/code&gt; command uses PostgreSQL low-level backup APIs and local file copy to create one-off physical copies&lt;/li&gt;
&lt;li&gt;Log commands call system tools like &lt;code&gt;tail&lt;/code&gt;, &lt;code&gt;less&lt;/code&gt;, &lt;code&gt;grep&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For full native tool functionality, call the respective commands directly.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Security Considerations:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;--state&lt;/code&gt;, &lt;code&gt;--query&lt;/code&gt;, &lt;code&gt;--schema&lt;/code&gt;, &lt;code&gt;--table&lt;/code&gt; parameters are validated to prevent SQL injection&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pg kill&lt;/code&gt; defaults to dry-run mode to prevent accidents&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pg clone&lt;/code&gt; terminates existing sessions on the source database; use it during a maintenance window&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pg fork&lt;/code&gt; rejects dangerous target paths; ordinary-copy fallback warns about disk-space risk&lt;/li&gt;
&lt;li&gt;Log commands auto-retry with sudo when permissions insufficient&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Platform Support:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This command is designed for Linux systems. Some features depend on &lt;code&gt;systemctl&lt;/code&gt;, and log commands depend on readable PostgreSQL log files plus common tools such as &lt;code&gt;tail&lt;/code&gt;, &lt;code&gt;less&lt;/code&gt;, and &lt;code&gt;grep&lt;/code&gt;.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>CMD: pt</title>
      <link>https://ext.pgsty.com/pig/cmd/pt/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://ext.pgsty.com/pig/cmd/pt/</guid>
      <description>
        
        
        &lt;p&gt;Since v1.6.0, the &lt;code&gt;pig patroni&lt;/code&gt; command (alias &lt;code&gt;pig pt&lt;/code&gt;) is a &lt;strong&gt;transparent launcher&lt;/strong&gt; for the
installed &lt;code&gt;patronictl&lt;/code&gt; binary: pig only owns config-file selection and a few local helpers,
while every other command and all of its arguments are &lt;strong&gt;forwarded unchanged&lt;/strong&gt; to &lt;code&gt;patronictl&lt;/code&gt; —
with native flags, prompts, output, and exit codes. New patronictl features work without
waiting for a pig release.&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-45e12f69-fence-0&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;11&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-45e12f69-fence-0&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-45e12f69-fence-0-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pt transparently launches the installed patronictl binary.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Pig only owns config-file selection and these &lt;span class=&#34;nb&#34;&gt;local&lt;/span&gt; helpers:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig pt &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;KEY&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;VALUE...       update PostgreSQL or scalar Patroni settings
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig pt start&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;stop             manage the &lt;span class=&#34;nb&#34;&gt;local&lt;/span&gt; patroni service
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig pt service &amp;lt;action&amp;gt;       start, stop, restart, reload, or show service
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig pt status                 show &lt;span class=&#34;nb&#34;&gt;local&lt;/span&gt; and cluster status
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig pt log ...                view &lt;span class=&#34;nb&#34;&gt;local&lt;/span&gt; Patroni logs
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Every other &lt;span class=&#34;nb&#34;&gt;command&lt;/span&gt; and all arguments after it are passed unchanged to
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;patronictl. Use &lt;span class=&#34;s2&#34;&gt;&amp;#34;pig pt -- COMMAND ...&amp;#34;&lt;/span&gt; to bypass a local-name collision.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;The first non-option command token decides the dispatch:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;set&lt;/code&gt;, &lt;code&gt;start&lt;/code&gt;/&lt;code&gt;up&lt;/code&gt;, &lt;code&gt;stop&lt;/code&gt;/&lt;code&gt;dn&lt;/code&gt;, &lt;code&gt;service&lt;/code&gt;/&lt;code&gt;svc&lt;/code&gt;, &lt;code&gt;status&lt;/code&gt;/&lt;code&gt;st&lt;/code&gt;, and &lt;code&gt;log&lt;/code&gt;/&lt;code&gt;l&lt;/code&gt;
select pig&amp;rsquo;s local implementation;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;every other token&lt;/strong&gt; (&lt;code&gt;list&lt;/code&gt;, &lt;code&gt;restart&lt;/code&gt;, &lt;code&gt;reload&lt;/code&gt;, &lt;code&gt;reinit&lt;/code&gt;, &lt;code&gt;switchover&lt;/code&gt;, &lt;code&gt;failover&lt;/code&gt;,&lt;code&gt;pause&lt;/code&gt;, &lt;code&gt;resume&lt;/code&gt;, &lt;code&gt;show-config&lt;/code&gt;, &lt;code&gt;edit-config&lt;/code&gt;, &lt;code&gt;query&lt;/code&gt;, &lt;code&gt;history&lt;/code&gt;, &lt;code&gt;topology&lt;/code&gt;, &lt;code&gt;dsn&lt;/code&gt;,&lt;code&gt;version&lt;/code&gt;, …) and everything after it is forwarded verbatim to &lt;code&gt;patronictl&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pig pt -- &amp;lt;command&amp;gt; ...&lt;/code&gt; bypasses local-name collisions (e.g. &lt;code&gt;pig pt -- set&lt;/code&gt;
hands &lt;code&gt;set&lt;/code&gt; to patronictl);&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pig pt&lt;/code&gt; with no command prints pig&amp;rsquo;s help and does not run patronictl;
use &lt;code&gt;pig pt &amp;lt;command&amp;gt; --help&lt;/code&gt; for native subcommand help and &lt;code&gt;pig pt -- --help&lt;/code&gt;
for patronictl root help.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;command-overview&#34;&gt;Command Overview&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#command-overview&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Forwarded commands&lt;/strong&gt; (native &lt;code&gt;patronictl&lt;/code&gt;):&lt;/p&gt;
&lt;div class=&#34;td-table-scroll td-table-scroll--full&#34; tabindex=&#34;0&#34; role=&#34;region&#34; aria-label=&#34;Scrollable table&#34;&gt;
&lt;table class=&#34;full-width&#34;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Example&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pig pt list [CLUSTER]&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;List cluster members (native output, &lt;code&gt;--format json&lt;/code&gt;)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pig pt restart CLUSTER [MEMBER]&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Restart PostgreSQL of a cluster / member (native prompt)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pig pt reload CLUSTER&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Reload PostgreSQL configuration&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pig pt reinit CLUSTER MEMBER&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Reinitialize a member (resync from primary)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pig pt switchover CLUSTER [--candidate X]&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Planned switchover&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pig pt failover CLUSTER --candidate MEMBER&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Manual failover (&lt;strong&gt;positional arg is the cluster&lt;/strong&gt;)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pig pt pause / resume CLUSTER&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Enter / leave maintenance mode&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pig pt show-config / edit-config&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Show / edit cluster dynamic configuration&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pig pt query -c &#39;select 1&#39;&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Native query (&lt;code&gt;-c&lt;/code&gt; here is query&amp;rsquo;s own SQL option)&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;p&gt;Forwarded positionals follow patronictl&amp;rsquo;s native &lt;strong&gt;cluster-first&lt;/strong&gt; semantics; confirmation
prompts, output formats, and exit codes (including Click usage-error exit code &lt;code&gt;2&lt;/code&gt;) are all
owned by patronictl.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Local commands&lt;/strong&gt; (implemented by pig):&lt;/p&gt;
&lt;div class=&#34;td-table-scroll td-table-scroll--full&#34; tabindex=&#34;0&#34; role=&#34;region&#34; aria-label=&#34;Scrollable table&#34;&gt;
&lt;table class=&#34;full-width&#34;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Command&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Alias&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pt set&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Update PostgreSQL params or scalar Patroni settings&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pt status&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;st&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Combined status: systemd + processes + cluster&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pt service&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;svc&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Manage the local patroni systemd service&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pt start&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;up&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Hidden shortcut for &lt;code&gt;pt svc start&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pt stop&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;dn&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Hidden shortcut for &lt;code&gt;pt svc stop&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pt log&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;l&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;View local Patroni logs (show / tail / grep)&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;p&gt;Note: top-level &lt;code&gt;pt restart&lt;/code&gt; is &lt;strong&gt;not&lt;/strong&gt; a daemon shortcut — it forwards to&lt;code&gt;patronictl restart&lt;/code&gt; (restarting PostgreSQL). Use &lt;code&gt;pt svc restart&lt;/code&gt; to restart
the patroni daemon itself.&lt;/p&gt;
&lt;h2 id=&#34;quick-start&#34;&gt;Quick Start&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#quick-start&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-45e12f69-fence-1&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;21&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-45e12f69-fence-1&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-45e12f69-fence-1-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Cluster operations (native passthrough, cluster-first)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pt list pg-meta                         &lt;span class=&#34;c1&#34;&gt;# list cluster members&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pt list pg-meta --format json           &lt;span class=&#34;c1&#34;&gt;# native JSON output&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pt restart pg-test --pending            &lt;span class=&#34;c1&#34;&gt;# apply pending restarts&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pt restart pg-test pg-test-1            &lt;span class=&#34;c1&#34;&gt;# restart a specific member&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pt switchover pg-test --candidate pg-2  &lt;span class=&#34;c1&#34;&gt;# planned switchover&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pt failover pg-test --candidate pg-2    &lt;span class=&#34;c1&#34;&gt;# manual failover&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pt pause pg-test                        &lt;span class=&#34;c1&#34;&gt;# enter maintenance mode&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pt show-config pg-test                  &lt;span class=&#34;c1&#34;&gt;# show dynamic configuration&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Configuration sugar (local, one edit-config call)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pt &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;ttl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;60&lt;/span&gt;                           &lt;span class=&#34;c1&#34;&gt;# scalar Patroni key → --set&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pt &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;max_connections&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;200&lt;/span&gt;              &lt;span class=&#34;c1&#34;&gt;# PostgreSQL parameter → --pg&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pt &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;ttl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;60&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;max_connections&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;200&lt;/span&gt; -y    &lt;span class=&#34;c1&#34;&gt;# mixed change, skip confirmation&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pt &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;shared_buffers&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;4GB --plan        &lt;span class=&#34;c1&#34;&gt;# preview the translated native command&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Service and logs (local)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pt status                               &lt;span class=&#34;c1&#34;&gt;# combined status&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pt svc restart                          &lt;span class=&#34;c1&#34;&gt;# restart the patroni daemon&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pt log -f                               &lt;span class=&#34;c1&#34;&gt;# follow logs&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pt log grep ERROR                       &lt;span class=&#34;c1&#34;&gt;# search logs&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;h2 id=&#34;pigpt-options&#34;&gt;Pig/PT Options&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#pigpt-options&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;These wrapper-level options &lt;strong&gt;must precede the native command&lt;/strong&gt;; once the native command
token appears, all remaining tokens belong to patronictl:&lt;/p&gt;
&lt;div class=&#34;td-table-scroll td-table-scroll--full&#34; tabindex=&#34;0&#34; role=&#34;region&#34; aria-label=&#34;Scrollable table&#34;&gt;
&lt;table class=&#34;full-width&#34;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Option&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Short&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--config-file&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;-c&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Explicit Patroni/patronictl configuration file&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--dbsu&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;OS user used to execute patronictl (default &lt;code&gt;$PIG_DBSU&lt;/code&gt; or &lt;code&gt;postgres&lt;/code&gt;)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--dcs-url&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;-d&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Override the Patroni DCS URL (&lt;code&gt;--dcs&lt;/code&gt; is an alias)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--insecure&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;-k&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Allow TLS without certificate verification&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-45e12f69-fence-2&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;2&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-45e12f69-fence-2&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-45e12f69-fence-2-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pt -c /path/patroni.yml list pg-meta   &lt;span class=&#34;c1&#34;&gt;# wrapper-level -c: config file&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pt query -c &lt;span class=&#34;s1&#34;&gt;&amp;#39;select 1&amp;#39;&lt;/span&gt;                 &lt;span class=&#34;c1&#34;&gt;# native query&amp;#39;s -c: SQL, not stolen by pig&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;Since v1.6.0, &lt;code&gt;--dbsu&lt;/code&gt; no longer has the &lt;code&gt;-U&lt;/code&gt; shorthand (the &lt;code&gt;pg&lt;/code&gt; / &lt;code&gt;pb&lt;/code&gt; commands keep it).&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;config-file-resolution&#34;&gt;Config-File Resolution&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#config-file-resolution&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Every config-aware patronictl invocation receives exactly one pig-selected root &lt;code&gt;-c &amp;lt;path&amp;gt;&lt;/code&gt;,
resolved in this order:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;explicit &lt;code&gt;-c/--config-file&lt;/code&gt; given before the command;&lt;/li&gt;
&lt;li&gt;non-empty &lt;code&gt;PATRONICTL_CONFIG_FILE&lt;/code&gt; environment variable;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/etc/patroni/patroni.yml&lt;/code&gt; (exists and readable as the DBSU);&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/infra/conf/patronictl.yml&lt;/code&gt; (exists and readable as the DBSU);&lt;/li&gt;
&lt;li&gt;fallback to &lt;code&gt;/etc/patroni/patroni.yml&lt;/code&gt;, so patronictl&amp;rsquo;s error names the conventional path.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Explicit and environment paths are authoritative: pig does not silently substitute another
candidate when they are missing or unreadable; relative paths are made absolute before
switching OS user. Conventional candidates are probed for readability as the &lt;strong&gt;resolved DBSU&lt;/strong&gt;
(not by mode bits). Resolution is lazy: pure systemd operations like &lt;code&gt;pt svc start&lt;/code&gt; never
probe a config, and native &lt;code&gt;-h/--help&lt;/code&gt; takes a config-independent fast path that works on
machines without Patroni configured.&lt;/p&gt;
&lt;h2 id=&#34;transparent-execution-and-output-modes&#34;&gt;Transparent Execution and Output Modes&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#transparent-execution-and-output-modes&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Forwarded execution directly inherits stdin / stdout / stderr and the terminal: native
prompts, the &lt;code&gt;edit-config&lt;/code&gt; editor, &lt;code&gt;--watch&lt;/code&gt; streaming, and exit codes are all preserved.
Pig performs no output capture, no duplicate error rendering, no retries, and no cluster/DCS
reads before or after execution. The logical invocation is:&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-45e12f69-fence-3&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;text&#34; data-td-line-count=&#34;1&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-45e12f69-fence-3&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-45e12f69-fence-3-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;patronictl -c &amp;lt;selected-config&amp;gt; [--dcs-url URL] [--insecure] &amp;lt;native argv...&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Structured output&lt;/strong&gt;: the forwarding path supports pig&amp;rsquo;s &lt;code&gt;text&lt;/code&gt; mode only. A pig&lt;code&gt;-o json&lt;/code&gt; / &lt;code&gt;-o yaml&lt;/code&gt; placed before the native command is &lt;strong&gt;rejected&lt;/strong&gt; (with guidance to use
patronictl&amp;rsquo;s native output options); anything after the native command is forwarded as-is
and validated by patronictl:&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-45e12f69-fence-4&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;4&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-45e12f69-fence-4&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-45e12f69-fence-4-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig -o json pt list          &lt;span class=&#34;c1&#34;&gt;# rejected: use native output options&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pt -o json list          &lt;span class=&#34;c1&#34;&gt;# rejected: use native output options&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pt list --format json    &lt;span class=&#34;c1&#34;&gt;# forwarded: native patronictl JSON&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pt list -o json          &lt;span class=&#34;c1&#34;&gt;# forwarded unchanged; patronictl validates it&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;Local commands (&lt;code&gt;set&lt;/code&gt; / &lt;code&gt;status&lt;/code&gt; / &lt;code&gt;log&lt;/code&gt; / &lt;code&gt;service&lt;/code&gt;) keep pig&amp;rsquo;s structured output behavior.&lt;/p&gt;
&lt;h2 id=&#34;pig-pt-set&#34;&gt;pig pt set&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#pig-pt-set&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;pt set&lt;/code&gt; is the only local configuration sugar; it edits the cluster selected by the
resolved configuration:&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-45e12f69-fence-5&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;1&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-45e12f69-fence-5&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-45e12f69-fence-5-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pt &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;KEY&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;VALUE &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;KEY&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;VALUE ...&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;--yes&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;--plan&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Key classification&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;These scalar Patroni dynamic keys translate to native &lt;code&gt;--set&lt;/code&gt;:&lt;code&gt;loop_wait&lt;/code&gt;, &lt;code&gt;ttl&lt;/code&gt;, &lt;code&gt;retry_timeout&lt;/code&gt;, &lt;code&gt;primary_race_backoff&lt;/code&gt;,&lt;code&gt;maximum_lag_on_failover&lt;/code&gt;, &lt;code&gt;maximum_lag_on_syncnode&lt;/code&gt;, &lt;code&gt;max_timelines_history&lt;/code&gt;,&lt;code&gt;primary_start_timeout&lt;/code&gt;, &lt;code&gt;primary_stop_timeout&lt;/code&gt;, &lt;code&gt;synchronous_mode&lt;/code&gt;,&lt;code&gt;synchronous_mode_strict&lt;/code&gt;, &lt;code&gt;synchronous_node_count&lt;/code&gt;, &lt;code&gt;failsafe_mode&lt;/code&gt;,&lt;code&gt;check_timeline&lt;/code&gt;, &lt;code&gt;member_slots_ttl&lt;/code&gt; (&lt;code&gt;pause&lt;/code&gt; is deliberately excluded —
use native &lt;code&gt;pause&lt;/code&gt;/&lt;code&gt;resume&lt;/code&gt;);&lt;/li&gt;
&lt;li&gt;every other key is treated as a PostgreSQL parameter and translates to native &lt;code&gt;--pg&lt;/code&gt;
(including dotted custom GUCs like &lt;code&gt;timescaledb.telemetry_level&lt;/code&gt;);&lt;/li&gt;
&lt;li&gt;structural keys starting with &lt;code&gt;postgresql.&lt;/code&gt;, &lt;code&gt;standby_cluster.&lt;/code&gt;, &lt;code&gt;slots.&lt;/code&gt;, or&lt;code&gt;ignore_slots.&lt;/code&gt; are &lt;strong&gt;rejected&lt;/strong&gt;, pointing to native &lt;code&gt;pig pt edit-config --set&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All pairs merge into &lt;strong&gt;one&lt;/strong&gt; native &lt;code&gt;edit-config&lt;/code&gt; call in input order — one diff, one
confirmation, one DCS update:&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-45e12f69-fence-6&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;2&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-45e12f69-fence-6&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-45e12f69-fence-6-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pt &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;ttl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;60&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;max_connections&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;200&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;synchronous_mode&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;on
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# equivalent: patronictl -c &amp;lt;selected&amp;gt; edit-config --set ttl=60 --pg max_connections=200 --set synchronous_mode=on&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;--yes/-y&lt;/code&gt; appends native &lt;code&gt;--force&lt;/code&gt; to skip confirmation; otherwise patronictl shows the
diff and owns confirmation;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--plan&lt;/code&gt; mutates nothing and renders the selected config plus the translated native
command (&lt;strong&gt;plans may contain sensitive values&lt;/strong&gt;);&lt;/li&gt;
&lt;li&gt;in structured output mode, execution requires an explicit &lt;code&gt;--yes&lt;/code&gt; (hidden prompts are
forbidden);&lt;/li&gt;
&lt;li&gt;values parse as YAML: both &lt;code&gt;KEY=null&lt;/code&gt; and &lt;code&gt;KEY=&lt;/code&gt; remove a key, passed unchanged;&lt;/li&gt;
&lt;li&gt;after changing restart-required PostgreSQL parameters, pig suggests the follow-up:
first &lt;code&gt;pig pt list&lt;/code&gt;, then &lt;code&gt;pig pt restart CLUSTER --pending&lt;/code&gt; (explicit cluster required).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;service-management&#34;&gt;Service Management&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#service-management&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;pt service&lt;/code&gt; (alias &lt;code&gt;pt svc&lt;/code&gt;) manages the local &lt;code&gt;patroni&lt;/code&gt; systemd unit:&lt;/p&gt;
&lt;div class=&#34;td-table-scroll td-table-scroll--full&#34; tabindex=&#34;0&#34; role=&#34;region&#34; aria-label=&#34;Scrollable table&#34;&gt;
&lt;table class=&#34;full-width&#34;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Command&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Alias&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pt service start&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pt svc up&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Start the Patroni service&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pt service stop&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pt svc dn&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Stop the Patroni service&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pt service restart&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pt svc rs&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Restart the Patroni service&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pt service reload&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pt svc rl&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Reload the Patroni service&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pt service status&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pt svc st&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Show service status&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;p&gt;Top-level &lt;code&gt;pt start&lt;/code&gt; / &lt;code&gt;pt stop&lt;/code&gt; (aliases &lt;code&gt;up&lt;/code&gt; / &lt;code&gt;dn&lt;/code&gt;) are hidden shortcuts to the same
local implementation. Stopping the Patroni service may also stop PostgreSQL on this node
(depending on Patroni configuration).&lt;/p&gt;
&lt;h3 id=&#34;pt-status&#34;&gt;pt status&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#pt-status&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;Shows combined status: systemd service state, Patroni process info, and cluster members
from patronictl.&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-45e12f69-fence-7&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;2&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-45e12f69-fence-7&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-45e12f69-fence-7-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pt status
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pt st -o json                &lt;span class=&#34;c1&#34;&gt;# structured output&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;h3 id=&#34;pt-log&#34;&gt;pt log&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#pt-log&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;View local Patroni logs. The log directory comes from &lt;code&gt;log.dir&lt;/code&gt; in the selected config,
falling back to &lt;code&gt;/pg/log/patroni&lt;/code&gt;, or set it explicitly with &lt;code&gt;--log-dir&lt;/code&gt;. Only &lt;code&gt;pt log&lt;/code&gt; and&lt;code&gt;pt log show&lt;/code&gt; support &lt;code&gt;-o json&lt;/code&gt; (JSONL snapshot); follow / tail / grep are terminal streams
without structured output.&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-45e12f69-fence-8&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;6&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-45e12f69-fence-8&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-45e12f69-fence-8-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pt log                     &lt;span class=&#34;c1&#34;&gt;# show last 50 lines&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pt log -f                  &lt;span class=&#34;c1&#34;&gt;# follow log output&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pt log -n &lt;span class=&#34;m&#34;&gt;100&lt;/span&gt;              &lt;span class=&#34;c1&#34;&gt;# show last 100 lines&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pt log show -o json        &lt;span class=&#34;c1&#34;&gt;# JSONL snapshot&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pt log tail -n &lt;span class=&#34;m&#34;&gt;100&lt;/span&gt;         &lt;span class=&#34;c1&#34;&gt;# follow logs&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pt log grep ERROR          &lt;span class=&#34;c1&#34;&gt;# search logs&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;div class=&#34;td-table-scroll td-table-scroll--full&#34; tabindex=&#34;0&#34; role=&#34;region&#34; aria-label=&#34;Scrollable table&#34;&gt;
&lt;table class=&#34;full-width&#34;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Subcommand&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Aliases&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;show&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;cat, c, s&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Print recent Patroni logs&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;tail&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;t, f, follow&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Follow Patroni logs&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;grep&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;g, search&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Search Patroni logs&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;div class=&#34;td-table-scroll td-table-scroll--full&#34; tabindex=&#34;0&#34; role=&#34;region&#34; aria-label=&#34;Scrollable table&#34;&gt;
&lt;table class=&#34;full-width&#34;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Option&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Short&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Default&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--follow&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;-f&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;false&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Follow log output&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--lines&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;-n&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;50&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Number of lines shown&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--log-dir&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;auto&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Log directory&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;h2 id=&#34;migrating-from-v15x&#34;&gt;Migrating from v1.5.x&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#migrating-from-v15x&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;The v1.6.0 passthrough rewrite is a &lt;strong&gt;breaking change&lt;/strong&gt; — review automation before upgrading:&lt;/p&gt;
&lt;div class=&#34;td-table-scroll td-table-scroll--full&#34; tabindex=&#34;0&#34; role=&#34;region&#34; aria-label=&#34;Scrollable table&#34;&gt;
&lt;table class=&#34;full-width&#34;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;v1.5.x usage&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;v1.6.0 usage&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pig pt failover &amp;lt;candidate&amp;gt;&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;⚠ &lt;code&gt;pig pt failover CLUSTER --candidate MEMBER&lt;/code&gt; (the positional is now the &lt;strong&gt;cluster&lt;/strong&gt;)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pig pt restart [member]&lt;/code&gt; (auto scope)&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pig pt restart CLUSTER [MEMBER]&lt;/code&gt; (explicit cluster)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pig pt list -o json&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pig pt list --format json&lt;/code&gt; (native JSON, different schema)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pig pt config show&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pig pt show-config&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pig pt config edit&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pig pt edit-config&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pig pt config set K=V&lt;/code&gt; / &lt;code&gt;pg K=V&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pig pt set K=V&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pig pt restart -y&lt;/code&gt; (pig gate)&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;native patronictl confirmation; &lt;code&gt;pt set -y&lt;/code&gt; still works&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pig pt list -W&lt;/code&gt; / &lt;code&gt;-w 5&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;native &lt;code&gt;pig pt list --watch&lt;/code&gt; (patronictl semantics)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;aliases &lt;code&gt;ls/rs/rl/ri/so/fo/p/r/c&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;removed — use full native command names&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--dbsu -U&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--dbsu&lt;/code&gt; (&lt;code&gt;-U&lt;/code&gt; shorthand removed)&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;p&gt;Also: forwarded commands return native patronictl exit codes (usage errors exit &lt;code&gt;2&lt;/code&gt;), and
the pig-side pause-guard preflight for switchover/failover is gone — maintenance-mode
semantics are fully owned by Patroni.&lt;/p&gt;
&lt;h2 id=&#34;design-notes&#34;&gt;Design Notes&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#design-notes&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Single authority&lt;/strong&gt;: there is one cluster-control path — the installed &lt;code&gt;patronictl&lt;/code&gt; plus
one selected config, acting through the Patroni REST API / DCS. Pig embeds no DCS client or
REST control engine, keeps no patronictl command inventory, and adds no confirmation,
preflight, retry, or output rewriting to forwarded commands.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Privilege handling&lt;/strong&gt; (unchanged from v1.5.x):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;if the current user is already the DBSU: execute directly;&lt;/li&gt;
&lt;li&gt;if the current user is root: execute via &lt;code&gt;su - postgres -c &amp;quot;...&amp;quot;&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;otherwise: execute via &lt;code&gt;sudo -inu postgres -- ...&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Platform&lt;/strong&gt;: designed for Linux; service management relies on &lt;code&gt;systemctl&lt;/code&gt;, and the log
helpers require readable Patroni log files.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>CMD: pb</title>
      <link>https://ext.pgsty.com/pig/cmd/pb/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://ext.pgsty.com/pig/cmd/pb/</guid>
      <description>
        
        
        &lt;p&gt;The &lt;code&gt;pig pgbackrest&lt;/code&gt; command (alias &lt;code&gt;pig pb&lt;/code&gt;) manages pgBackRest backups and provides low-level restore primitives.
It wraps common &lt;code&gt;pgbackrest&lt;/code&gt; operations for a simplified backup management experience. All commands run as the database superuser (default &lt;code&gt;postgres&lt;/code&gt;).
For orchestrated point-in-time recovery on managed clusters, prefer &lt;a href=&#34;https://pig.pgsty.com/pitr/&#34;&gt;&lt;code&gt;pig pitr&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-71a5c4d9-fence-0&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;34&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-71a5c4d9-fence-0&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-71a5c4d9-fence-0-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pb - Manage pgBackRest backup and point-in-time recovery.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Information:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig pb info                      show backup info
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig pb list                      list backups
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig pb list repo                 list configured repositories
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig pb list stanza               list all stanzas
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Backup &lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt; Restore:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig pb backup                    create backup &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;auto: full/incr&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig pb backup full               create full backup
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig pb restore                   low-level restore primitive
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig pb restore -t &lt;span class=&#34;s2&#34;&gt;&amp;#34;...&amp;#34;&lt;/span&gt;          restore to specific &lt;span class=&#34;nb&#34;&gt;time&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig pb expire                    cleanup expired backups
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Stanza Management:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig pb create                    create stanza &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;first-time setup&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig pb upgrade                   upgrade stanza &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;after PG upgrade&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig pb delete                    delete stanza &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;DANGEROUS!&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Control:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig pb check                     verify backup integrity
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig pb start                     &lt;span class=&#34;nb&#34;&gt;enable&lt;/span&gt; pgBackRest operations
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig pb stop                      disable pgBackRest operations
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig pb log                       view pgBackRest logs
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Examples:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig pb info                      &lt;span class=&#34;c1&#34;&gt;# show all backup info&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig pb backup                    &lt;span class=&#34;c1&#34;&gt;# auto: full if none, else incr&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig pb backup full               &lt;span class=&#34;c1&#34;&gt;# full backup&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig pb restore -d                &lt;span class=&#34;c1&#34;&gt;# restore to latest (end of WAL)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig pb restore -t &lt;span class=&#34;s2&#34;&gt;&amp;#34;2025-01-01 12:00:00+08&amp;#34;&lt;/span&gt;  &lt;span class=&#34;c1&#34;&gt;# restore to time&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig pb create                    &lt;span class=&#34;c1&#34;&gt;# initialize stanza&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig pb expire                    &lt;span class=&#34;c1&#34;&gt;# cleanup per retention policy&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;h2 id=&#34;command-overview&#34;&gt;Command Overview&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#command-overview&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Information Query&lt;/strong&gt;:&lt;/p&gt;
&lt;div class=&#34;td-table-scroll td-table-scroll--full&#34; tabindex=&#34;0&#34; role=&#34;region&#34; aria-label=&#34;Scrollable table&#34;&gt;
&lt;table class=&#34;full-width&#34;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Command&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Alias&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Implementation&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pb info&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;i&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Show backup repository info&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pgbackrest info&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pb list&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;ls&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;List backup sets, repos, and stanzas&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pgbackrest info&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Backup &amp;amp; Restore&lt;/strong&gt;:&lt;/p&gt;
&lt;div class=&#34;td-table-scroll td-table-scroll--full&#34; tabindex=&#34;0&#34; role=&#34;region&#34; aria-label=&#34;Scrollable table&#34;&gt;
&lt;table class=&#34;full-width&#34;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Command&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Alias&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Implementation&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pb backup&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;b&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Create backup&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pgbackrest backup&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pb restore&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;r&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Low-level restore primitive&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pgbackrest restore&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pb expire&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;e&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Clean up expired backups&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pgbackrest expire&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Stanza Management&lt;/strong&gt;:&lt;/p&gt;
&lt;div class=&#34;td-table-scroll td-table-scroll--full&#34; tabindex=&#34;0&#34; role=&#34;region&#34; aria-label=&#34;Scrollable table&#34;&gt;
&lt;table class=&#34;full-width&#34;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Command&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Alias&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Implementation&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pb create&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;c&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Create stanza (first-time setup)&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pgbackrest stanza-create&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pb upgrade&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;u&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Upgrade stanza after PG major upgrade&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pgbackrest stanza-upgrade&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pb delete&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;d&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Delete stanza (dangerous!)&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pgbackrest stanza-delete&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Control Commands&lt;/strong&gt;:&lt;/p&gt;
&lt;div class=&#34;td-table-scroll td-table-scroll--full&#34; tabindex=&#34;0&#34; role=&#34;region&#34; aria-label=&#34;Scrollable table&#34;&gt;
&lt;table class=&#34;full-width&#34;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Command&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Alias&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Implementation&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pb check&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;ck&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Verify backup repository integrity&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pgbackrest check&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pb start&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;up&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Enable pgBackRest operations&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pgbackrest start&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pb stop&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;dw&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Disable pgBackRest operations&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pgbackrest stop&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pb log&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;l&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;View logs&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;latest log snapshot / tail&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;h2 id=&#34;quick-start&#34;&gt;Quick Start&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#quick-start&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-71a5c4d9-fence-1&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;28&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-71a5c4d9-fence-1&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-71a5c4d9-fence-1-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# View backup info&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pb info                          &lt;span class=&#34;c1&#34;&gt;# Show all backup info&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pb info -o json                  &lt;span class=&#34;c1&#34;&gt;# Result-wrapped structured JSON output&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pb info --raw --raw-output json  &lt;span class=&#34;c1&#34;&gt;# Native pgBackRest JSON output&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pb ls                            &lt;span class=&#34;c1&#34;&gt;# List all backups&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pb ls repo                       &lt;span class=&#34;c1&#34;&gt;# List configured repos&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pb ls stanza                     &lt;span class=&#34;c1&#34;&gt;# List all stanzas&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Create backup (must run on primary)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pb backup                        &lt;span class=&#34;c1&#34;&gt;# Auto mode: full if none, else incr&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pb backup full                   &lt;span class=&#34;c1&#34;&gt;# Full backup&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pb backup diff                   &lt;span class=&#34;c1&#34;&gt;# Differential backup&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pb backup incr                   &lt;span class=&#34;c1&#34;&gt;# Incremental backup&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Restore (low-level restore primitive, at least one recovery target is required)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pb restore -d                    &lt;span class=&#34;c1&#34;&gt;# Restore to latest (end of WAL)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pb restore -I                    &lt;span class=&#34;c1&#34;&gt;# Restore to backup consistency point&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pb restore -t &lt;span class=&#34;s2&#34;&gt;&amp;#34;2025-01-01 12:00:00+08&amp;#34;&lt;/span&gt;  &lt;span class=&#34;c1&#34;&gt;# Restore to specific time&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pb restore --name savepoint      &lt;span class=&#34;c1&#34;&gt;# Restore to named restore point&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Stanza management&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pb create                        &lt;span class=&#34;c1&#34;&gt;# Initialize stanza&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pb upgrade                       &lt;span class=&#34;c1&#34;&gt;# Upgrade stanza after PG major upgrade&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pb check                         &lt;span class=&#34;c1&#34;&gt;# Verify repository integrity&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Cleanup&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pb expire                        &lt;span class=&#34;c1&#34;&gt;# Clean up per retention policy&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pb expire --plan                 &lt;span class=&#34;c1&#34;&gt;# Preview cleanup plan only&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;h2 id=&#34;global-options&#34;&gt;Global Options&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#global-options&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;These options apply to all &lt;code&gt;pig pb&lt;/code&gt; subcommands:&lt;/p&gt;
&lt;div class=&#34;td-table-scroll td-table-scroll--full&#34; tabindex=&#34;0&#34; role=&#34;region&#34; aria-label=&#34;Scrollable table&#34;&gt;
&lt;table class=&#34;full-width&#34;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Option&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Short&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--stanza&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;-s&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;pgBackRest stanza name (auto-detected)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--config&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;-c&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Config file path&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--repo&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;-r&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Repository number (multi-repo scenario)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--dbsu&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;-U&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Database superuser (default: &lt;code&gt;$PIG_DBSU&lt;/code&gt; or &lt;code&gt;postgres&lt;/code&gt;)&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Stanza Auto-Detection:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;If &lt;code&gt;-s&lt;/code&gt; is not specified, pig auto-detects the stanza name from the config file:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Read the config file (default &lt;code&gt;/etc/pgbackrest/pgbackrest.conf&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Find sections that do not start with &lt;code&gt;[global*]&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Use the first stanza found&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If the config file contains multiple stanzas, pig emits a warning and uses the first one. In that case, specify &lt;code&gt;--stanza&lt;/code&gt; explicitly.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Multi-Repo Support:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;pgBackRest supports multiple repositories (repo1, repo2, etc.). Use &lt;code&gt;-r&lt;/code&gt; to choose the target repository:&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-71a5c4d9-fence-2&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;3&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-71a5c4d9-fence-2&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-71a5c4d9-fence-2-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pb backup -r &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;                   &lt;span class=&#34;c1&#34;&gt;# Backup to repo1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pb backup -r &lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;                   &lt;span class=&#34;c1&#34;&gt;# Backup to repo2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pb info -r &lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;                     &lt;span class=&#34;c1&#34;&gt;# View repo2 backup info&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;h2 id=&#34;information-commands&#34;&gt;Information Commands&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#information-commands&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;h3 id=&#34;pb-info&#34;&gt;pb info&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#pb-info&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;Show detailed backup repository information, including all backup sets and WAL archive status.&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-71a5c4d9-fence-3&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;3&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-71a5c4d9-fence-3&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-71a5c4d9-fence-3-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pb info                          &lt;span class=&#34;c1&#34;&gt;# Show all backup info&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pb info --raw --raw-output json  &lt;span class=&#34;c1&#34;&gt;# Raw JSON output&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pb info --set 20250101-120000F   &lt;span class=&#34;c1&#34;&gt;# Show details for a specific backup set&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Options:&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;td-table-scroll td-table-scroll--full&#34; tabindex=&#34;0&#34; role=&#34;region&#34; aria-label=&#34;Scrollable table&#34;&gt;
&lt;table class=&#34;full-width&#34;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Option&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Short&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--raw&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;-R&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Raw output mode (passes through pgBackRest output)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--raw-output&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Raw output format: text, json (only in &lt;code&gt;--raw&lt;/code&gt; mode)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--set&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Show details for a specific backup set&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;h3 id=&#34;pb-ls&#34;&gt;pb ls&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#pb-ls&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;List resources in the backup repository.&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-71a5c4d9-fence-4&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;4&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-71a5c4d9-fence-4&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-71a5c4d9-fence-4-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pb ls                            &lt;span class=&#34;c1&#34;&gt;# List all backups (default)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pb ls backup                     &lt;span class=&#34;c1&#34;&gt;# List all backups (explicit)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pb ls repo                       &lt;span class=&#34;c1&#34;&gt;# List configured repos&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pb ls stanza                     &lt;span class=&#34;c1&#34;&gt;# List all stanzas&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Types:&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;td-table-scroll td-table-scroll--full&#34; tabindex=&#34;0&#34; role=&#34;region&#34; aria-label=&#34;Scrollable table&#34;&gt;
&lt;table class=&#34;full-width&#34;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Type&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Data Source&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;backup&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;List all backup sets (default)&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;pgbackrest info&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;repo&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;List configured repos&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Parse pgbackrest.conf&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;stanza&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;List all stanzas&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Parse pgbackrest.conf&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;h2 id=&#34;backup-commands&#34;&gt;Backup Commands&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#backup-commands&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;h3 id=&#34;pb-backup&#34;&gt;pb backup&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#pb-backup&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;Create a physical backup. Backups can only run on the primary instance.&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-71a5c4d9-fence-5&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;5&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-71a5c4d9-fence-5&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-71a5c4d9-fence-5-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pb backup                        &lt;span class=&#34;c1&#34;&gt;# Auto mode&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pb backup full                   &lt;span class=&#34;c1&#34;&gt;# Full backup&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pb backup diff                   &lt;span class=&#34;c1&#34;&gt;# Differential backup&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pb backup incr                   &lt;span class=&#34;c1&#34;&gt;# Incremental backup&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pb backup --force                &lt;span class=&#34;c1&#34;&gt;# Skip primary role check&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Options:&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;td-table-scroll td-table-scroll--full&#34; tabindex=&#34;0&#34; role=&#34;region&#34; aria-label=&#34;Scrollable table&#34;&gt;
&lt;table class=&#34;full-width&#34;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Option&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Short&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--force&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;-f&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Skip primary role check&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Backup Types:&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;td-table-scroll td-table-scroll--full&#34; tabindex=&#34;0&#34; role=&#34;region&#34; aria-label=&#34;Scrollable table&#34;&gt;
&lt;table class=&#34;full-width&#34;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Type&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;(empty)&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Auto mode: full if no backup exists, otherwise incremental&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;full&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Full backup: backup all data&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;diff&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Differential backup: changes since the last full backup&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;incr&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Incremental backup: changes since the last backup of any type&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Primary Check:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Before running a backup, the command automatically checks whether the current instance is primary. If it is a replica, the command exits with an error. Use &lt;code&gt;--force&lt;/code&gt; to skip this check.&lt;/p&gt;
&lt;h3 id=&#34;pb-expire&#34;&gt;pb expire&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#pb-expire&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;Clean up expired backups and WAL archives according to the retention policy.&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-71a5c4d9-fence-6&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;4&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-71a5c4d9-fence-6&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-71a5c4d9-fence-6-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pb expire                        &lt;span class=&#34;c1&#34;&gt;# Clean up per policy&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pb expire --set 20250101-*       &lt;span class=&#34;c1&#34;&gt;# Delete a specific backup set&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pb expire --set 20250101-* -y    &lt;span class=&#34;c1&#34;&gt;# Skip confirmation when deleting backup set&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pb expire --plan                 &lt;span class=&#34;c1&#34;&gt;# Preview cleanup plan only, do not delete&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Options:&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;td-table-scroll td-table-scroll--full&#34; tabindex=&#34;0&#34; role=&#34;region&#34; aria-label=&#34;Scrollable table&#34;&gt;
&lt;table class=&#34;full-width&#34;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Option&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Short&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--set&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Delete a specific backup set&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--plan&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Preview cleanup plan only, do not delete backups&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--yes&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;-y&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Skip confirmation prompt when used with &lt;code&gt;--set&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Retention Policy:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Retention policy is configured in &lt;code&gt;pgbackrest.conf&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-71a5c4d9-fence-7&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;ini&#34; data-td-line-count=&#34;4&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-71a5c4d9-fence-7&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-71a5c4d9-fence-7-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-ini&#34; data-lang=&#34;ini&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;[global]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;repo1-retention-full&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;2               # Full backups to retain&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;repo1-retention-diff&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;4               # Differential backups to retain&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;repo1-retention-archive&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;2            # WAL archive retention policy&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;h2 id=&#34;restore-commands&#34;&gt;Restore Commands&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#restore-commands&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;h3 id=&#34;pb-restore&#34;&gt;pb restore&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#pb-restore&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;Restore from backup with recovery target support.
At least one recovery target (&lt;code&gt;-d/-I/-t/--name/--lsn/--xid&lt;/code&gt;) must be specified explicitly. Without parameters, help is shown.&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-71a5c4d9-fence-8&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;20&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-71a5c4d9-fence-8&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-71a5c4d9-fence-8-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Recovery target (mutually exclusive options)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pb restore -d                    &lt;span class=&#34;c1&#34;&gt;# Restore to latest (explicit)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pb restore -I                    &lt;span class=&#34;c1&#34;&gt;# Restore to backup consistency point&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pb restore -t &lt;span class=&#34;s2&#34;&gt;&amp;#34;2025-01-01 12:00:00+08&amp;#34;&lt;/span&gt;  &lt;span class=&#34;c1&#34;&gt;# Restore to specific time&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pb restore -t &lt;span class=&#34;s2&#34;&gt;&amp;#34;2025-01-01&amp;#34;&lt;/span&gt;       &lt;span class=&#34;c1&#34;&gt;# Restore to date (00:00:00 that day)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pb restore -t &lt;span class=&#34;s2&#34;&gt;&amp;#34;12:00:00&amp;#34;&lt;/span&gt;         &lt;span class=&#34;c1&#34;&gt;# Restore to time (today)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pb restore --name my-savepoint   &lt;span class=&#34;c1&#34;&gt;# Restore to named restore point&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pb restore --lsn &lt;span class=&#34;s2&#34;&gt;&amp;#34;0/7C82CB8&amp;#34;&lt;/span&gt;     &lt;span class=&#34;c1&#34;&gt;# Restore to LSN&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pb restore --xid &lt;span class=&#34;m&#34;&gt;12345&lt;/span&gt;           &lt;span class=&#34;c1&#34;&gt;# Restore to transaction ID&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Backup set selection (must combine with a recovery target)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pb restore -b 20251225-120000F -d  &lt;span class=&#34;c1&#34;&gt;# Restore from specific backup set to latest&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Other options&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pb restore -t &lt;span class=&#34;s2&#34;&gt;&amp;#34;...&amp;#34;&lt;/span&gt; -X           &lt;span class=&#34;c1&#34;&gt;# Exclusive mode (stop before target)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pb restore -t &lt;span class=&#34;s2&#34;&gt;&amp;#34;...&amp;#34;&lt;/span&gt; --target-action&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;promote  &lt;span class=&#34;c1&#34;&gt;# Promote after reaching target&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pb restore -t &lt;span class=&#34;s2&#34;&gt;&amp;#34;...&amp;#34;&lt;/span&gt; -T current   &lt;span class=&#34;c1&#34;&gt;# Recover along current timeline&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pb restore -d --plan             &lt;span class=&#34;c1&#34;&gt;# Preview restore plan only&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pb restore -d -y                 &lt;span class=&#34;c1&#34;&gt;# Skip interactive y/yes confirmation&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pb restore -d -- --delta         &lt;span class=&#34;c1&#34;&gt;# Pass native pgBackRest restore args after --&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Recovery Target Options:&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;td-table-scroll td-table-scroll--full&#34; tabindex=&#34;0&#34; role=&#34;region&#34; aria-label=&#34;Scrollable table&#34;&gt;
&lt;table class=&#34;full-width&#34;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Option&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Short&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--default&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;-d&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Restore to end of WAL stream (latest data)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--immediate&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;-I&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Restore to backup consistency point&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--time&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;-t&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Restore to specific timestamp&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--name&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Restore to named restore point&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--lsn&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Restore to specific LSN&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--xid&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Restore to specific transaction ID&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Backup Set and Other Options:&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;td-table-scroll td-table-scroll--full&#34; tabindex=&#34;0&#34; role=&#34;region&#34; aria-label=&#34;Scrollable table&#34;&gt;
&lt;table class=&#34;full-width&#34;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Option&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Short&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--set&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;-b&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Restore from a specific backup set (can combine with target)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--data&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;-D&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Target data directory&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--exclusive&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;-X&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Exclusive mode: stop before target&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--target-action&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Action after reaching recovery target: pause/promote/shutdown&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--target-timeline&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;-T&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Recovery timeline: latest/current/N/0xN&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--plan&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Preview restore plan only, do not execute&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--yes&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;-y&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Skip interactive y/yes confirmation&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Native args after &lt;code&gt;--&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Pass through pgBackRest restore args, for example &lt;code&gt;-- --delta&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Combination Rules:&lt;/strong&gt; &lt;code&gt;--target-action&lt;/code&gt; cannot be used with &lt;code&gt;--default&lt;/code&gt;, because &lt;code&gt;--default&lt;/code&gt; already means recovery to the end of the WAL stream. &lt;code&gt;--exclusive/-X&lt;/code&gt; must be used with an explicit stop target: &lt;code&gt;--time&lt;/code&gt;, &lt;code&gt;--lsn&lt;/code&gt;, or &lt;code&gt;--xid&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Native pgBackRest restore args after &lt;code&gt;--&lt;/code&gt; cannot override recovery targets, lifecycle, data directory, repository, config, or selection semantics already managed by Pig. Use Pig&amp;rsquo;s first-class options for those semantics. Tablespace/link migration options such as &lt;code&gt;--tablespace-map&lt;/code&gt;, &lt;code&gt;--link-map&lt;/code&gt;, and &lt;code&gt;--link-all&lt;/code&gt; can still be passed through.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Time Formats:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Supports multiple time formats and auto-completes timezones (including non-integer-hour zones such as +05:30):&lt;/p&gt;
&lt;div class=&#34;td-table-scroll td-table-scroll--full&#34; tabindex=&#34;0&#34; role=&#34;region&#34; aria-label=&#34;Scrollable table&#34;&gt;
&lt;table class=&#34;full-width&#34;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Format&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Example&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Full format&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;2025-01-01 12:00:00+08&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Complete timestamp with timezone&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Date only&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;2025-01-01&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Auto-completes to 00:00:00 that day (current timezone)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Time only&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;12:00:00&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Auto-completes to today (current timezone)&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Restore Flow:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Validate parameters and environment&lt;/li&gt;
&lt;li&gt;Check that PostgreSQL is stopped&lt;/li&gt;
&lt;li&gt;Show restore plan and wait for interactive &lt;code&gt;y&lt;/code&gt;/&lt;code&gt;yes&lt;/code&gt; confirmation&lt;/li&gt;
&lt;li&gt;Execute pgbackrest restore&lt;/li&gt;
&lt;li&gt;Provide post-restore guidance&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Important:&lt;/strong&gt; Stop PostgreSQL before restore. If the PGDATA is managed by Patroni, use &lt;a href=&#34;https://pig.pgsty.com/pitr/&#34;&gt;&lt;code&gt;pig pitr&lt;/code&gt;&lt;/a&gt; to orchestrate Patroni, PostgreSQL, and pgBackRest:&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-71a5c4d9-fence-9&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;3&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-71a5c4d9-fence-9&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-71a5c4d9-fence-9-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg stop                          &lt;span class=&#34;c1&#34;&gt;# Stop PostgreSQL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pb restore -t &lt;span class=&#34;s2&#34;&gt;&amp;#34;...&amp;#34;&lt;/span&gt;              &lt;span class=&#34;c1&#34;&gt;# Execute restore&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg start                         &lt;span class=&#34;c1&#34;&gt;# Start PostgreSQL&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;h2 id=&#34;stanza-management-commands&#34;&gt;Stanza Management Commands&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#stanza-management-commands&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;h3 id=&#34;pb-create&#34;&gt;pb create&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#pb-create&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;Initialize a new stanza. Must run before the first backup.&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-71a5c4d9-fence-10&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;3&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-71a5c4d9-fence-10&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-71a5c4d9-fence-10-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pb create                        &lt;span class=&#34;c1&#34;&gt;# Create stanza&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pb create --no-online            &lt;span class=&#34;c1&#34;&gt;# Create when PostgreSQL is not running&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pb create --force                &lt;span class=&#34;c1&#34;&gt;# Force create&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Options:&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;td-table-scroll td-table-scroll--full&#34; tabindex=&#34;0&#34; role=&#34;region&#34; aria-label=&#34;Scrollable table&#34;&gt;
&lt;table class=&#34;full-width&#34;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Option&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Short&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--no-online&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Create when PostgreSQL is not running&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--force&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;-f&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Force create&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;h3 id=&#34;pb-upgrade&#34;&gt;pb upgrade&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#pb-upgrade&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;Update stanza after a PostgreSQL major version upgrade.&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-71a5c4d9-fence-11&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;2&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-71a5c4d9-fence-11&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-71a5c4d9-fence-11-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pb upgrade                       &lt;span class=&#34;c1&#34;&gt;# Upgrade stanza&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pb upgrade --no-online           &lt;span class=&#34;c1&#34;&gt;# Upgrade when PostgreSQL is not running&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Options:&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;td-table-scroll td-table-scroll--full&#34; tabindex=&#34;0&#34; role=&#34;region&#34; aria-label=&#34;Scrollable table&#34;&gt;
&lt;table class=&#34;full-width&#34;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Option&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--no-online&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Upgrade when PostgreSQL is not running&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Use Case:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;After a PostgreSQL major version upgrade (for example, 16 -&amp;gt; 17), run this command to update stanza metadata.&lt;/p&gt;
&lt;h3 id=&#34;pb-delete&#34;&gt;pb delete&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#pb-delete&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;Delete a stanza and all its backups.&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-71a5c4d9-fence-12&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;3&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-71a5c4d9-fence-12&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-71a5c4d9-fence-12-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pb delete                        &lt;span class=&#34;c1&#34;&gt;# Delete stanza (interactive y/N confirmation)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pb delete --yes                  &lt;span class=&#34;c1&#34;&gt;# Skip interactive y/yes confirmation&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pb delete --plan                 &lt;span class=&#34;c1&#34;&gt;# Preview delete plan&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Options:&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;td-table-scroll td-table-scroll--full&#34; tabindex=&#34;0&#34; role=&#34;region&#34; aria-label=&#34;Scrollable table&#34;&gt;
&lt;table class=&#34;full-width&#34;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Option&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Short&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--plan&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Preview delete plan only, do not execute&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--yes&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;-y&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Skip interactive y/yes confirmation&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Warning:&lt;/strong&gt; This is a &lt;strong&gt;destructive and irreversible&lt;/strong&gt; operation. All backups will be permanently deleted.&lt;/p&gt;
&lt;p&gt;The command includes multiple safety mechanisms:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;In text mode, it requires interactive &lt;code&gt;y&lt;/code&gt;/&lt;code&gt;yes&lt;/code&gt; confirmation unless &lt;code&gt;--yes&lt;/code&gt; is specified&lt;/li&gt;
&lt;li&gt;Structured output mode requires explicit &lt;code&gt;--yes&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;If the config file contains multiple stanzas and &lt;code&gt;--stanza&lt;/code&gt; is not specified, pig refuses to auto-select a deletion target&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;control-commands&#34;&gt;Control Commands&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#control-commands&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;h3 id=&#34;pb-check&#34;&gt;pb check&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#pb-check&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;Verify backup repository integrity and configuration.&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-71a5c4d9-fence-13&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;1&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-71a5c4d9-fence-13&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-71a5c4d9-fence-13-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pb check                         &lt;span class=&#34;c1&#34;&gt;# Verify repository&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;This command checks:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;WAL archive configuration correctness&lt;/li&gt;
&lt;li&gt;Repository accessibility&lt;/li&gt;
&lt;li&gt;Stanza configuration validity&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;pb-start&#34;&gt;pb start&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#pb-start&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;Enable pgBackRest operations.&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-71a5c4d9-fence-14&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;1&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-71a5c4d9-fence-14&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-71a5c4d9-fence-14-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pb start                         &lt;span class=&#34;c1&#34;&gt;# Enable operations&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;Use this command after &lt;code&gt;pb stop&lt;/code&gt; to resume normal operations.&lt;/p&gt;
&lt;h3 id=&#34;pb-stop&#34;&gt;pb stop&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#pb-stop&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;Disable pgBackRest operations for maintenance.&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-71a5c4d9-fence-15&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;2&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-71a5c4d9-fence-15&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-71a5c4d9-fence-15-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pb stop                          &lt;span class=&#34;c1&#34;&gt;# Disable operations&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pb stop --force                  &lt;span class=&#34;c1&#34;&gt;# Terminate running operations&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Options:&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;td-table-scroll td-table-scroll--full&#34; tabindex=&#34;0&#34; role=&#34;region&#34; aria-label=&#34;Scrollable table&#34;&gt;
&lt;table class=&#34;full-width&#34;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Option&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Short&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--force&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;-f&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Terminate running operations&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Use Case:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Use this command during system maintenance to prevent new backup operations from starting.&lt;/p&gt;
&lt;h2 id=&#34;log-commands&#34;&gt;Log Commands&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#log-commands&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;h3 id=&#34;pb-log&#34;&gt;pb log&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#pb-log&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;View pgBackRest log files. The log directory is read from pgBackRest config &lt;code&gt;log-path&lt;/code&gt; first, and falls back to &lt;code&gt;/pg/log/pgbackrest/&lt;/code&gt; when not configured. The parent command shows the latest log snapshot by default; use &lt;code&gt;tail&lt;/code&gt; or &lt;code&gt;-f&lt;/code&gt; for live follow. Only &lt;code&gt;pb log&lt;/code&gt; and &lt;code&gt;pb log show&lt;/code&gt; support &lt;code&gt;-o json&lt;/code&gt; JSONL output; log snapshots do not support &lt;code&gt;yaml&lt;/code&gt; or &lt;code&gt;json-pretty&lt;/code&gt;, and follow/tail does not support structured output.&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-71a5c4d9-fence-16&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;7&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-71a5c4d9-fence-16&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-71a5c4d9-fence-16-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pb log                           &lt;span class=&#34;c1&#34;&gt;# Show latest log lines&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pb log list                      &lt;span class=&#34;c1&#34;&gt;# List log files&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pb log tail                      &lt;span class=&#34;c1&#34;&gt;# Real-time view latest log&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pb log tail -n &lt;span class=&#34;m&#34;&gt;100&lt;/span&gt;               &lt;span class=&#34;c1&#34;&gt;# Show last 100 lines and follow&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pb log show                      &lt;span class=&#34;c1&#34;&gt;# Show latest log content&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pb log show -n &lt;span class=&#34;m&#34;&gt;50&lt;/span&gt;                &lt;span class=&#34;c1&#34;&gt;# Show last 50 lines&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pb log cat                       &lt;span class=&#34;c1&#34;&gt;# Alias for show&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Subcommands:&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;td-table-scroll td-table-scroll--full&#34; tabindex=&#34;0&#34; role=&#34;region&#34; aria-label=&#34;Scrollable table&#34;&gt;
&lt;table class=&#34;full-width&#34;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Subcommand&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Aliases&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;list&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;ls&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;List log files&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;show&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;cat, c&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Show latest log content&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;tail&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;t, f, follow&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Real-time follow latest log&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Options:&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;td-table-scroll td-table-scroll--full&#34; tabindex=&#34;0&#34; role=&#34;region&#34; aria-label=&#34;Scrollable table&#34;&gt;
&lt;table class=&#34;full-width&#34;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Option&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Short&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Default&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--lines&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;-n&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;50&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Number of lines to show&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--follow&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;-f&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;false&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Makes parent command &lt;code&gt;pb log&lt;/code&gt; follow; no-op in &lt;code&gt;pb log tail&lt;/code&gt; because tail always follows&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Permission Handling:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;If the current user does not have permission to read the log directory, the command automatically retries with &lt;code&gt;sudo&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&#34;design-notes&#34;&gt;Design Notes&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#design-notes&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Command Execution:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;All &lt;code&gt;pig pb&lt;/code&gt; commands run as the database superuser (DBSU), because pgBackRest needs access to PostgreSQL data files and WAL archives.&lt;/p&gt;
&lt;p&gt;Execution logic:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;If the current user is DBSU: execute directly&lt;/li&gt;
&lt;li&gt;If the current user is root: use &lt;code&gt;su - postgres -c &amp;quot;...&amp;quot;&lt;/code&gt; to execute&lt;/li&gt;
&lt;li&gt;Other users: use &lt;code&gt;sudo -inu postgres -- ...&lt;/code&gt; to execute&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Relationship with pgbackrest:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;pig pb&lt;/code&gt; is not a complete wrapper for &lt;code&gt;pgbackrest&lt;/code&gt;; it is a higher-level abstraction for common operations:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Auto-detect stanza name without specifying it every time&lt;/li&gt;
&lt;li&gt;Auto-check primary role before backup&lt;/li&gt;
&lt;li&gt;Show restore plan and require interactive &lt;code&gt;y&lt;/code&gt;/&lt;code&gt;yes&lt;/code&gt; confirmation before restore&lt;/li&gt;
&lt;li&gt;Provide user-friendly time format input&lt;/li&gt;
&lt;li&gt;Provide post-restore guidance&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For full &lt;code&gt;pgbackrest&lt;/code&gt; functionality, use the &lt;code&gt;pgbackrest&lt;/code&gt; command directly.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Default Configuration Paths:&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;td-table-scroll td-table-scroll--full&#34; tabindex=&#34;0&#34; role=&#34;region&#34; aria-label=&#34;Scrollable table&#34;&gt;
&lt;table class=&#34;full-width&#34;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Config&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Default&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Config file&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;/etc/pgbackrest/pgbackrest.conf&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Log directory&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;/pg/log/pgbackrest&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Data directory&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;pg1-path&lt;/code&gt; from config, or &lt;code&gt;$PGDATA&lt;/code&gt;, or &lt;code&gt;/pg/data&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Security Considerations:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;pb delete&lt;/code&gt; requires interactive &lt;code&gt;y&lt;/code&gt;/&lt;code&gt;yes&lt;/code&gt; confirmation when &lt;code&gt;--yes&lt;/code&gt; is not specified, and &lt;code&gt;--stanza&lt;/code&gt; must be explicit under multi-stanza configs&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pb restore&lt;/code&gt; requires an explicit recovery target, validates &lt;code&gt;--time&lt;/code&gt;, and requires interactive &lt;code&gt;y&lt;/code&gt;/&lt;code&gt;yes&lt;/code&gt; confirmation when &lt;code&gt;--yes&lt;/code&gt; is not specified&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pb backup&lt;/code&gt; checks primary role by default to prevent running on a replica&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pb log tail&lt;/code&gt; does not support structured output; use &lt;code&gt;pb log show -n N -o json&lt;/code&gt; when a JSONL snapshot is required&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Platform Support:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This command is designed for Linux systems and depends on Pigsty&amp;rsquo;s default directory layout.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>CMD: pitr</title>
      <link>https://ext.pgsty.com/pig/cmd/pitr/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://ext.pgsty.com/pig/cmd/pitr/</guid>
      <description>
        
        
        &lt;p&gt;The &lt;code&gt;pig pitr&lt;/code&gt; command performs point-in-time recovery through pgBackRest and conservatively handles the local PostgreSQL and Patroni lifecycle. Unlike the lower-level &lt;code&gt;pig pb restore&lt;/code&gt;, &lt;code&gt;pig pitr&lt;/code&gt; runs pre-restore checks, stops Patroni and PostgreSQL when needed, executes restore, then decides whether to start PostgreSQL based on the selected options.&lt;/p&gt;
&lt;p&gt;Note: for a managed default data directory, &lt;code&gt;pig pitr&lt;/code&gt; leaves Patroni stopped after recovery. Validate the restored result first, then manually restore Patroni management. This command does not automatically rejoin a Patroni cluster, perform failover, or validate cluster member state.&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-ce209af3-fence-0&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;45&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-ce209af3-fence-0&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-ce209af3-fence-0-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pitr - Perform PITR with pgBackRest restore and conservative PostgreSQL stop/start handling.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;For the managed default data directory, this &lt;span class=&#34;nb&#34;&gt;command&lt;/span&gt; may:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  1. Stop Patroni only to keep the target PGDATA offline during restore
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  2. Ensure PostgreSQL is stopped &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;fast stop with retry&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; destructive fallback only with --force-stop&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  3. Execute pgbackrest restore
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  4. Start PostgreSQL unless --no-restart is used
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  5. Leave Patroni stopped&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; provide post-restore guidance
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Recovery Targets &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;at least one required&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --default, -d      Recover to end of WAL stream &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;latest&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --immediate, -I    Recover to backup consistency point
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --time, -t         Recover to specific timestamp
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --name             Recover to named restore point
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --lsn              Recover to specific LSN
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --xid              Recover to specific transaction ID
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Backup and Target Options:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --set, -b          Select backup &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; to start recovery from
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --target-action    Action when target is reached: pause, promote, shutdown
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --target-timeline  Recover along timeline: latest, current, N, or 0xN
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Use --no-restart with --target-action&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;shutdown because PostgreSQL exits
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;after reaching the recovery target.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Custom -D side restores require --no-restart. The custom directory must
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;already exist, be owned by the configured DBSU &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;postgres by default&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;, and
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;be writable by that user. Pig does not create this directory automatically.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Additional pgBackRest arguments:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  Put raw pgBackRest restore arguments after -- so Cobra stops parsing them.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  Example: pig pitr -d -- --delta
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Time Format:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  - Full: &lt;span class=&#34;s2&#34;&gt;&amp;#34;2025-01-01 12:00:00+08&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  - Date only: &lt;span class=&#34;s2&#34;&gt;&amp;#34;2025-01-01&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;defaults to 00:00:00&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  - Time only: &lt;span class=&#34;s2&#34;&gt;&amp;#34;12:00:00&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;defaults to today&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Examples:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig pitr -d                                      &lt;span class=&#34;c1&#34;&gt;# Recover to latest&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig pitr -t &lt;span class=&#34;s2&#34;&gt;&amp;#34;2025-01-01 12:00:00+08&amp;#34;&lt;/span&gt;            &lt;span class=&#34;c1&#34;&gt;# Recover to time&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig pitr -d --plan                               &lt;span class=&#34;c1&#34;&gt;# Preview plan&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig pitr -d -y                                   &lt;span class=&#34;c1&#34;&gt;# Skip y/yes confirmation&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig pitr -d --no-restart                         &lt;span class=&#34;c1&#34;&gt;# Leave PostgreSQL stopped&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pig pitr -d -D /tmp/pg-restore --no-restart      &lt;span class=&#34;c1&#34;&gt;# Side restore&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#overview&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;The default target of &lt;code&gt;pig pitr&lt;/code&gt; is the Pigsty-managed primary data directory. A typical workflow:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Validate recovery target parameters. One of &lt;code&gt;-d/-I/-t/--name/--lsn/--xid&lt;/code&gt; is required.&lt;/li&gt;
&lt;li&gt;Resolve pgBackRest configuration and target data directory.&lt;/li&gt;
&lt;li&gt;For default data-directory recovery, stop Patroni if it is running.&lt;/li&gt;
&lt;li&gt;Ensure PostgreSQL is stopped.&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;pgbackrest restore&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Start PostgreSQL unless &lt;code&gt;--no-restart&lt;/code&gt; is specified.&lt;/li&gt;
&lt;li&gt;Print post-recovery validation and Patroni recovery guidance.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Comparison with &lt;code&gt;pig pb restore&lt;/code&gt;:&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;td-table-scroll td-table-scroll--full&#34; tabindex=&#34;0&#34; role=&#34;region&#34; aria-label=&#34;Scrollable table&#34;&gt;
&lt;table class=&#34;full-width&#34;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Feature&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;&lt;code&gt;pig pitr&lt;/code&gt;&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;&lt;code&gt;pig pb restore&lt;/code&gt;&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Stop Patroni&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Automatic for default data-directory recovery&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Manual&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Stop PostgreSQL&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Checks and stops automatically&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Must be pre-stopped&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Start PostgreSQL&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Automatic by default, can be disabled with &lt;code&gt;--no-restart&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Manual&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Patroni recovery&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Not automatic; restore manually after verification&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Not handled&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Use case&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Production recovery orchestration&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Low-level restore or scripting&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;h2 id=&#34;quick-start&#34;&gt;Quick Start&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#quick-start&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-ce209af3-fence-1&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;27&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-ce209af3-fence-1&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-ce209af3-fence-1-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Most common: recover to the end of the WAL stream&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pitr -d
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Recover to a specific point in time&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pitr -t &lt;span class=&#34;s2&#34;&gt;&amp;#34;2025-01-01 12:00:00+08&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Recover to the backup consistency point&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pitr -I
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Preview the execution plan without running&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pitr -d --plan
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Skip confirmation, suitable for automation&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pitr -d -y
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Recover from a specific backup set&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pitr -d -b 20251225-120000F
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Restore the default data directory but do not start PostgreSQL afterward&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pitr -d --no-restart
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Side restore: restore to a custom directory without touching Patroni or /pg/data&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;install -d -m &lt;span class=&#34;m&#34;&gt;700&lt;/span&gt; -o postgres -g postgres /tmp/pg-restore
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pitr -d -D /tmp/pg-restore --no-restart
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Extra native pgBackRest restore arguments go after --&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pitr -d -- --delta&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;h2 id=&#34;parameters&#34;&gt;Parameters&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#parameters&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;h3 id=&#34;recovery-target&#34;&gt;Recovery Target&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#recovery-target&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;At least one recovery target is required.&lt;/p&gt;
&lt;div class=&#34;td-table-scroll td-table-scroll--full&#34; tabindex=&#34;0&#34; role=&#34;region&#34; aria-label=&#34;Scrollable table&#34;&gt;
&lt;table class=&#34;full-width&#34;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Parameter&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Short&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--default&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;-d&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Recover to the end of the WAL stream, the latest data&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--immediate&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;-I&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Recover to the backup consistency point&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--time&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;-t&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Recover to a specific timestamp&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--name&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Recover to a named restore point&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--lsn&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Recover to a specific LSN&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--xid&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Recover to a specific transaction ID&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;h3 id=&#34;backup-and-target-options&#34;&gt;Backup And Target Options&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#backup-and-target-options&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h3&gt;
&lt;div class=&#34;td-table-scroll td-table-scroll--full&#34; tabindex=&#34;0&#34; role=&#34;region&#34; aria-label=&#34;Scrollable table&#34;&gt;
&lt;table class=&#34;full-width&#34;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Parameter&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Short&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--set&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;-b&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Start recovery from a specific backup set&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--target-action&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Action when the recovery target is reached: pause/promote/shutdown&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--target-timeline&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;-T&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Recovery timeline: latest/current/N/0xN&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--exclusive&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;-X&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Exclusive mode: stop before target&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;p&gt;Use &lt;code&gt;--target-action=shutdown&lt;/code&gt; with &lt;code&gt;--no-restart&lt;/code&gt;, because PostgreSQL exits after reaching that recovery target. &lt;code&gt;--target-action&lt;/code&gt; cannot be used with &lt;code&gt;--default&lt;/code&gt;, because &lt;code&gt;--default&lt;/code&gt; already means recovery to the end of WAL. &lt;code&gt;--exclusive/-X&lt;/code&gt; requires a precise stop-before target: &lt;code&gt;--time&lt;/code&gt;, &lt;code&gt;--lsn&lt;/code&gt;, or &lt;code&gt;--xid&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Native pgBackRest restore arguments after &lt;code&gt;--&lt;/code&gt; cannot override recovery target, lifecycle, data directory, repository, config, or selection parameters managed by Pig. Use Pig&amp;rsquo;s first-class parameters for these semantics. This restriction is consistent with the &lt;code&gt;pig pb restore&lt;/code&gt; passthrough blocklist.&lt;/p&gt;
&lt;h3 id=&#34;flow-control&#34;&gt;Flow Control&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#flow-control&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h3&gt;
&lt;div class=&#34;td-table-scroll td-table-scroll--full&#34; tabindex=&#34;0&#34; role=&#34;region&#34; aria-label=&#34;Scrollable table&#34;&gt;
&lt;table class=&#34;full-width&#34;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Parameter&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Short&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--no-restart&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Do not start PostgreSQL after restore&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--plan&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Show execution plan only, do not execute&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--yes&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;-y&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Skip interactive y/yes confirmation&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--timeout&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;PostgreSQL startup/recovery wait timeout, default 120 seconds&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--force-stop&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Allow immediate shutdown and kill fallback if fast stop fails&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;h3 id=&#34;configuration&#34;&gt;Configuration&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#configuration&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h3&gt;
&lt;div class=&#34;td-table-scroll td-table-scroll--full&#34; tabindex=&#34;0&#34; role=&#34;region&#34; aria-label=&#34;Scrollable table&#34;&gt;
&lt;table class=&#34;full-width&#34;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Parameter&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Short&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--stanza&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;-s&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;pgBackRest stanza name&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--config&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;-c&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;pgBackRest config file path&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--repo&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;-r&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Repository number&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--dbsu&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;-U&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Database superuser, default &lt;code&gt;postgres&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;--data&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;-D&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Target data directory&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;h2 id=&#34;time-format&#34;&gt;Time Format&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#time-format&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;The &lt;code&gt;--time&lt;/code&gt; parameter supports multiple formats and completes missing parts using the current timezone:&lt;/p&gt;
&lt;div class=&#34;td-table-scroll td-table-scroll--full&#34; tabindex=&#34;0&#34; role=&#34;region&#34; aria-label=&#34;Scrollable table&#34;&gt;
&lt;table class=&#34;full-width&#34;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Format&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Example&lt;/th&gt;
      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Full&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;2025-01-01 12:00:00+08&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Complete timestamp with timezone&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Date time without timezone&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;2025-01-01 12:00:00&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Adds the current local timezone automatically; &lt;code&gt;T&lt;/code&gt; separator is also accepted&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Date only&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;2025-01-01&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Completes to 00:00:00 on that date&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Time only&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;12:00:00&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&#34;text-align: left&#34;&gt;Completes to that time today&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;p&gt;Plan output and replayable next-action commands normalize date-only and time-only targets into deterministic timestamps with timezone. This rule is consistent with &lt;code&gt;pig pb restore --plan&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&#34;managed-directory-and-side-restore&#34;&gt;Managed Directory And Side Restore&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#managed-directory-and-side-restore&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;The managed PostgreSQL data directory comes from the effective pgBackRest &lt;code&gt;pg1-path&lt;/code&gt; and command parameters. It is not hardcoded to &lt;code&gt;/pg/data&lt;/code&gt;. For example, if managed PGDATA is &lt;code&gt;/var/lib/pgsql/18/data&lt;/code&gt;, the command still treats it as a managed restore. Path comparison resolves symlinks as the database superuser when needed, so a symlink to managed PGDATA is not mistaken for a side restore.&lt;/p&gt;
&lt;p&gt;An explicit &lt;code&gt;-D/--data&lt;/code&gt; that resolves to a path different from the managed directory is a side restore. Side restores must use &lt;code&gt;--no-restart&lt;/code&gt;; they do not stop Patroni and do not manage the default PostgreSQL service. After restore, handle the side instance manually with commands such as &lt;code&gt;pg_ctl -D &amp;lt;dir&amp;gt; -o &amp;quot;-p 5433&amp;quot; start&lt;/code&gt;, &lt;code&gt;pg_ctl -D &amp;lt;dir&amp;gt; status&lt;/code&gt;, and &lt;code&gt;pgbackrest --pg1-path=&amp;lt;dir&amp;gt; stanza-create&lt;/code&gt;. The side-restore directory must already exist and be owned by the DBSU. Unlike managed PGDATA, it does not need a pre-existing &lt;code&gt;PG_VERSION&lt;/code&gt; marker. Pig does not create this directory automatically because it needs a concrete path for destructive-restore classification, owner checks, and safe guidance before restore.&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-ce209af3-fence-2&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;2&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-ce209af3-fence-2&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-ce209af3-fence-2-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;install -d -m &lt;span class=&#34;m&#34;&gt;700&lt;/span&gt; -o postgres -g postgres /tmp/pg-restore
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pitr -d -D /tmp/pg-restore --no-restart&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;For managed PGDATA outside &lt;code&gt;/pg/data&lt;/code&gt;, post-restore runbook commands explicitly include the effective data directory:&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-ce209af3-fence-3&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;3&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-ce209af3-fence-3&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-ce209af3-fence-3-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg start -D /var/lib/pgsql/18/data
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg psql -D /var/lib/pgsql/18/data
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg promote -D /var/lib/pgsql/18/data&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;&lt;code&gt;pig pg psql -D &amp;lt;dir&amp;gt;&lt;/code&gt; reads &lt;code&gt;postmaster.pid&lt;/code&gt; under that directory and uses the recorded port and socket directory to connect to the restored instance. If postmaster information cannot be resolved, it does not silently fall back to the default connection target.&lt;/p&gt;
&lt;h2 id=&#34;execution-flow&#34;&gt;Execution Flow&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#execution-flow&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;h3 id=&#34;phase-1-pre-checks&#34;&gt;Phase 1: Pre-Checks&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#phase-1-pre-checks&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Validate recovery target parameters; missing targets only print help and return an error.&lt;/li&gt;
&lt;li&gt;Resolve effective pgBackRest config, stanza, repository, and managed &lt;code&gt;pg1-path&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Check that the managed data directory exists and is initialized.&lt;/li&gt;
&lt;li&gt;For side restore, check that the custom data directory exists and is owned by the DBSU.&lt;/li&gt;
&lt;li&gt;Verify the selected stanza is healthy and has backups; if &lt;code&gt;--set&lt;/code&gt; is specified, verify that backup set exists.&lt;/li&gt;
&lt;li&gt;Detect Patroni service state and PostgreSQL runtime state.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;phase-2-patroni-handling&#34;&gt;Phase 2: Patroni Handling&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#phase-2-patroni-handling&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;For managed data-directory recovery, if Patroni is running, the command stops Patroni so the target PGDATA stays offline during restore. Patroni remains stopped after recovery. A custom &lt;code&gt;-D&lt;/code&gt; side restore does not touch the managed data directory and therefore does not stop Patroni.&lt;/p&gt;
&lt;h3 id=&#34;phase-3-ensure-postgresql-is-stopped&#34;&gt;Phase 3: Ensure PostgreSQL Is Stopped&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#phase-3-ensure-postgresql-is-stopped&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;The command first waits for PostgreSQL to exit after Patroni stops, then retries &lt;code&gt;pg_ctl stop -m fast&lt;/code&gt;. If PostgreSQL still cannot stop, it does not use more aggressive methods by default. Only explicit &lt;code&gt;--force-stop&lt;/code&gt; allows immediate shutdown and final kill fallback.&lt;/p&gt;
&lt;h3 id=&#34;phase-4-restore&#34;&gt;Phase 4: Restore&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#phase-4-restore&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;The command runs pgBackRest restore and maps recovery target, backup set, timeline, target action, and related options into &lt;code&gt;pgbackrest restore&lt;/code&gt;. Native pgBackRest arguments can be placed after &lt;code&gt;--&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-ce209af3-fence-4&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;1&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-ce209af3-fence-4&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-ce209af3-fence-4-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pitr -d -- --delta&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;h3 id=&#34;phase-5-start-or-stay-stopped&#34;&gt;Phase 5: Start Or Stay Stopped&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#phase-5-start-or-stay-stopped&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;Unless &lt;code&gt;--no-restart&lt;/code&gt; is specified, the command starts PostgreSQL after restore and waits for recovery completion. For &lt;code&gt;--default&lt;/code&gt; and &lt;code&gt;--target-action=promote&lt;/code&gt;, it waits until &lt;code&gt;pg_is_in_recovery()&lt;/code&gt; becomes false on the recovered instance. Recovery and subsequent SQL probes bind to the port recorded in &lt;code&gt;postmaster.pid&lt;/code&gt; for the restored data directory and use the socket directory there when present. Use &lt;code&gt;--no-restart&lt;/code&gt; when:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Running a custom &lt;code&gt;-D&lt;/code&gt; side restore, because the restored config still keeps the original port and must be started manually on a free port.&lt;/li&gt;
&lt;li&gt;Using &lt;code&gt;--target-action=shutdown&lt;/code&gt;, because PostgreSQL exits after reaching the recovery target.&lt;/li&gt;
&lt;li&gt;You need to inspect the restored directory before deciding whether to start.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;examples&#34;&gt;Examples&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#examples&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;h3 id=&#34;scenario-1-recover-dropped-data&#34;&gt;Scenario 1: Recover Dropped Data&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#scenario-1-recover-dropped-data&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h3&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-ce209af3-fence-5&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;12&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-ce209af3-fence-5&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-ce209af3-fence-5-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 1. View available backups&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pb info
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 2. Preview recovery plan&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pitr -t &lt;span class=&#34;s2&#34;&gt;&amp;#34;2025-01-15 09:30:00+08&amp;#34;&lt;/span&gt; --plan
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 3. Execute recovery&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pitr -t &lt;span class=&#34;s2&#34;&gt;&amp;#34;2025-01-15 09:30:00+08&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 4. Verify data&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg psql
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;SELECT * FROM important_table&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;h3 id=&#34;scenario-2-recover-to-latest&#34;&gt;Scenario 2: Recover To Latest&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#scenario-2-recover-to-latest&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h3&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-ce209af3-fence-6&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;1&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-ce209af3-fence-6&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-ce209af3-fence-6-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pitr -d&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;h3 id=&#34;scenario-3-recover-to-backup-consistency-point&#34;&gt;Scenario 3: Recover To Backup Consistency Point&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#scenario-3-recover-to-backup-consistency-point&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h3&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-ce209af3-fence-7&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;1&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-ce209af3-fence-7&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-ce209af3-fence-7-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pitr -I&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;h3 id=&#34;scenario-4-keep-stopped-after-restore&#34;&gt;Scenario 4: Keep Stopped After Restore&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#scenario-4-keep-stopped-after-restore&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h3&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-ce209af3-fence-8&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;4&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-ce209af3-fence-8&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-ce209af3-fence-8-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pitr -d --no-restart
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# PostgreSQL and Patroni both remain stopped; inspect directory or logs before starting&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg start&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;h3 id=&#34;scenario-5-custom-directory-side-restore&#34;&gt;Scenario 5: Custom Directory Side Restore&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#scenario-5-custom-directory-side-restore&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h3&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-ce209af3-fence-9&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;5&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-ce209af3-fence-9&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-ce209af3-fence-9-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;install -d -m &lt;span class=&#34;m&#34;&gt;700&lt;/span&gt; -o postgres -g postgres /tmp/pg-restore
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pitr -d -D /tmp/pg-restore --no-restart
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Start the side restore manually on a free port&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pg_ctl -D /tmp/pg-restore -o &lt;span class=&#34;s2&#34;&gt;&amp;#34;-p 5433&amp;#34;&lt;/span&gt; start&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;h2 id=&#34;execution-plan-example&#34;&gt;Execution Plan Example&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#execution-plan-example&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Running &lt;code&gt;pig pitr -d --plan&lt;/code&gt; shows a plan like:&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-ce209af3-fence-10&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;text&#34; data-td-line-count=&#34;21&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-ce209af3-fence-10&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-ce209af3-fence-10-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;══════════════════════════════════════════════════════════════════
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; PITR Execution Plan
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;══════════════════════════════════════════════════════════════════
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Current State:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  Data Directory:  /pg/data
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  Database User:   postgres
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  Patroni Service: active
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  PostgreSQL:      running (PID: 12345)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Recovery Target:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  Latest (end of WAL stream)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Execution Steps:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  [1] Stop Patroni service
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  [2] Ensure PostgreSQL is stopped
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  [3] Execute pgBackRest restore
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  [4] Start PostgreSQL
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  [5] Print post-restore guidance
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;══════════════════════════════════════════════════════════════════&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;h2 id=&#34;post-recovery-actions&#34;&gt;Post-Recovery Actions&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#post-recovery-actions&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;After successful recovery, verify data before restoring orchestration:&lt;/p&gt;
&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-ce209af3-fence-11&#34; data-td-code data-td-code-auto-id
     data-td-language=&#34;bash&#34; data-td-line-count=&#34;11&#34;&gt;&lt;div class=&#34;td-code__utilities td-code__utilities--compact&#34;&gt;
  &lt;button class=&#34;td-code__copy&#34; type=&#34;button&#34; hidden data-td-code-copy
          data-td-code-target=&#34;td-code-ce209af3-fence-11&#34; data-td-copy-mode=&#34;all&#34;
          data-td-label-copy=&#34;Copy code&#34;
          data-td-label-copied=&#34;Copied&#34;
          data-td-label-error=&#34;Copy failed&#34;
          aria-label=&#34;Copy code&#34; title=&#34;Copy code&#34;&gt;
    &lt;i class=&#34;fa-regular fa-copy&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;
  &lt;/button&gt;
&lt;/div&gt;
  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-ce209af3-fence-11-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Verify data&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg psql
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# If recovered to a manual target and promotion is needed&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pg promote
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Restore Patroni management only after validation&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;systemctl start patroni
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Re-create pgBackRest stanza if needed&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pig pb create&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;span class=&#34;visually-hidden&#34; role=&#34;status&#34; aria-live=&#34;polite&#34; data-td-code-status&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;Leaving Patroni stopped after managed data-directory recovery is intentional. It prevents restored old state from re-entering HA orchestration before validation.&lt;/p&gt;
&lt;h2 id=&#34;safety-mechanisms&#34;&gt;Safety Mechanisms&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#safety-mechanisms&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Recovery target required:&lt;/strong&gt; Without &lt;code&gt;-d/-I/-t/--name/--lsn/--xid&lt;/code&gt;, the command only shows help and does not run restore.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Confirmation:&lt;/strong&gt; In text mode, destructive recovery asks for interactive &lt;code&gt;y&lt;/code&gt;/&lt;code&gt;yes&lt;/code&gt; confirmation before execution. Automation can use &lt;code&gt;-y|--yes&lt;/code&gt;. Structured output mode does not prompt interactively; it must use &lt;code&gt;--yes&lt;/code&gt; to execute or &lt;code&gt;--plan&lt;/code&gt; to preview.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Patroni boundary:&lt;/strong&gt; For managed data-directory recovery, the command stops Patroni when needed to prevent Patroni from restarting PostgreSQL during restore. It does not automatically rejoin Patroni after recovery.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Side restore boundary:&lt;/strong&gt; A custom &lt;code&gt;-D&lt;/code&gt; side restore must use &lt;code&gt;--no-restart&lt;/code&gt; because the restored PostgreSQL config still uses the original port. Side restore does not manage Patroni or the default PostgreSQL service.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Failure boundary:&lt;/strong&gt; If restore fails after Patroni has been stopped, Patroni remains stopped and the target data directory may be partially restored. Fix the underlying issue and rerun PITR, or validate the recovery state first; do not start Patroni before confirmation. If restore has run but PostgreSQL startup fails, inspect PostgreSQL and pgBackRest logs and validate the data directory before deciding whether to restore Patroni management.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Structured output:&lt;/strong&gt; Structured execution requires &lt;code&gt;--yes&lt;/code&gt;; &lt;code&gt;--plan&lt;/code&gt; is the preview path. After successful execution, structured PITR results put post-restore actions in the Result envelope&amp;rsquo;s &lt;code&gt;next_actions&lt;/code&gt;, not inside &lt;code&gt;data&lt;/code&gt;. &lt;code&gt;data&lt;/code&gt; includes &lt;code&gt;requested_data_dir&lt;/code&gt;, &lt;code&gt;effective_data_dir&lt;/code&gt;, &lt;code&gt;managed_data_dir&lt;/code&gt;, and &lt;code&gt;side_restore&lt;/code&gt; so automation can distinguish user input from the actual recovery target.&lt;/p&gt;
&lt;h2 id=&#34;design-notes&#34;&gt;Design Notes&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#design-notes&#34; aria-label=&#34;Link to this heading&#34;&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;pig pitr&lt;/code&gt; calls pgBackRest restore and handles local Patroni/PostgreSQL stop and optional start.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pig pitr&lt;/code&gt; is not a cluster recovery controller. It does not handle Patroni failover, rejoin, VIP, or application traffic switching.&lt;/li&gt;
&lt;li&gt;Use &lt;a href=&#34;https://pig.pgsty.com/pb/#pb-restore&#34;&gt;&lt;code&gt;pig pb restore&lt;/code&gt;&lt;/a&gt; when you need lower-level restore semantics or fine-grained scripting control.&lt;/li&gt;
&lt;li&gt;Use &lt;a href=&#34;https://pig.pgsty.com/pt/&#34;&gt;&lt;code&gt;pig pt switchover CLUSTER&lt;/code&gt;&lt;/a&gt; or &lt;a href=&#34;https://pig.pgsty.com/pt/&#34;&gt;&lt;code&gt;pig pt failover CLUSTER --candidate MEMBER&lt;/code&gt;&lt;/a&gt; when you need manual Patroni cluster switching (native patronictl passthrough since v1.6.0; the cluster name is required).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Privilege execution:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;If the current user is the DBSU: execute directly.&lt;/li&gt;
&lt;li&gt;If the current user is root: execute with &lt;code&gt;su - postgres -c&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Other users: execute with &lt;code&gt;sudo -inu postgres --&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Platform support:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This command is designed for Linux and depends on pgBackRest, systemd for managed service scenarios, and data/log paths accessible by the DBSU.&lt;/p&gt;

      </description>
    </item>
    
  </channel>
</rss>
