<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">

<channel>

  <atom:link href="https://community.pyramidanalytics.com/rss/category/install-upgrade-cloud" rel="self" type="application/rss+xml"/>
  <title>Pyramid Analytics User Community&#32;Deployment &#x26; Setup</title>
  <link>https://community.pyramidanalytics.com/category/install-upgrade-cloud/</link>
  <description></description>
  <language>en-us</language>
<ttl>240</ttl>
  <item>
          <title>Migrating the Pyramid Database from PostgreSQL 9.6 to PostgreSQL 18 (Linux)</title>
          <link>https://community.pyramidanalytics.com/t/60yjmmq/migrating-the-pyramid-database-from-postgresql-9-6-to-postgresql-18-linux</link>
          <description><![CDATA[<h1 style="margin-bottom:18px;">CRITICAL: Required Before Upgrading to Pyramid 2025.11 or Later</h1>
<div style="border-left:5px solid #d9534f; background:#fdf2f2; padding:16px 20px; margin:18px 0;">
 <p style="margin:8px 0 12px 0;"><strong>IMPORTANT:</strong> This migration from <strong>PostgreSQL 9.6 to PostgreSQL 18</strong> MUST be completed <strong>BEFORE</strong> upgrading Pyramid to version <strong>2025.11 or any later version</strong>. If you attempt to upgrade Pyramid without completing this database migration first, it will fail.</p>
 <p style="margin:8px 0 12px 0;"><strong>This article only applies to you, if you installed Pyramid using the "New Internal Repository" option.</strong><a rev="auto" rel="nofollow noopener noreferrer" href="https://help.pyramidanalytics.com/Content/Root/Guides/installation/Main/Database%20Repository.htm" target="_blank">https://help.pyramidanalytics.com/Content/Root/Guides/installation/Main/Database%20Repository.htm</a></p>
</div>
<div style="border-left:5px solid #f0ad4e; background:#fff8e5; padding:14px 18px; margin:18px 0;">
 <p style="margin:8px 0 12px 0;">Migrate → verify for 24 hours → then upgrade Pyramid.</p>
</div>
<p style="margin:8px 0 12px 0;">Supported platforms: Ubuntu, Debian, RHEL, Oracle Linux, Amazon Linux.</p>
<h2 style="margin-top:32px; margin-bottom:14px;">Before You Start</h2>
<p style="margin:8px 0 12px 0;">Pyramid’s bundled PostgreSQL always runs on port 12130.</p>
<p style="margin:8px 0 12px 0;">Two values are specific to your install — you get both in Step 5:</p>
<table style="width:100%; border-collapse:collapse; margin:16px 0 24px 0;">
 <tbody>
  <tr>
   <td style="border:1px solid #d9d9d9; padding:10px 12px; vertical-align:top; font-weight:bold; background:#f5f5f5;">Placeholder</td>
   <td style="border:1px solid #d9d9d9; padding:10px 12px; vertical-align:top; font-weight:bold; background:#f5f5f5;">Replace with</td>
  </tr>
  <tr>
   <td style="border:1px solid #d9d9d9; padding:10px 12px; vertical-align:top;">&lt;YOUR_DATABASE&gt;</td>
   <td style="border:1px solid #d9d9d9; padding:10px 12px; vertical-align:top;">Your database name from config.ini</td>
  </tr>
  <tr>
   <td style="border:1px solid #d9d9d9; padding:10px 12px; vertical-align:top;">&lt;YOUR_PASSWORD&gt;</td>
   <td style="border:1px solid #d9d9d9; padding:10px 12px; vertical-align:top;">The password you derive in Step 5</td>
  </tr>
 </tbody>
</table>
<div style="border-left:5px solid #d9534f; background:#fdf2f2; padding:14px 18px; margin:18px 0;">
 <p style="margin:8px 0 12px 0;">The database service is pyramidPG.service. Stopping it before the backup is the most common way to break this migration.</p>
</div>
<p style="margin:8px 0 12px 0;">See what’s on your box:</p>
<pre class="language-none"><code class="language-none">systemctl&nbsp;list-units&nbsp;--type=service&nbsp;--all&nbsp;|&nbsp;grep&nbsp;-i&nbsp;pyramid</code></pre>
<h2 style="margin-top:32px; margin-bottom:14px;">Paths by Platform</h2>
<table style="width:100%; border-collapse:collapse; margin:16px 0 24px 0;">
 <tbody>
  <tr>
   <td style="border:1px solid #d9d9d9; padding:10px 12px; vertical-align:top; font-weight:bold; background:#f5f5f5;">Item</td>
   <td style="border:1px solid #d9d9d9; padding:10px 12px; vertical-align:top; font-weight:bold; background:#f5f5f5;">Ubuntu / Debian</td>
   <td style="border:1px solid #d9d9d9; padding:10px 12px; vertical-align:top; font-weight:bold; background:#f5f5f5;">RHEL / Oracle / Amazon</td>
  </tr>
  <tr>
   <td style="border:1px solid #d9d9d9; padding:10px 12px; vertical-align:top;">pg_hba.conf</td>
   <td style="border:1px solid #d9d9d9; padding:10px 12px; vertical-align:top;">/etc/postgresql/18/main/pg_hba.conf</td>
   <td style="border:1px solid #d9d9d9; padding:10px 12px; vertical-align:top;">/var/lib/pgsql/18/data/pg_hba.conf</td>
  </tr>
  <tr>
   <td style="border:1px solid #d9d9d9; padding:10px 12px; vertical-align:top;">postgresql.conf</td>
   <td style="border:1px solid #d9d9d9; padding:10px 12px; vertical-align:top;">/etc/postgresql/18/main/postgresql.conf</td>
   <td style="border:1px solid #d9d9d9; padding:10px 12px; vertical-align:top;">/var/lib/pgsql/18/data/postgresql.conf</td>
  </tr>
 </tbody>
</table>
<p style="margin:8px 0 12px 0;">By default Pyramid installs to /opt/Pyramid with config.ini inside it.</p>
<h2 style="margin-top:32px; margin-bottom:14px;">Prerequisites</h2>
<ul style="margin:8px 0 18px 24px;">
 <li style="margin:5px 0;">sudo access</li>
 <li style="margin:5px 0;">2x the current database size free on the backup filesystem</li>
 <li style="margin:5px 0;">Pyramid offline during the migration</li>
</ul>
<h2 style="margin-top:32px; margin-bottom:14px;">Step 1: Install PostgreSQL 18</h2>
<h3 style="margin-top:24px; margin-bottom:10px;">Ubuntu / Debian</h3>
<pre class="language-none"><code class="language-none">sudo&nbsp;apt&nbsp;install&nbsp;-y&nbsp;curl&nbsp;ca-certificates
sudo&nbsp;install&nbsp;-d&nbsp;/usr/share/postgresql-common/pgdg
sudo&nbsp;curl&nbsp;-o&nbsp;/usr/share/postgresql-common/pgdg/apt.postgresql.org.asc&nbsp;\
--fail&nbsp;https://www.postgresql.org/media/keys/ACCC4CF8.asc
.&nbsp;/etc/os-release
echo&nbsp;"deb&nbsp;[signed-by=/usr/share/postgresql-common/pgdg/apt.postgresql.org.asc]&nbsp;\
https://apt.postgresql.org/pub/repos/apt&nbsp;${VERSION_CODENAME}-pgdg&nbsp;main"&nbsp;\
|&nbsp;sudo&nbsp;tee&nbsp;/etc/apt/sources.list.d/pgdg.list
sudo&nbsp;apt&nbsp;update
sudo&nbsp;apt&nbsp;install&nbsp;-y&nbsp;postgresql-18&nbsp;postgresql-client-18</code></pre>
<p style="margin:8px 0 12px 0;">Initialises and starts automatically — no initdb.</p>
<h3 style="margin-top:24px; margin-bottom:10px;">RHEL / Oracle Linux</h3>
<pre class="language-none"><code class="language-none">sudo&nbsp;dnf&nbsp;install&nbsp;-y&nbsp;\
https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm&nbsp;-E&nbsp;%{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm
sudo&nbsp;dnf&nbsp;-qy&nbsp;module&nbsp;disable&nbsp;postgresql
sudo&nbsp;dnf&nbsp;install&nbsp;-y&nbsp;postgresql18-server&nbsp;postgresql18-contrib
sudo&nbsp;/usr/pgsql-18/bin/postgresql-18-setup&nbsp;initdb
sudo&nbsp;systemctl&nbsp;enable&nbsp;--now&nbsp;postgresql-18</code></pre>
<p style="margin:8px 0 12px 0;">If Oracle’s own PostgreSQL packages conflict:</p>
<pre class="language-none"><code class="language-none">sudo&nbsp;dnf&nbsp;install&nbsp;-y&nbsp;postgresql18-server&nbsp;--disablerepo=ol\*&nbsp;--enablerepo=pgdg18</code></pre>
<h3 style="margin-top:24px; margin-bottom:10px;">Amazon Linux 2023</h3>
<pre class="language-none"><code class="language-none">rpm&nbsp;-E&nbsp;%{rhel}&nbsp;doesn’t&nbsp;resolve&nbsp;here,&nbsp;so&nbsp;pin&nbsp;EL9:</code></pre>
<pre class="language-none"><code class="language-none">sudo&nbsp;dnf&nbsp;install&nbsp;-y&nbsp;\
https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm
sudo&nbsp;dnf&nbsp;-qy&nbsp;module&nbsp;disable&nbsp;postgresql&nbsp;2&gt;/dev/null&nbsp;||&nbsp;true
sudo&nbsp;dnf&nbsp;install&nbsp;-y&nbsp;postgresql18-server&nbsp;postgresql18-contrib
sudo&nbsp;/usr/pgsql-18/bin/postgresql-18-setup&nbsp;initdb
sudo&nbsp;systemctl&nbsp;enable&nbsp;--now&nbsp;postgresql-18</code></pre>
<p style="margin:8px 0 12px 0;">GPG key complaints:</p>
<pre class="language-none"><code class="language-none">sudo&nbsp;rpm&nbsp;--import&nbsp;https://download.postgresql.org/pub/repos/yum/keys/PGDG-RPM-GPG-KEY-RHEL</code></pre>
<h3 style="margin-top:24px; margin-bottom:10px;">Verify</h3>
<pre class="language-none"><code class="language-none">sudo&nbsp;-u&nbsp;postgres&nbsp;psql&nbsp;-c&nbsp;"SELECT&nbsp;version();"</code></pre>
<p style="margin:8px 0 12px 0;">Do Step 2 before anything else.</p>
<h2 style="margin-top:32px; margin-bottom:14px;">Step 2: Configure PostgreSQL 18</h2>
<h3 style="margin-top:24px; margin-bottom:10px;">2a. postgresql.conf</h3>
<p style="margin:8px 0 12px 0;">Ubuntu / Debian:</p>
<pre class="language-none"><code class="language-none">sudo&nbsp;nano&nbsp;/etc/postgresql/18/main/postgresql.conf</code></pre>
<p style="margin:8px 0 12px 0;">RHEL / Oracle / Amazon:</p>
<pre class="language-none"><code class="language-none">sudo&nbsp;nano&nbsp;/var/lib/pgsql/18/data/postgresql.conf</code></pre>
<p style="margin:8px 0 12px 0;">In the CONNECTIONS AND AUTHENTICATION section:</p>
<pre class="language-none"><code class="language-none">listen_addresses&nbsp;ships&nbsp;commented&nbsp;out,&nbsp;which&nbsp;means&nbsp;it&nbsp;defaults&nbsp;to&nbsp;localhost&nbsp;and&nbsp;refuses&nbsp;remote&nbsp;connections.&nbsp;Remove&nbsp;the&nbsp;#&nbsp;and&nbsp;set:</code></pre>
<pre class="language-none"><code class="language-none">listen_addresses&nbsp;=&nbsp;'*'</code></pre>
<p style="margin:8px 0 12px 0;">Single-server installs can leave this at the default. Multi-server must change it.</p>
<p style="margin:8px 0 12px 0;">port should already read:</p>
<pre class="language-none"><code class="language-none">port&nbsp;=&nbsp;5432</code></pre>
<pre class="language-none"><code class="language-none">max_connections&nbsp;—&nbsp;100&nbsp;is&nbsp;too&nbsp;low&nbsp;for&nbsp;Pyramid’s&nbsp;service&nbsp;pools:</code></pre>
<pre class="language-none"><code class="language-none">max_connections&nbsp;=&nbsp;1000</code></pre>
<h3 style="margin-top:24px; margin-bottom:10px;">2b. pg_hba.conf</h3>
<p style="margin:8px 0 12px 0;">Ubuntu / Debian:</p>
<pre class="language-none"><code class="language-none">sudo&nbsp;nano&nbsp;/etc/postgresql/18/main/pg_hba.conf</code></pre>
<p style="margin:8px 0 12px 0;">RHEL / Oracle / Amazon:</p>
<pre class="language-none"><code class="language-none">sudo&nbsp;nano&nbsp;/var/lib/pgsql/18/data/pg_hba.conf</code></pre>
<p style="margin:8px 0 12px 0;">Pick one based on your security requirements.</p>
<p style="margin:8px 0 12px 0;">Allow all (simplest, least secure):</p>
<pre class="language-none"><code class="language-none">#&nbsp;TYPE&nbsp;&nbsp;DATABASE&nbsp;&nbsp;USER&nbsp;&nbsp;ADDRESS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;METHOD
local&nbsp;&nbsp;&nbsp;all&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;all&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;peer
host&nbsp;&nbsp;&nbsp;&nbsp;all&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;all&nbsp;&nbsp;&nbsp;127.0.0.1/32&nbsp;&nbsp;&nbsp;&nbsp;scram-sha-256
host&nbsp;&nbsp;&nbsp;&nbsp;all&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;all&nbsp;&nbsp;&nbsp;0.0.0.0/0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scram-sha-256
host&nbsp;&nbsp;&nbsp;&nbsp;all&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;all&nbsp;&nbsp;&nbsp;::1/0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scram-sha-256
host&nbsp;&nbsp;&nbsp;&nbsp;all&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;all&nbsp;&nbsp;&nbsp;::/0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scram-sha-256</code></pre>
<p style="margin:8px 0 12px 0;">Allow a subnet — replace with your own (v4 and v6):</p>
<pre class="language-none"><code class="language-none">#&nbsp;TYPE&nbsp;&nbsp;DATABASE&nbsp;&nbsp;USER&nbsp;&nbsp;ADDRESS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;METHOD
local&nbsp;&nbsp;&nbsp;all&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;all&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;peer
host&nbsp;&nbsp;&nbsp;&nbsp;all&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;all&nbsp;&nbsp;&nbsp;127.0.0.1/32&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scram-sha-256
host&nbsp;&nbsp;&nbsp;&nbsp;all&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;all&nbsp;&nbsp;&nbsp;192.168.1.0/24&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scram-sha-256
host&nbsp;&nbsp;&nbsp;&nbsp;all&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;all&nbsp;&nbsp;&nbsp;::1/128&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scram-sha-256</code></pre>
<p style="margin:8px 0 12px 0;">Keep the local ... peer line — later steps need it.</p>
<h3 style="margin-top:24px; margin-bottom:10px;">2c. Restart and verify</h3>
<p style="margin:8px 0 12px 0;">Ubuntu / Debian:</p>
<pre class="language-none"><code class="language-none">sudo&nbsp;systemctl&nbsp;restart&nbsp;postgresql@18-main</code></pre>
<p style="margin:8px 0 12px 0;">RHEL / Oracle / Amazon:</p>
<pre class="language-none"><code class="language-none">sudo&nbsp;systemctl&nbsp;restart&nbsp;postgresql-18</code></pre>
<p style="margin:8px 0 12px 0;">Then:</p>
<pre class="language-none"><code class="language-none">sudo&nbsp;-u&nbsp;postgres&nbsp;psql&nbsp;-c&nbsp;"SHOW&nbsp;listen_addresses;"
sudo&nbsp;-u&nbsp;postgres&nbsp;psql&nbsp;-c&nbsp;"SHOW&nbsp;max_connections;"
sudo&nbsp;ss&nbsp;-lntp&nbsp;|&nbsp;grep&nbsp;5432</code></pre>
<h3 style="margin-top:24px; margin-bottom:10px;">2d. Firewall</h3>
<p style="margin:8px 0 12px 0;">Ubuntu / Debian — replace with your subnet:</p>
<pre class="language-none"><code class="language-none">sudo&nbsp;ufw&nbsp;allow&nbsp;from&nbsp;192.168.1.0/24&nbsp;to&nbsp;any&nbsp;port&nbsp;5432&nbsp;proto&nbsp;tcp</code></pre>
<p style="margin:8px 0 12px 0;">RHEL / Oracle Linux:</p>
<pre class="language-none"><code class="language-none">sudo&nbsp;firewall-cmd&nbsp;--permanent&nbsp;--add-port=5432/tcp
sudo&nbsp;firewall-cmd&nbsp;--reload</code></pre>
<p style="margin:8px 0 12px 0;">Amazon Linux / EC2 has no local firewall by default — add an inbound TCP 5432 rule to the instance’s Security Group.</p>
<p style="margin:8px 0 12px 0;">RHEL / Oracle with SELinux issues:</p>
<pre class="language-none"><code class="language-none">sudo&nbsp;ausearch&nbsp;-m&nbsp;avc&nbsp;-ts&nbsp;recent
sudo&nbsp;setsebool&nbsp;-P&nbsp;httpd_can_network_connect_db&nbsp;on</code></pre>
<h2 style="margin-top:32px; margin-bottom:14px;">Step 3: Create the Backup Directory</h2>
<p style="margin:8px 0 12px 0;">Own it yourself, or later steps hit permission errors:</p>
<pre class="language-none"><code class="language-none">sudo&nbsp;mkdir&nbsp;-p&nbsp;/var/backups/pyramid
sudo&nbsp;chown&nbsp;-R&nbsp;$(whoami):$(whoami)&nbsp;/var/backups/pyramid
chmod&nbsp;700&nbsp;/var/backups/pyramid
ls&nbsp;-ld&nbsp;/var/backups/pyramid</code></pre>
<p style="margin:8px 0 12px 0;">The output should show your username, not root. If you created it root-owned earlier, the chown -R above fixes it.</p>
<h2 style="margin-top:32px; margin-bottom:14px;">Step 4: Confirm the Pyramid Path</h2>
<pre class="language-none"><code class="language-none">ls&nbsp;-l&nbsp;/opt/Pyramid/config.ini</code></pre>
<p style="margin:8px 0 12px 0;">If it’s elsewhere:</p>
<pre class="language-none"><code class="language-none">sudo&nbsp;find&nbsp;/&nbsp;-name&nbsp;config.ini&nbsp;-path&nbsp;'*yramid*'&nbsp;2&gt;/dev/null</code></pre>
<h2 style="margin-top:32px; margin-bottom:14px;">Step 5: Get Your Database Name and Password</h2>
<pre class="language-none"><code class="language-none">sudo&nbsp;sed&nbsp;-n&nbsp;'/\[data\]/,/^\[/p'&nbsp;/opt/Pyramid/config.ini</code></pre>
<p style="margin:8px 0 12px 0;">Output looks like:</p>
<pre class="language-none"><code class="language-none">[data]
password=encG_0_KsIojX/E13v+ylAocWuRpaTALBicK864V7YWlmGCU/UuCPGd5n/ZpTMI/y4=
type=postgres
port=12130
username=pyramid
database=pyramidb3e0d8e8
dbhost=localhost</code></pre>
<p style="margin:8px 0 12px 0;">The username is always pyramid, the port always 12130. You need the database= value.</p>
<p style="margin:8px 0 12px 0;">Derive the password. The config.ini value is encrypted, but the real password is built from the database name — you are not decrypting anything. The rule is pyramid! plus everything after pyramid in the database name:</p>
<p style="margin:8px 0 12px 0;">database name:&nbsp;&nbsp; pyramidb3e0d8e8<br> password:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pyramid!b3e0d8e8</p>
<p style="margin:8px 0 12px 0;">Print your actual values:</p>
<pre class="language-none"><code class="language-none">DB=$(sudo&nbsp;sed&nbsp;-n&nbsp;'/\[data\]/,/^\[/p'&nbsp;/opt/Pyramid/config.ini&nbsp;|&nbsp;grep&nbsp;'^database='&nbsp;|&nbsp;cut&nbsp;-d=&nbsp;-f2)
if&nbsp;[[&nbsp;"$DB"&nbsp;==&nbsp;pyramid*&nbsp;]];&nbsp;then
echo&nbsp;"Database&nbsp;name:&nbsp;$DB"
echo&nbsp;"Password:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pyramid!${DB#pyramid}"
else
echo&nbsp;"Database&nbsp;'$DB'&nbsp;does&nbsp;not&nbsp;start&nbsp;with&nbsp;'pyramid'&nbsp;-&nbsp;the&nbsp;rule&nbsp;does&nbsp;not&nbsp;apply."
echo&nbsp;"Get&nbsp;the&nbsp;password&nbsp;from&nbsp;whoever&nbsp;built&nbsp;this&nbsp;environment."
fi</code></pre>
<p style="margin:8px 0 12px 0;">Verify them:</p>
<pre class="language-none"><code class="language-none">PGPASSWORD='&lt;YOUR_PASSWORD&gt;'&nbsp;psql&nbsp;-h&nbsp;127.0.0.1&nbsp;-p&nbsp;12130&nbsp;-U&nbsp;pyramid&nbsp;\
-d&nbsp;&lt;YOUR_DATABASE&gt;&nbsp;-c&nbsp;"\dt"&nbsp;|&nbsp;head</code></pre>
<p style="margin:8px 0 12px 0;">You should see a table list. If not, stop and fix it — the backup will fail the same way.</p>
<p style="margin:8px 0 12px 0;">Use 127.0.0.1, not localhost. On some hosts localhost resolves to IPv6 first and the bundled PostgreSQL isn’t bound to it.</p>
<h2 style="margin-top:32px; margin-bottom:14px;">Step 6: Check Disk Space</h2>
<pre class="language-none"><code class="language-none">df&nbsp;-h&nbsp;/var/backups/pyramid
PGPASSWORD='&lt;YOUR_PASSWORD&gt;'&nbsp;psql&nbsp;-h&nbsp;127.0.0.1&nbsp;-p&nbsp;12130&nbsp;-U&nbsp;pyramid&nbsp;-d&nbsp;postgres&nbsp;\
-c&nbsp;"SELECT&nbsp;pg_size_pretty(pg_database_size('&lt;YOUR_DATABASE&gt;'));"</code></pre>
<h2 style="margin-top:32px; margin-bottom:14px;">Step 7: Stop the Pyramid Services — Leave pyramidPG Running</h2>
<div style="border-left:5px solid #d9534f; background:#fdf2f2; padding:14px 18px; margin:18px 0;">
 <p style="margin:8px 0 12px 0;">pyramidPG is the source database. The backup fails without it.</p>
</div>
<p style="margin:8px 0 12px 0;">This stops every Pyramid service except the database, and skips anything not installed on this server:</p>
<pre class="language-none"><code class="language-none">for&nbsp;u&nbsp;in&nbsp;$(systemctl&nbsp;list-unit-files&nbsp;--type=service&nbsp;--no-legend&nbsp;\
|&nbsp;awk&nbsp;'{print&nbsp;$1}'&nbsp;|&nbsp;grep&nbsp;-i&nbsp;pyramid&nbsp;|&nbsp;grep&nbsp;-vi&nbsp;pyramidPG);&nbsp;do
echo&nbsp;"Stopping&nbsp;$u"
sudo&nbsp;systemctl&nbsp;stop&nbsp;"$u"
done</code></pre>
<p style="margin:8px 0 12px 0;">Confirm the database is still up — this must print active:</p>
<pre class="language-none"><code class="language-none">systemctl&nbsp;is-active&nbsp;pyramidPG.service</code></pre>
<p style="margin:8px 0 12px 0;">If it prints inactive:</p>
<pre class="language-none"><code class="language-none">sudo&nbsp;systemctl&nbsp;start&nbsp;pyramidPG.service
sleep&nbsp;5
systemctl&nbsp;is-active&nbsp;pyramidPG.service</code></pre>
<h2 style="margin-top:32px; margin-bottom:14px;">Step 8: Back Up config.ini</h2>
<pre class="language-none"><code class="language-none">cp&nbsp;-a&nbsp;/opt/Pyramid/config.ini&nbsp;\
/var/backups/pyramid/config.ini.backup_$(date&nbsp;+%Y%m%d_%H%M%S)</code></pre>
<h2 style="margin-top:32px; margin-bottom:14px;">Step 9: Back Up the Database. -- replace 'your_password' and 'yourdatabase' with your details.</h2>
<p style="margin:8px 0 12px 0;">PostgreSQL 18’s pg_dump can dump from a 9.6 server, so no 9.6 binaries are needed.</p>
<p style="margin:8px 0 12px 0;">Do not use sudo — it creates a root-owned file that breaks Step 12.</p>
<h3 style="margin-top:24px; margin-bottom:10px;">Ubuntu / Debian</h3>
<pre class="language-none"><code class="language-none">BACKUP=/var/backups/pyramid/pyramid_backup_$(date&nbsp;+%Y%m%d_%H%M%S).backup
PGPASSWORD='&lt;YOUR_PASSWORD&gt;'&nbsp;/usr/lib/postgresql/18/bin/pg_dump&nbsp;\
-h&nbsp;127.0.0.1&nbsp;-p&nbsp;12130&nbsp;-U&nbsp;pyramid&nbsp;\
-Fc&nbsp;-b&nbsp;-v&nbsp;-f&nbsp;"$BACKUP"&nbsp;&lt;YOUR_DATABASE&gt;
ls&nbsp;-lh&nbsp;"$BACKUP"</code></pre>
<h3 style="margin-top:24px; margin-bottom:10px;">RHEL / Oracle Linux / Amazon Linux</h3>
<pre class="language-none"><code class="language-none">BACKUP=/var/backups/pyramid/pyramid_backup_$(date&nbsp;+%Y%m%d_%H%M%S).backup
PGPASSWORD='&lt;YOUR_PASSWORD&gt;'&nbsp;/usr/pgsql-18/bin/pg_dump&nbsp;\
-h&nbsp;127.0.0.1&nbsp;-p&nbsp;12130&nbsp;-U&nbsp;pyramid&nbsp;\
-Fc&nbsp;-b&nbsp;-v&nbsp;-f&nbsp;"$BACKUP"&nbsp;&lt;YOUR_DATABASE&gt;
ls&nbsp;-lh&nbsp;"$BACKUP"</code></pre>
<p style="margin:8px 0 12px 0;">-Fc custom format (required for pg_restore), -b include blobs, -v verbose, -f output file. The database name goes at the end with no flag — that’s normal for pg_dump.</p>
<p style="margin:8px 0 12px 0;">Verify before continuing. ls -lh must show a real size owned by your user. If it’s 0 bytes or missing, the dump failed — do not go to Step 10.</p>
<p style="margin:8px 0 12px 0;">In a new shell, recover the variable with:</p>
<pre class="language-none"><code class="language-none">BACKUP=$(ls&nbsp;-t&nbsp;/var/backups/pyramid/*.backup&nbsp;|&nbsp;head&nbsp;-1)</code></pre>
<h2 style="margin-top:32px; margin-bottom:14px;">Step 10: Disable pyramidPG</h2>
<pre class="language-none"><code class="language-none">sudo&nbsp;systemctl&nbsp;disable&nbsp;--now&nbsp;pyramidPG.service
systemctl&nbsp;is-enabled&nbsp;pyramidPG.service</code></pre>
<p style="margin:8px 0 12px 0;">Should print disabled.</p>
<h2 style="margin-top:32px; margin-bottom:14px;">Step 11: Create the pyramid Role in PostgreSQL 18</h2>
<pre class="language-none"><code class="language-none">sudo&nbsp;-u&nbsp;postgres&nbsp;psql&nbsp;-c&nbsp;"CREATE&nbsp;USER&nbsp;pyramid&nbsp;WITH&nbsp;PASSWORD&nbsp;'&lt;YOUR_PASSWORD&gt;';"
sudo&nbsp;-u&nbsp;postgres&nbsp;psql&nbsp;-c&nbsp;"ALTER&nbsp;USER&nbsp;pyramid&nbsp;WITH&nbsp;SUPERUSER&nbsp;CREATEDB&nbsp;LOGIN;"</code></pre>
<pre class="language-none"><code class="language-none">If&nbsp;the&nbsp;role&nbsp;already&nbsp;exists,&nbsp;use&nbsp;ALTER&nbsp;USER&nbsp;pyramid&nbsp;WITH&nbsp;PASSWORD&nbsp;'&lt;YOUR_PASSWORD&gt;';&nbsp;instead&nbsp;of&nbsp;CREATE.</code></pre>
<h2 style="margin-top:32px; margin-bottom:14px;">Step 12: Restore into PostgreSQL 18</h2>
<p style="margin:8px 0 12px 0;">Create the database — the name must match the original exactly:</p>
<pre class="language-none"><code class="language-none">sudo&nbsp;-u&nbsp;postgres&nbsp;psql&nbsp;-c&nbsp;'CREATE&nbsp;DATABASE&nbsp;"&lt;YOUR_DATABASE&gt;"&nbsp;OWNER&nbsp;pyramid;'</code></pre>
<p style="margin:8px 0 12px 0;">Restore as pyramid over TCP, not as the postgres OS user. The postgres user can’t read into your 700 backup directory; connecting over TCP means the file is read with your permissions.</p>
<h3 style="margin-top:24px; margin-bottom:10px;">Ubuntu / Debian</h3>
<pre class="language-none"><code class="language-none">PGPASSWORD='&lt;YOUR_PASSWORD&gt;'&nbsp;/usr/lib/postgresql/18/bin/pg_restore&nbsp;\
-h&nbsp;127.0.0.1&nbsp;-p&nbsp;5432&nbsp;-U&nbsp;pyramid&nbsp;\
-d&nbsp;&lt;YOUR_DATABASE&gt;&nbsp;--exit-on-error&nbsp;-v&nbsp;"$BACKUP"</code></pre>
<h3 style="margin-top:24px; margin-bottom:10px;">RHEL / Oracle Linux / Amazon Linux</h3>
<pre class="language-none"><code class="language-none">PGPASSWORD='&lt;YOUR_PASSWORD&gt;'&nbsp;/usr/pgsql-18/bin/pg_restore&nbsp;\
-h&nbsp;127.0.0.1&nbsp;-p&nbsp;5432&nbsp;-U&nbsp;pyramid&nbsp;\
-d&nbsp;&lt;YOUR_DATABASE&gt;&nbsp;--exit-on-error&nbsp;-v&nbsp;"$BACKUP"</code></pre>
<p style="margin:8px 0 12px 0;">--exit-on-error matters — without it pg_restore exits successfully even when every object failed.</p>
<p style="margin:8px 0 12px 0;">To start over:</p>
<pre class="language-none"><code class="language-none">sudo&nbsp;-u&nbsp;postgres&nbsp;psql&nbsp;-c&nbsp;'DROP&nbsp;DATABASE&nbsp;"&lt;YOUR_DATABASE&gt;";'
sudo&nbsp;-u&nbsp;postgres&nbsp;psql&nbsp;-c&nbsp;'CREATE&nbsp;DATABASE&nbsp;"&lt;YOUR_DATABASE&gt;"&nbsp;OWNER&nbsp;pyramid;'</code></pre>
<h2 style="margin-top:32px; margin-bottom:14px;">Step 13: Verify the Restore</h2>
<div style="border-left:5px solid #d9534f; background:#fdf2f2; padding:14px 18px; margin:18px 0;">
 <p style="margin:8px 0 12px 0;">All three must pass before you touch config.ini.</p>
</div>
<p style="margin:8px 0 12px 0;">Table count must be greater than zero:</p>
<pre class="language-none"><code class="language-none">sudo&nbsp;-u&nbsp;postgres&nbsp;psql&nbsp;-d&nbsp;&lt;YOUR_DATABASE&gt;&nbsp;-t&nbsp;-A&nbsp;\
-c&nbsp;"SELECT&nbsp;COUNT(*)&nbsp;FROM&nbsp;information_schema.tables&nbsp;WHERE&nbsp;table_schema='public';"</code></pre>
<p style="margin:8px 0 12px 0;">Size should be comparable to the original:</p>
<pre class="language-none"><code class="language-none">sudo&nbsp;-u&nbsp;postgres&nbsp;psql&nbsp;-t&nbsp;-A&nbsp;\
-c&nbsp;"SELECT&nbsp;pg_size_pretty(pg_database_size('&lt;YOUR_DATABASE&gt;'));"</code></pre>
<p style="margin:8px 0 12px 0;">This is how Pyramid itself will connect:</p>
<pre class="language-none"><code class="language-none">PGPASSWORD='&lt;YOUR_PASSWORD&gt;'&nbsp;psql&nbsp;-h&nbsp;127.0.0.1&nbsp;-p&nbsp;5432&nbsp;\
-U&nbsp;pyramid&nbsp;-d&nbsp;&lt;YOUR_DATABASE&gt;&nbsp;-c&nbsp;"\dt"&nbsp;|&nbsp;head</code></pre>
<p style="margin:8px 0 12px 0;">config.ini is still untouched at this point, so Pyramid can be brought back on the old database if anything’s wrong.</p>
<h2 style="margin-top:32px; margin-bottom:14px;">Step 14: Update config.ini</h2>
<p style="margin:8px 0 12px 0;">Change only the port:</p>
<pre class="language-none"><code class="language-none">sudo&nbsp;sed&nbsp;-i&nbsp;'s/^port=12130$/port=5432/'&nbsp;/opt/Pyramid/config.ini
sudo&nbsp;grep&nbsp;'^port='&nbsp;/opt/Pyramid/config.ini</code></pre>
<p style="margin:8px 0 12px 0;">Leave everything else alone, including the encrypted password= field.</p>
<h2 style="margin-top:32px; margin-bottom:14px;">Step 15: Start the Pyramid Services</h2>
<p style="margin:8px 0 12px 0;">pyramidPG stays disabled.</p>
<pre class="language-none"><code class="language-none">for&nbsp;u&nbsp;in&nbsp;$(systemctl&nbsp;list-unit-files&nbsp;--type=service&nbsp;--no-legend&nbsp;\
|&nbsp;awk&nbsp;'{print&nbsp;$1}'&nbsp;|&nbsp;grep&nbsp;-i&nbsp;pyramid&nbsp;|&nbsp;grep&nbsp;-vi&nbsp;pyramidPG);&nbsp;do
echo&nbsp;"Starting&nbsp;$u"
sudo&nbsp;systemctl&nbsp;start&nbsp;"$u"
sleep&nbsp;3
done
systemctl&nbsp;list-units&nbsp;--type=service&nbsp;--all&nbsp;|&nbsp;grep&nbsp;-i&nbsp;pyramid</code></pre>
<p style="margin:8px 0 12px 0;">Wait 60–90 seconds. Investigate anything that failed:</p>
<pre class="language-none"><code class="language-none">journalctl&nbsp;-u&nbsp;&lt;unit-name&gt;&nbsp;-n&nbsp;50&nbsp;--no-pager</code></pre>
<h2 style="margin-top:32px; margin-bottom:14px;">Step 16: Update the Data Source in Admin Hub</h2>
<ol style="margin:8px 0 18px 24px;">
 <li style="margin:6px 0;">Admin → Data → Data Source</li>
 <li style="margin:6px 0;">Select Local PG</li>
 <li style="margin:6px 0;">Change Port from 12130 to 5432</li>
 <li style="margin:6px 0;">Test — wait for the green check</li>
 <li style="margin:6px 0;">Apply</li>
</ol>
<h2 style="margin-top:32px; margin-bottom:14px;">Step 17: Other Servers in the Cluster</h2>
<p style="margin:8px 0 12px 0;">On each remaining Pyramid server, stop the services, change the port, start them again:</p>
<pre class="language-none"><code class="language-none">for&nbsp;u&nbsp;in&nbsp;$(systemctl&nbsp;list-unit-files&nbsp;--type=service&nbsp;--no-legend&nbsp;\
|&nbsp;awk&nbsp;'{print&nbsp;$1}'&nbsp;|&nbsp;grep&nbsp;-i&nbsp;pyramid&nbsp;|&nbsp;grep&nbsp;-vi&nbsp;pyramidPG);&nbsp;do
sudo&nbsp;systemctl&nbsp;stop&nbsp;"$u"
done
sudo&nbsp;sed&nbsp;-i&nbsp;'s/^port=12130$/port=5432/'&nbsp;/opt/Pyramid/config.ini
sudo&nbsp;grep&nbsp;-E&nbsp;'^(port|dbhost)='&nbsp;/opt/Pyramid/config.ini
for&nbsp;u&nbsp;in&nbsp;$(systemctl&nbsp;list-unit-files&nbsp;--type=service&nbsp;--no-legend&nbsp;\
|&nbsp;awk&nbsp;'{print&nbsp;$1}'&nbsp;|&nbsp;grep&nbsp;-i&nbsp;pyramid&nbsp;|&nbsp;grep&nbsp;-vi&nbsp;pyramidPG);&nbsp;do
sudo&nbsp;systemctl&nbsp;start&nbsp;"$u"
sleep&nbsp;3
done</code></pre>
<p style="margin:8px 0 12px 0;">Check that dbhost= points at the server running PostgreSQL 18 — not localhost.</p>
<h2 style="margin-top:32px; margin-bottom:14px;">Step 18: Verify</h2>
<p style="margin:8px 0 12px 0;">Log into Pyramid and confirm that it is working as it should.</p>
<h2 style="margin-top:32px; margin-bottom:14px;">Step 19: Upgrade Pyramid</h2>
<div style="border-left:5px solid #5cb85c; background:#f2faf2; padding:14px 18px; margin:18px 0;">
 <p style="margin:8px 0 12px 0;">After 24 hours of clean operation, proceed with the 2025.11+ upgrade.<br> Rollback</p>
</div>
<p style="margin:8px 0 12px 0;">Checklist</p>
<ul style="margin:8px 0 18px 24px;">
 <li style="margin:5px 0;">PostgreSQL 18 installed (RHEL / Oracle / Amazon: initdb run)</li>
 <li style="margin:5px 0;">listen_addresses uncommented and set (multi-server)</li>
 <li style="margin:5px 0;">max_connections = 300</li>
 <li style="margin:5px 0;">pg_hba.conf configured, local all all peer kept</li>
 <li style="margin:5px 0;">PG18 restarted, settings confirmed with SHOW</li>
 <li style="margin:5px 0;">Firewall / Security Group allows 5432</li>
 <li style="margin:5px 0;">Backup directory owned by your user, not root</li>
 <li style="margin:5px 0;">Database name and password verified against port 12130</li>
 <li style="margin:5px 0;">config.ini backed up</li>
 <li style="margin:5px 0;">All Pyramid services stopped except pyramidPG</li>
 <li style="margin:5px 0;">systemctl is-active pyramidPG.service printed active before the backup</li>
 <li style="margin:5px 0;">pg_dump run without sudo, file has a real size</li>
 <li style="margin:5px 0;">pyramidPG disabled after the backup</li>
 <li style="margin:5px 0;">Restore run over TCP with --exit-on-error</li>
 <li style="margin:5px 0;">Table count greater than zero</li>
 <li style="margin:5px 0;">pyramid connects over TCP on 5432</li>
 <li style="margin:5px 0;">config.ini port updated on every server</li>
 <li style="margin:5px 0;">Admin Hub → Local PG on 5432, Test passes</li>
 <li style="margin:5px 0;">24 hours clean before upgrading Pyramid</li>
</ul>
<h2 style="margin-top:32px; margin-bottom:14px;">Leave pyramidPG disabled — it costs nothing and keeps rollback available.</h2>]]></description>
          <pubDate>Tue, 08 Sep 2026 06:58:06 +0000</pubDate>
          <guid>https://community.pyramidanalytics.com/t/60yjmmq/migrating-the-pyramid-database-from-postgresql-9-6-to-postgresql-18-linux</guid>
          <dc:creator>Daniel</dc:creator>
        </item>

      <item>
          <title>Migrating the Pyramid Database from PostgreSQL 9.6 to PostgreSQL 18 (Windows)</title>
          <link>https://community.pyramidanalytics.com/t/m1yjmxm/migrating-the-pyramid-database-from-postgresql-9-6-to-postgresql-18-windows</link>
          <description><![CDATA[<h1>CRITICAL: Required Before Upgrading to Pyramid 2025.11 or Later</h1>
<div style="border-left:5px solid #d9534f; background:#fdf2f2; padding:16px 20px; margin:20px 0;">
 <p style="margin:0;"><strong>IMPORTANT:</strong> This migration from <strong>PostgreSQL 9.6 to PostgreSQL 18</strong> MUST be completed <strong>BEFORE</strong> upgrading Pyramid to version <strong>2025.11 or any later version</strong>. If you attempt to upgrade Pyramid without completing this database migration first, it will fail.</p>
 <p><strong>This article only applies to you, if you installed Pyramid using the "New Internal Repository"</strong> option.</p>
 <p><a href="https://help.pyramidanalytics.com/Content/Root/Guides/installation/Main/Database%20Repository.htm" rel="nofollow noopener noreferrer" target="_blank">https://help.pyramidanalytics.com/Content/Root/Guides/installation/Main/Database%20Repository.htm</a></p>
</div>
<h3>Required Timeline</h3>
<ol>
 <li>Complete this migration. -- Taking the initial backup of the Pyramid repository database is critical.&nbsp;</li>
 <li>Verify everything is working properly.&nbsp;</li>
 <li>Proceed with the Pyramid 2025.11 or later upgrade.</li>
</ol>
<hr>
<h2>Overview</h2>
<p>This guide walks you through migrating your Pyramid Postgres server from <strong>PostgreSQL 9.6</strong> to <strong>PostgreSQL 18</strong>. You can follow the manual process step-by-step or use the provided <u><strong>PowerShell script for automation(see the end of this article).</strong></u></p>
<h2>Prerequisites</h2>
<ul>
 <li>Administrative access to your Pyramid server(s).</li>
 <li>PostgreSQL 18 installer (download from <a href="https://www.postgresql.org/download/windows/" rel="nofollow noopener noreferrer" target="_blank">postgresql.org</a>).</li>
 <li>A database backup location with at least <strong>2x the current database size</strong> in free disk space.</li>
 <li>All Pyramid services will be offline during this process.</li>
 <li>Note your Pyramid installation directory (default: <code>C:\Program Files\Pyramid</code>, but it may differ).</li>
 <li><strong>PostgreSQL 18 must be installed before running this migration.</strong></li>
</ul>
<hr>
<h2>Manual Migration Process</h2>
<h3>Step 1: Install PostgreSQL 18</h3>
<ol>
 <li>Download PostgreSQL 18 from <a href="https://www.postgresql.org/download/windows/" rel="nofollow noopener noreferrer" target="_blank">postgresql.org</a>.</li>
 <li>Run the installer.</li>
 <li>Accept the default settings: 
  <ul>
   <li><strong>Installation directory:</strong> <code>C:\Program Files\PostgreSQL\18</code></li>
   <li><strong>Port:</strong> <code>5432</code></li>
   <li><strong>Username:</strong> <code>postgres</code></li>
   <li><strong>Password:</strong> Set a secure password for the <code>postgres</code> superuser.</li>
  </ul></li>
 <li>Skip Stack Builder at the end of the installation.</li>
 <li>Complete the installation.</li>
</ol>
<h3>Step 2: Configure PostgreSQL 18 Host-Based Authentication</h3>
<p>After installing PostgreSQL 18, you must configure which servers can connect to it. This is controlled by the <code>pg_hba.conf</code> file.</p>
<div style="border-left:5px solid #d9534f; background:#fdf2f2; padding:14px 18px; margin:18px 0;"><strong>WARNING:</strong> This step must be completed before the database migration, or remote Pyramid servers will not be able to connect.
</div>
<ol>
 <li>Open the following file with a text editor such as Notepad:<br> <code>C:\Program Files\PostgreSQL\18\data\pg_hba.conf</code></li>
 <li>Find the sections labeled <strong>IPv4 local connections</strong> and <strong>IPv6 local connections</strong>.</li>
 <li>Edit the below lines to allow your Pyramid servers to connect.</li>
</ol>
<p>Below are two example configurations. Choose the configuration appropriate for your security requirements and work with your IT team to determine what is appropriate for your environment.</p>
<h4>Example 1: Allow All Servers</h4>
<p><strong>Simplest configuration, but least secure:</strong></p>
<pre class="language-none"><code class="language-none">
#&nbsp;IPv4&nbsp;local&nbsp;connections:
host&nbsp;&nbsp;&nbsp;&nbsp;all&nbsp;&nbsp;&nbsp;&nbsp;all&nbsp;&nbsp;&nbsp;&nbsp;127.0.0.1/32&nbsp;&nbsp;&nbsp;&nbsp;scram-sha-256
host&nbsp;&nbsp;&nbsp;&nbsp;all&nbsp;&nbsp;&nbsp;&nbsp;all&nbsp;&nbsp;&nbsp;&nbsp;0.0.0.0/0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scram-sha-256

#&nbsp;IPv6&nbsp;local&nbsp;connections:
host&nbsp;&nbsp;&nbsp;&nbsp;all&nbsp;&nbsp;&nbsp;&nbsp;all&nbsp;&nbsp;&nbsp;&nbsp;::1/0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scram-sha-256
host&nbsp;&nbsp;&nbsp;&nbsp;all&nbsp;&nbsp;&nbsp;&nbsp;all&nbsp;&nbsp;&nbsp;&nbsp;::/0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scram-sha-256</code></pre>
<h4>Example 2: Allow a Specific Subnet</h4>
<p><strong>More restrictive and secure:&nbsp; ---<u> change the ip's (ipv4 and v6) to your subnet ip's</u></strong></p>
<pre class="language-none"><code class="language-none">
#&nbsp;IPv4&nbsp;local&nbsp;connections:
host&nbsp;&nbsp;&nbsp;&nbsp;all&nbsp;&nbsp;&nbsp;&nbsp;all&nbsp;&nbsp;&nbsp;&nbsp;127.0.0.1/32&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scram-sha-256
host&nbsp;&nbsp;&nbsp;&nbsp;all&nbsp;&nbsp;&nbsp;&nbsp;all&nbsp;&nbsp;&nbsp;&nbsp;192.168.1.0/24&nbsp;&nbsp;&nbsp;&nbsp;scram-sha-256

#&nbsp;IPv6&nbsp;local&nbsp;connections:
host&nbsp;&nbsp;&nbsp;&nbsp;all&nbsp;&nbsp;&nbsp;&nbsp;all&nbsp;&nbsp;&nbsp;&nbsp;::1/0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scram-sha-256
host&nbsp;&nbsp;&nbsp;&nbsp;all&nbsp;&nbsp;&nbsp;&nbsp;all&nbsp;&nbsp;&nbsp;&nbsp;fe80::/10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scram-sha-256</code></pre>
<ol start="4">
 <li>Save the file.</li>
 <li><p><strong>Increase max_connections.</strong> The default of 100 is too low for Pyramid's service pools. Open <code>C:\Program Files\PostgreSQL\18\data\postgresql.conf</code> in a text editor, find the <strong>CONNECTIONS AND AUTHENTICATION</strong> section, and set:</p> <pre class="language-none"><code class="language-none">max_connections&nbsp;=&nbsp;1000</code></pre></li>
 <li>Restart the PostgreSQL 18 service: 
  <ul>
   <li>Open <code>services.msc</code>.</li>
   <li>Locate the PostgreSQL 18 service. The name may be <code>PostgreSQL18</code>, <code>postgres-x64-18</code>, or similar.</li>
   <li>Right-click the service and select <strong>Restart</strong>.</li>
   <li>Wait approximately 10–15 seconds for it to restart fully.</li>
  </ul></li>
</ol>
<h4>Verification</h4>
<p>If you have secondary servers, test the connection from one of them:</p>
<pre class="language-none"><code class="language-none">psql&nbsp;-h&nbsp;[PostgreSQL18_IP]&nbsp;-U&nbsp;postgres&nbsp;-d&nbsp;postgres&nbsp;-p&nbsp;5432</code></pre>
<p>When prompted, enter the <code>postgres</code> superuser password. If the connection succeeds, authentication is configured correctly.</p>
<h3>Step 3: Locate Your Pyramid Installation Directory</h3>
<p>Your Pyramid installation may be in a non-default location. To locate it:</p>
<ol>
 <li>Open <code>services.msc</code>.</li>
 <li>Right-click any Pyramid service and select <strong>Properties</strong>.</li>
 <li>On the <strong>General</strong> tab, note the path shown for the service executable.</li>
</ol>
<p><strong>Common locations include:</strong></p>
<ul>
 <li><code>C:\Program Files\Pyramid</code></li>
 <li><code>C:\Pyramid</code></li>
 <li><code>D:\Applications\Pyramid</code></li>
</ul>
<p><strong>Remember this path—you will need it throughout this guide.</strong></p>
<h3>Step 4: Retrieve Database Credentials from config.ini</h3>
<p>Extract your database connection details so that you can connect to the existing PostgreSQL 9.6 instance.</p>
<ol>
 <li>Navigate to your Pyramid installation directory.</li>
 <li>Open <code>config.ini</code> with a text editor.</li>
 <li>Find the <code>[data]</code> section.</li>
 <li>Locate the relevant database values.</li>
</ol>
<p>For example:</p>
<pre class="language-none"><code class="language-none">
[data]
password=
type=postgres
port=12130
username=pyramid
database=pyramidb3e0d8e8
dbhost=EC2AMAZ-2TTQ7TS
dblocation=0
dbssl=0</code></pre>
<p><strong>Extract the following values:</strong></p>
<ul>
 <li><strong>Username:</strong> <code>pyramid</code></li>
 <li><strong>Database Name:</strong> the value from <code>database=</code></li>
 <li><strong>Port:</strong> the value from <code>port=</code></li>
 <li><strong>Server/Host:</strong> the value from <code>dbhost=</code></li>
</ul>
<h4>Construct the Password</h4>
<p>The password stored in <code>config.ini</code> is encrypted, but the actual password Pyramid uses is constructed from the database name.&nbsp;</p>
<ul>
 <li>Take the database name and extract everything after the word <code>pyramid</code>.</li>
 <li>Password format: <code>pyramid![everything_after_pyramid]</code></li>
</ul>
<p><strong>Example:</strong></p>
<ul>
 <li>Database name: <code>pyramidb3e0d8e8</code></li>
 <li>Everything after <code>pyramid</code>: <code>b3e0d8e8</code></li>
 <li>Password: <code>pyramid!b3e0d8e8</code></li>
</ul>
<h4>Verify the PostgreSQL 9.6 Connection</h4>
<ol>
 <li>Open pgAdmin 4.</li>
 <li>Create a new server connection: 
  <ul>
   <li>Right-click <strong>Servers</strong> → <strong>Create</strong> → <strong>Server</strong>.</li>
   <li><strong>Name:</strong> <code>Pyramid_9.6_Backup</code></li>
   <li>Open the <strong>Connection</strong> tab.</li>
   <li><strong>Host name/address:</strong> the value from <code>dbhost=</code></li>
   <li><strong>Port:</strong> the value from <code>port=</code></li>
   <li><strong>Username:</strong> <code>pyramid</code></li>
   <li><strong>Password:</strong> the password constructed above.</li>
   <li><strong>Save password:</strong> Yes</li>
  </ul></li>
 <li>Click <strong>Save</strong>.</li>
 <li>Expand the connection and verify that you can see your databases.</li>
</ol>
<p>This confirms that your credentials are correct before proceeding with the backup.</p>
<h3>Step 5: Verify PostgreSQL 18 is Installed</h3>
<ol>
 <li>Verify that <code>C:\Program Files\PostgreSQL\18\bin</code> exists.</li>
 <li>Open <code>services.msc</code>.</li>
 <li>Verify that the PostgreSQL 18 service exists.</li>
 <li>Verify that you completed <strong>Step 2</strong> and configured <code>pg_hba.conf</code>.</li>
</ol>
<h3>Step 6: Check Available Disk Space</h3>
<ol>
 <li>Right-click the backup destination drive and select <strong>Properties</strong>.</li>
 <li>Verify that free space is at least <strong>2x the current database size</strong>.</li>
</ol>
<p>To estimate the database size in pgAdmin 4:</p>
<ul>
 <li>Right-click the Pyramid database.</li>
 <li>Select <strong>Properties → Statistics</strong>.</li>
 <li>Note the <strong>Size</strong> value.</li>
</ul>
<h3>Step 7: Stop Pyramid Services</h3>
<div style="border-left:5px solid #d9534f; background:#fdf2f2; padding:14px 18px; margin:18px 0;"><strong>IMPORTANT:</strong> Do <strong>not</strong> stop <code>PyramidPostgreSQL</code> yet. This service hosts the source database, and the backup in Step 10 will fail if it is not running.
</div>
<ol>
 <li>Open <code>services.msc</code>.</li>
 <li>Stop every service starting with <strong>Pyramid</strong>, except <code>PyramidPostgreSQL</code>.</li>
 <li>Confirm that <code>PyramidPostgreSQL</code> is still <strong>Running</strong>.</li>
 <li>Verify that all other Pyramid services are stopped before proceeding.</li>
</ol>
<h3>Step 8: Back Up config.ini</h3>
<ol>
 <li>Navigate to your Pyramid installation directory.</li>
 <li>Copy <code>config.ini</code> to a safe location.</li>
 <li>Name the copy something such as <code>config.ini.backup_[date]</code>.</li>
 <li>Keep this file so that the original configuration can be restored if necessary.</li>
</ol>
<h3>Step 9: Create the Pyramid User in PostgreSQL 18</h3>
<ol>
 <li>Open pgAdmin 4 installed with PostgreSQL 18.</li>
 <li>Connect using the <code>postgres</code> superuser credentials.</li>
 <li>Right-click <strong>Login/Group Roles → Create → Login/Group Role</strong>.</li>
 <li>Configure the role: 
  <ul>
   <li><strong>Name:</strong> <code>pyramid</code></li>
   <li><strong>Password:</strong> Use the password constructed in Step 4.</li>
   <li>Under <strong>Definition</strong>, ensure <strong>Can login?</strong> is enabled.</li>
   <li>Under <strong>Privileges</strong>, enable <strong>Can create databases?</strong> and <strong>Superuser?</strong>.</li>
  </ul></li>
 <li>Save and close.</li>
</ol>
<h3>Step 10: Back Up the Current PostgreSQL 9.6 Database</h3>
<ol>
 <li>Open pgAdmin 4 and connect to the existing PostgreSQL 9.6 instance.</li>
 <li>Expand <strong>Databases</strong> and locate the Pyramid database identified in Step 4.</li>
 <li>Right-click the database and select <strong>Backup</strong>.</li>
 <li>Configure the backup: 
  <ul>
   <li><strong>Format:</strong> Custom or TAR</li>
   <li><strong>Filename:</strong> <code>pyramid_backup_[date].backup</code></li>
   <li><strong>Compression:</strong> Medium</li>
   <li><strong>Path:</strong> A backup location with sufficient free space</li>
  </ul></li>
 <li>Click <strong>Backup</strong>.</li>
 <li>Wait for completion and monitor the <strong>Messages</strong> tab.</li>
</ol>
<h4>Verify the Backup</h4>
<ul>
 <li>Confirm that the <code>.backup</code> file was created.</li>
 <li>Confirm that its file size is reasonable compared with the source database size.</li>
</ul>
<h3>Step 11: Disable the Old PostgreSQL Service</h3>
<div style="border-left:5px solid #f0ad4e; background:#fff8e5; padding:14px 18px; margin:18px 0;">
 Only perform this step after confirming that the backup from Step 10 exists and has a sensible file size. Taking the old database offline before you have a verified backup leaves you with nothing to restore.
</div>
<ol>
 <li>Open <code>services.msc</code>.</li>
 <li>Locate <code>PyramidPostgreSQL</code>. On some installations it may appear as <code>PostgreSQL96</code> or <code>postgresql-x64-9.6</code>.</li>
 <li>Right-click → <strong>Properties</strong> and set <strong>Startup type</strong> to <strong>Disabled</strong>.</li>
 <li>Click <strong>Stop</strong>.</li>
 <li>Confirm that the service is stopped and its startup type is <strong>Disabled</strong>.</li>
</ol>
<h3>Step 12: Restore the Database to PostgreSQL 18</h3>
<ol>
 <li>Open pgAdmin 4 and connect to PostgreSQL 18.</li>
 <li>Create a new database: 
  <ul>
   <li>Right-click <strong>Databases → Create → Database</strong>.</li>
   <li><strong>Name:</strong> Use the exact database name identified in Step 4.</li>
   <li><strong>Owner:</strong> <code>pyramid</code></li>
   <li>Click <strong>Save</strong>.</li>
  </ul></li>
 <li>Right-click the new database and select <strong>Restore</strong>.</li>
 <li>Select the backup file created in Step 10.</li>
 <li>Click <strong>Restore</strong> and monitor for errors.</li>
 <li>Verify that the restore completes successfully.</li>
</ol>
<h4>Verify the Restore</h4>
<ul>
 <li>Right-click the restored database and select <strong>Properties → Statistics</strong>.</li>
 <li>Verify that its size is similar to the original database.</li>
 <li>Expand the database and verify that the expected tables exist.</li>
</ul>
<h3>Step 13: Update Pyramid Configuration on the Primary Server</h3>
<ol>
 <li>Navigate to your Pyramid installation directory.</li>
 <li>Open <code>config.ini</code>.</li>
 <li>Locate the <code>[data]</code> section.</li>
 <li>Change <strong>only</strong> the port: <pre class="language-none"><code class="language-none">port=5432</code></pre></li>
</ol>
<div style="border-left:5px solid #5bc0de; background:#f2f9fc; padding:14px 18px; margin:18px 0;"><strong>Do not change the other database settings.</strong>
 <ul style="margin-bottom:0;">
  <li><code>username=pyramid</code> — unchanged</li>
  <li><code>password=</code> — unchanged</li>
  <li><code>database=</code> — unchanged</li>
  <li><code>dbhost=</code> — unchanged</li>
  <li><code>dbssl=</code> — unchanged</li>
 </ul>
</div>
<ol start="5">
 <li>Save the file.</li>
</ol>
<h3>Step 14: Update Additional Servers</h3>
<p>If you have multiple Pyramid servers in your deployment:</p>
<ol>
 <li>On each additional Pyramid server: 
  <ul>
   <li>Connect to the server.</li>
   <li>Locate its Pyramid installation directory.</li>
   <li>Back up <code>config.ini</code>.</li>
   <li>Open <code>config.ini</code>.</li>
   <li>Locate the <code>[data]</code> section.</li>
   <li>Change only the port to <code>5432</code>.</li>
   <li>Do not change the username, password, database name, or <code>dbhost</code>.</li>
   <li>Save the file.</li>
  </ul></li>
 <li>Stop all Pyramid services on each secondary server, except <code>PyramidPostgreSQL</code>.</li>
 <li>Restart the required Pyramid services on each secondary server.</li>
</ol>
<h3>Step 15: Restart Services on the Primary Server</h3>
<ol>
 <li>Open <code>services.msc</code>.</li>
 <li>Start all Pyramid services except <code>PyramidPostgreSQL</code>. 
  <ul>
   <li>Right-click each service and select <strong>Start</strong>.</li>
   <li>Wait approximately 3–5 seconds between each service start.</li>
  </ul></li>
 <li>Wait approximately 60–90 seconds for all services to fully initialize.</li>
</ol>
<h3>Step 16: Update the Data Source Connection in Pyramid Admin Hub</h3>
<ol>
 <li>Access Pyramid Admin Hub. Allow 1–2 minutes for services to fully start.</li>
 <li>Navigate to <strong>Admin → Data → Data Source</strong>.</li>
 <li>Locate and select <strong>Local PG</strong>.</li>
 <li>In the <strong>Connection</strong> section, change the port from <code>12130</code> to <code>5432</code>.</li>
 <li>Click <strong>Test</strong> to verify connectivity.</li>
 <li>If the test succeeds, click <strong>Apply</strong>.</li>
 <li>Restart the remaining Pyramid services if prompted.</li>
</ol>
<h3>Step 18: Upgrade to Pyramid 2025.11 or Later</h3>
<div style="border-left:5px solid #5cb85c; background:#f2faf2; padding:16px 20px; margin:20px 0;">
 <p style="margin:0;"><strong>Migration complete.</strong> Once you have verified that everything is working properly, you can safely upgrade to <strong>Pyramid 2025.11 or any later version</strong>.&nbsp;</p>
</div>
<p>The PostgreSQL 9.6 to PostgreSQL 18 database migration is a <strong>prerequisite</strong> for upgrading to Pyramid 2025.11 or later.</p>
<p><strong>Automate the process</strong></p>
<p>Instead of doing all the above steps manually, you can use the attached Power shell script "Migrate-PyramidPostgres.ps1.zip" . To use the Power shell script attached to this article, <strong><u>first follow all steps 1-2.</u></strong></p>
<p>Then download the attached Power shell script , unzip it and run as Administrator and it will do all the manually steps for you excluding steps 1-2.</p>]]></description>
          <pubDate>Tue, 08 Sep 2026 06:58:01 +0000</pubDate>
          <guid>https://community.pyramidanalytics.com/t/m1yjmxm/migrating-the-pyramid-database-from-postgresql-9-6-to-postgresql-18-windows</guid>
          <dc:creator>Daniel</dc:creator>
        </item>

      <item>
          <title>How to Pull Satellite Images From Docker Hub on an Offline Kubernetes Deployment</title>
          <link>https://community.pyramidanalytics.com/t/h7ygdzn/how-to-pull-satellite-images-from-docker-hub-on-an-offline-kubernetes-deployment</link>
          <description><![CDATA[<p>Starting with Pyramid version 2025.02.222, the cluster infrastructure has been updated. The Runtime Engine (RTE) and Task Engine (TE) now utilize separate Satellite pods rather than running inside their respective containers.</p>
<p>For clusters with internet access, the RTE and TE deployments pull these Satellite images automatically without requiring any changes to your YAML files or Helm charts.</p>
<p>If your cluster's internet access is blocked, you must manually pull these images to your internal registry.<br> The images can be found in this registry:<br> <a href="https://hub.docker.com/r/pyramidanalytics/satellite/tags" rel="nofollow noopener noreferrer" target="_blank">https://hub.docker.com/r/pyramidanalytics/satellite/tags</a></p>
<p>To allow the pods to successfully pull the Satellite images from your internal registry, you will need to apply the following configuration steps based on your deployment method.</p>
<h4>Option 1: Using YAML</h4>
<p>In the runtime-service and task-service&nbsp;deployment files, locate the <code>env</code> block and append the <code>PYRAMID_DOCKER_REGISTRY</code> variable:</p>
<p>YAML</p>
<pre class="language-none"><code class="language-none">env:
&nbsp;&nbsp;-&nbsp;name:&nbsp;PYRAMID_DOCKER_REGISTRY
&nbsp;&nbsp;&nbsp;&nbsp;value:&nbsp;"&lt;your.registry.address&gt;"</code></pre>
<p>(Note: Replace <code>&lt;your.registry.address&gt;</code> with the actual URL of your internal registry).</p>
<p style="text-align:left"><img alt="" class="fb-img" src="https://s3-us-west-2.amazonaws.com/media.forumbee.com/i/92ce5300-c14d-4703-8a49-89f4e922052c/h/547.png" style="" width="530"></p>
<p>&nbsp;</p>
<h4>Option 2: Using Helm</h4>
<p>If you are managing your deployments via Helm, ensure your registry is defined in your <code>values.yaml</code> file (e.g., as <code>repo</code>).</p>
<p>Then, update the <code>rte_deployment</code> and <code>te_deployment</code> templates by adding the following to the <code>env</code> block:</p>
<p>YAML</p>
<pre class="language-none"><code class="language-none">env:
&nbsp;&nbsp;-&nbsp;name:&nbsp;PYRAMID_DOCKER_REGISTRY
&nbsp;&nbsp;&nbsp;&nbsp;value:&nbsp;"{{&nbsp;.Values.repo&nbsp;}}"</code></pre>]]></description>
          <pubDate>Mon, 01 Jun 2026 14:31:02 +0000</pubDate>
          <guid>https://community.pyramidanalytics.com/t/h7ygdzn/how-to-pull-satellite-images-from-docker-hub-on-an-offline-kubernetes-deployment</guid>
          <dc:creator>Omri Zach</dc:creator>
        </item>

      <item>
          <title>How to check for missing print libraries in Offline Installations for RED HAT 9 ONLY</title>
          <link>https://community.pyramidanalytics.com/t/x2ykg37/how-to-check-for-missing-print-libraries-in-offline-installations-for-red-hat-9-only</link>
          <description><![CDATA[<p>To install Pyramid in an offline environment, you may need to manually install certain libraries that are usually downloaded during the installation process.</p>
<p>Follow the steps below to complete this task.</p>
<p>Please note that the steps are written to be used with Red Hat 9 and may differ for other Linux versions.</p>
<p>&nbsp;</p>
<ol>
 <li><h3><strong><u>Run the following on a server that can connect to the internet:</u></strong></h3> <pre class="language-shell"><code class="language-shell">sudo&nbsp;subscription-manager&nbsp;repos&nbsp;--enable&nbsp;codeready-builder-for-rhel-9-$(arch)-rpms
sudo&nbsp;dnf&nbsp;install&nbsp;-y&nbsp;https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm&nbsp;-y</code></pre></li>
 <li><p><u><strong>Download the rpm to print-packages folder</strong></u></p> <pre class="language-shell"><code class="language-shell">sudo&nbsp;dnf&nbsp;install&nbsp;--downloadonly&nbsp;--downloaddir&nbsp;print-packages&nbsp;pango.x86_64&nbsp;libXcomposite.x86_64&nbsp;libXcursor.x86_64&nbsp;libXdamage.x86_64&nbsp;libXext.x86_64&nbsp;libXi.x86_64&nbsp;libXtst.x86_64&nbsp;cups-libs.x86_64&nbsp;libXScrnSaver.x86_64&nbsp;libXrandr.x86_64&nbsp;GConf2.x86_64&nbsp;alsa-lib.x86_64&nbsp;atk.x86_64&nbsp;gtk3.x86_64&nbsp;xorg-x11-fonts-100dpi&nbsp;xorg-x11-fonts-75dpi&nbsp;xorg-x11-utils&nbsp;xorg-x11-fonts-cyrillic&nbsp;xorg-x11-fonts-Type1&nbsp;xorg-x11-fonts-misc&nbsp;libnss3.so&nbsp;libgbm&nbsp;libxshmfence&nbsp;google-noto-sans-cjk-ttc-fonts&nbsp;</code></pre></li>
 <li><u><strong>Copy all rpm from online machine to the offline</strong></u><br> &nbsp;</li>
 <li><p><strong><u>Install all the rpm's inside that folder</u></strong></p> <pre class="language-shell"><code class="language-shell">sudo&nbsp;rpm&nbsp;-ivh&nbsp;print-packages/*.rpm</code></pre></li>
 <li><p><u><strong>5. Make <em>printerpyramid</em> and </strong><em><strong>chrome&nbsp;</strong></em><strong>executable&nbsp;in core file</strong></u></p> <pre class="language-shell"><code class="language-shell">chmod&nbsp;+x&nbsp;/opt/Pyramid/core/prt/puppet/chromium/chrome
chmod&nbsp;+x&nbsp;/opt/Pyramid/core/prt/puppet/pyramidPrinter</code></pre> <p>&nbsp;</p></li>
 <li><u><strong>Check if the printer works</strong></u> <pre class="language-shell"><code class="language-shell">/opt/Pyramid/core/prt/puppet/pyramidPrinter&nbsp;--port=10012&nbsp;--proxy="{\"enableProxyServer\":false,\"useCredentials\":false,\"bypassProxyServerLocal\":false,\"proxyServer\":{\"address\":\"\",\"port\":0},\"loginUser\":{\"inheritanceType\":\"LoginUser\",\"name\":\"\",\"password\":\"\"}}"&nbsp;--localProxyPort=15000&nbsp;--tabs=4&nbsp;--uuid=aacb720a-7e4e-4989-bf76-6e81c2964a17</code></pre> <p>&nbsp;</p></li>
</ol>]]></description>
          <pubDate>Tue, 17 Jun 2025 02:05:10 +0000</pubDate>
          <guid>https://community.pyramidanalytics.com/t/x2ykg37/how-to-check-for-missing-print-libraries-in-offline-installations-for-red-hat-9-only</guid>
          <dc:creator>Carey Doughty</dc:creator>
        </item>

      <item>
          <title>Run Pyramid under a web path instead of the root</title>
          <link>https://community.pyramidanalytics.com/t/83yfxnl/run-pyramid-under-a-web-path-instead-of-the-root</link>
          <description><![CDATA[<h2>Background</h2>
<p>Running Pyramid from a path is sometimes required (e.g., https:/<code>/mysite.com/pyramid</code>) instead of the root (e.g. https:/<code>/mysite.com)</code>. In embedding scenarios, this allows Pyramid to run under the same web domain instead of a subdomain - facilitating easier integrations and simplified authentication/security operations.</p>
<h3><strong>Prerequisites</strong></h3>
<ul>
 <li>This applies <strong>only</strong> to Pyramid <strong>2023.16.083 / 2024.01.013</strong> and later.</li>
 <li>Earlier versions <strong>do not support this feature</strong>.</li>
</ul>
<h3><strong>1. Configuring Pyramid to Use a Virtual Directory</strong></h3>
<ol>
 <li>Log in to <strong>Pyramid Admin</strong>.</li>
 <li>Navigate to:<br> <strong>Services</strong> → <strong>Web Services</strong> → <strong>Web Settings</strong>.</li>
 <li>Enable <strong>"Deploy via&nbsp;Virtual Directory"</strong>.</li>
 <li>Set your desired virtual directory/path name, e.g., <strong><code>/pyramid</code></strong>.</li>
 <li>Click <strong>Apply</strong> and restart all Pyramid web servers. <p style="text-align:left"><img alt="" class="fb-img" src="https://s3-us-west-2.amazonaws.com/media.forumbee.com/i/4420a68d-b321-4624-aaf0-a8f4fbf60b7f/h/547.jpg" style="" width="1919"></p> &nbsp;Now, users can access Pyramid at:</li>
</ol>
<p><span class="pen4"><code><a rev="auto" rel="nofollow noopener noreferrer" href="http://localhost:8181/pyramid" target="_blank">http://localhost:8181/pyramid</a></code></span></p>
<h4><strong>Important Notes:</strong></h4>
<p>Pyramid may&nbsp;<strong>still be accessible at the root (<code>/</code>)</strong> by default. This is because Pyramid assumes that a <strong>load balancer or reverse proxy</strong> will manage access to <code>/pyramid</code>. If you only want users to access Pyramid at <code>/pyramid</code>, configure your <strong>load balancer</strong> accordingly and block access.</p>
<hr>
<p><strong>The next sections explain how to facilitate the virtual path for Pyramid using various load balancing / reverse proxy technologies.</strong></p>
<hr>
<h3><strong>2. Configuring AWS Load Balancer to Serve Pyramid Under <code>/pyramid</code></strong></h3>
<p><em>(Assumes you already have an AWS Load Balancer set up. If not, see <a href="/t/edit/83yfxdl" rel="nofollow noopener noreferrer">this guide</a> for setup instructions.)</em></p>
<h4><strong>Steps:</strong></h4>
<ol>
 <li>Go to <strong>AWS Console</strong> → <strong>EC2</strong> → <strong>Load Balancers</strong>.</li>
 <li>Select the <strong>Load Balancer</strong> that will serve Pyramid.</li>
 <li>Click <strong>"Add Rule"</strong>.</li>
</ol>
<h4><strong>Rule Configuration:</strong></h4>
<ul>
 <li><strong>Name:</strong> <code>pyramid</code></li>
 <li><strong>Condition Type:</strong> <code>Path</code></li>
 <li><strong>Path:</strong> <code>/pyramid*</code> ( use the path you setup for the virtual directory in the Pyramid admin)</li>
 <li><strong>Action:</strong> <code>Forward to target group</code></li>
 <li><strong>Target Group:</strong> Choose the group that points to your Pyramid web servers (port <code>8181</code>).</li>
</ul>
<h4><strong>Setting Rule Priority</strong></h4>
<ul>
 <li>The rule <strong>must have a lower number</strong> (higher priority) than any rule that routes traffic to <code>/</code>.</li>
 <li>Example: If there is a rule for <code>/</code> that sends traffic to another website, your <code>/pyramid</code> rule should have <strong>a lower number than that rule</strong>.</li>
 <li>This ensures <code>/pyramid</code> traffic is forwarded correctly and doesn't get overridden.</li>
</ul>
<h4><strong>Example Rule Evaluation Order:</strong></h4>
<p style="text-align:left"><img alt="" class="fb-img" src="https://s3-us-west-2.amazonaws.com/media.forumbee.com/i/ec44eb7f-584b-43cd-baae-b27160743eb5/h/547.jpg" style="" width="749"></p>
<p>Now, users browsing to <code>/pyramid</code> will be forwarded to Pyramid <strong>before</strong> the root rule is applied.</p>
<hr>
<h3><strong>3. </strong>Configuring IIS to Serve Pyramid Under<strong> </strong>to Serve Pyramid Under <code>/pyramid</code></h3>
<h4><strong>Step 1: Open IIS Manager</strong></h4>
<ol>
 <li>Open <strong>IIS Manager</strong> (<code>inetmgr</code> from the Run dialog).</li>
 <li>In the <strong>Connections</strong> panel, click on your site (e.g., <code>Default Web Site</code>).</li>
</ol>
<h4><strong>Step 2: Configure URL Rewrite Rules</strong></h4>
<ol>
 <li>Double-click <strong>"URL Rewrite"</strong> in the middle panel.</li>
 <li>Click <strong>"Add Rules…"</strong> in the right panel.</li>
 <li>Select <strong>"Blank Rule"</strong> under <strong>Inbound Rules</strong> and click <strong>OK</strong>.</li>
</ol>
<h4><strong>Step 2.1: Create Rewrite Rule for <code>/pyramid</code></strong></h4>
<ol>
 <li>Enter <strong>"Rewrite Pyramid Path"</strong> as the rule name.</li>
 <li>Under <strong>Conditions</strong>, click <strong>"Match URL"</strong>: 
  <ul>
   <li>Set <strong>Requested URL</strong> to <strong>Matches the Pattern</strong></li>
   <li>Use the <strong>Regular Expressions</strong> option.</li>
   <li>In the <strong>Pattern</strong> field, enter: <pre class="language-none"><code class="language-none">^pyramid(/.*)?$</code></pre></li>
  </ul></li>
 <li>Scroll to <strong>Action</strong> and set: 
  <ul>
   <li><strong>Action Type</strong>: <code>Rewrite</code></li>
   <li><strong>Rewrite URL</strong>: <pre class="language-none"><code class="language-none">http://localhost:8181/pyramid{R:1}</code></pre></li>
   <li><strong>Append Query String</strong>: <code>Yes</code></li>
   <li><strong>Stop Processing of Subsequent Rules</strong>: <code>Yes</code></li>
  </ul></li>
 <li>Click <strong>Apply</strong> in the right panel.</li>
</ol>
<h4><strong>Step 3: Restart IIS and Test</strong></h4>
<ol>
 <li>Click <strong>Restart</strong> on the right panel under <strong>Manage Server</strong>.</li>
 <li>Open a browser and visit: <pre class="language-none"><code class="language-none">http://yourserver/pyramid</code></pre> It should correctly forward to <code><a rev="auto" rel="nofollow noopener noreferrer" href="http://localhost:8181/pyramid" target="_blank">http://localhost:8181/pyramid</a></code>.<br> <br><strong>Access the main site at:</strong> <pre class="language-none"><code class="language-none">http://yourserver/</code></pre> Any request that is <strong>not for <code>/pyramid</code></strong> will automatically be handled by the main site, so no additional rules are needed</li>
</ol>
<p>Now, Pyramid should be accessible at <code>/pyramid</code> via IIS.&nbsp;</p>
<p>When browsing to the main site i.e <a rev="auto" rel="nofollow noopener noreferrer" href="http://mysite.com" target="_blank">mysite.com</a> you will get the site</p>
<h3><strong>3. </strong>Configuring Nginx to Serve Pyramid Under&nbsp;<code>/pyramid</code></h3>
<p><strong>This process is identical to the one described <a href="/t/60ylh92/how-to-configure-nginx-to-act-as-a-reverse-proxy-to-support-ssl" rel="nofollow noopener noreferrer">here</a>; however, in step 3, use the below configuration instead</strong></p>
<p>&nbsp;</p>
<pre class="language-none"><code class="language-none">server&nbsp;{
&nbsp;&nbsp;listen&nbsp;443&nbsp;ssl;
&nbsp;&nbsp;&nbsp;&nbsp;ssl_certificate&nbsp;/etc/nginx/certs/chain.pem;
&nbsp;&nbsp;&nbsp;&nbsp;ssl_certificate_key&nbsp;/etc/nginx/certs/privkey.pem;
&nbsp;&nbsp;&nbsp;&nbsp;server_name&nbsp;yourServername.mycompany.com;
&nbsp;&nbsp;&nbsp;&nbsp;access_log&nbsp;/var/log/nginx/nginx.vhost.access.log;
&nbsp;&nbsp;&nbsp;&nbsp;error_log&nbsp;/var/log/nginx/nginx.vhost.error.log;
&nbsp;&nbsp;&nbsp;&nbsp;client_max_body_size&nbsp;300M;
&nbsp;&nbsp;&nbsp;&nbsp;location&nbsp;/&nbsp;{
proxy_pass&nbsp;http://localhost:8181/pyramid;
&nbsp;&nbsp;&nbsp;&nbsp;}
location&nbsp;/events&nbsp;{
proxy_pass&nbsp;http://localhost:8181/pyramid/events;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;proxy_http_version&nbsp;1.1;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;proxy_set_header&nbsp;Upgrade&nbsp;$http_upgrade;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;proxy_set_header&nbsp;Connection&nbsp;"upgrade";
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
}</code></pre>]]></description>
          <pubDate>Wed, 26 Mar 2025 14:30:00 +0000</pubDate>
          <guid>https://community.pyramidanalytics.com/t/83yfxnl/run-pyramid-under-a-web-path-instead-of-the-root</guid>
          <dc:creator>Daniel</dc:creator>
        </item>

      <item>
          <title>Terminate SSL on AWS Amazon Load Balancers (ALB)</title>
          <link>https://community.pyramidanalytics.com/t/83yfxdl/terminate-ssl-on-aws-amazon-load-balancers-alb</link>
          <description><![CDATA[<h2><strong>Background</strong></h2>
<p>AWS ALB (and possibly other load balancers/reverse proxies) terminate SSL at the load balancer level and communicate with backend servers (Pyramid) over HTTP. The <code>"X-Forwarded-Proto"</code> header ensures that Pyramid correctly identifies requests as <strong>HTTPS</strong> and responds accordingly. <strong>For most reverse proxies / load balancers this setting is NOT needed as they know how to handle the SSL termination correctly.&nbsp;</strong></p>
<h2>Prerequisites</h2>
<ul>
 <li>This guide applies <strong>only</strong> to <strong>Pyramid 2023.16.083 / 2024.01.013 and later </strong>.</li>
 <li>Earlier versions <strong>do not</strong> support the <code>"X-Forwarded-Proto"</code> header.</li>
</ul>
<hr>
<h2>1. Enabling "X-Forwarded-Proto" in Pyramid</h2>
<p>Pyramid must be configured to recognize HTTPS requests forwarded by the AWS Application Load Balancer (ALB). This is done using the <code>"X-Forwarded-Proto"</code> header.</p>
<h3>Steps:</h3>
<ol class="steps">
 <li>Log in to <strong>Pyramid Admin</strong>.</li>
 <li>Navigate to:<br> <strong>Services</strong> → <strong>Web Services</strong> → <strong>Web Settings</strong>.</li>
 <li>Check the box for <strong>"Proxy SSL Handling (X-Forwarded-Proto)"</strong>.</li>
 <li>Click <strong>Apply</strong>.</li>
 <li><strong>Restart all Pyramid web servers</strong> for the change to take effect. <p style="text-align:left"><img alt="" class="fb-img" src="https://s3-us-west-2.amazonaws.com/media.forumbee.com/i/8218b8ed-911f-4ea7-8670-d705353b9e8a/h/547.jpg" style="" width="1919"></p></li>
</ol>
<hr>
<h2>2. Configuring an AWS Application Load Balancer (ALB)</h2>
<blockquote>
 <div class="note"><strong>Note:</strong> AWS configurations may change over time. Always refer to the latest <a href="https://docs.aws.amazon.com/elasticloadbalancing/latest/application/introduction.html" rel="nofollow noopener noreferrer" target="_blank">AWS documentation</a> for updates.
 </div>
</blockquote>
<h3>Step 1: Create an Application Load Balancer</h3>
<ol class="steps">
 <li>Open the <strong>AWS Console</strong>.</li>
 <li>Go to <strong>EC2</strong> → <strong>Load Balancers</strong>.</li>
 <li>Click <strong>"Create Load Balancer"</strong> and select <strong>Application Load Balancer</strong>.</li>
</ol>
<h4>Basic Configuration:</h4>
<table>
 <tbody>
  <tr>
   <th>Setting</th>
   <th>Value</th>
  </tr>
  <tr>
   <td><strong>Load Balancer Name</strong></td>
   <td>Choose a name (e.g., <code>Pyramid-ALB</code>)</td>
  </tr>
  <tr>
   <td><strong>Scheme</strong></td>
   <td>Internet-facing (or Internal if needed)</td>
  </tr>
  <tr>
   <td><strong>IP Address Type</strong></td>
   <td>IPv4 (or Dualstack for IPv6 support)</td>
  </tr>
 </tbody>
</table>
<h4>Network Mapping:</h4>
<table>
 <tbody>
  <tr>
   <th>Setting</th>
   <th>Value</th>
  </tr>
  <tr>
   <td><strong>VPC</strong></td>
   <td>Select the VPC where Pyramid is running</td>
  </tr>
  <tr>
   <td><strong>Availability Zones &amp; Subnets</strong></td>
   <td>Choose based on your infrastructure</td>
  </tr>
 </tbody>
</table>
<h4>Security Groups:</h4>
<ul>
 <li>Select or create a security group that allows inbound <strong>HTTPS (443)</strong> traffic.</li>
</ul>
<hr>
<h3>Step 2: Configure Listeners &amp; Routing</h3>
<table>
 <tbody>
  <tr>
   <th>Setting</th>
   <th>Value</th>
  </tr>
  <tr>
   <td><strong>Protocol</strong></td>
   <td>HTTPS</td>
  </tr>
  <tr>
   <td><strong>Port</strong></td>
   <td>443</td>
  </tr>
  <tr>
   <td><strong>Default Action</strong></td>
   <td>Forward requests to a <strong>target group</strong> (if none exists, create one in the next step).</td>
  </tr>
 </tbody>
</table>
<hr>
<h3>Step 3: Create a Target Group</h3>
<ol class="steps">
 <li>Click <strong>"Create Target Group"</strong>.</li>
 <li>Select <strong>"Instances"</strong> as the <strong>Target Type</strong>.</li>
 <li>Configure the settings:</li>
</ol>
<table>
 <tbody>
  <tr>
   <th>Setting</th>
   <th>Value</th>
  </tr>
  <tr>
   <td><strong>Target Group Name</strong></td>
   <td>Pyramid</td>
  </tr>
  <tr>
   <td><strong>Protocol</strong></td>
   <td>HTTP</td>
  </tr>
  <tr>
   <td><strong>Port</strong></td>
   <td>8181 (default Pyramid web port)</td>
  </tr>
  <tr>
   <td><strong>IP Address Type</strong></td>
   <td>Choose based on your setup</td>
  </tr>
  <tr>
   <td><strong>VPC</strong></td>
   <td>Select the Pyramid VPC</td>
  </tr>
 </tbody>
</table>
<h4>Health Check Configuration:</h4>
<table>
 <tbody>
  <tr>
   <th>Setting</th>
   <th>Value</th>
  </tr>
  <tr>
   <td><strong>Health Check Path</strong></td>
   <td><code>/login/login.html</code></td>
  </tr>
  <tr>
   <td><strong>Protocol</strong></td>
   <td>HTTP</td>
  </tr>
  <tr>
   <td><strong>Port</strong></td>
   <td>Traffic port (or <code>8181</code>)</td>
  </tr>
  <tr>
   <td><strong>Healthy Threshold</strong></td>
   <td>Default recommended</td>
  </tr>
  <tr>
   <td><strong>Unhealthy Threshold</strong></td>
   <td>Default recommended</td>
  </tr>
  <tr>
   <td><strong>Timeout</strong></td>
   <td>Default recommended</td>
  </tr>
  <tr>
   <td><strong>Interval</strong></td>
   <td>Default recommended</td>
  </tr>
 </tbody>
</table>
<ol class="steps" start="4">
 <li>Click <strong>Next</strong> and <strong>register targets</strong>: 
  <ul>
   <li>Select the EC2 instances running Pyramid.</li>
   <li>Ensure the port is set to <strong>8181</strong>.</li>
   <li>Click <strong>"Include as pending below"</strong>, then <strong>"Create Target Group"</strong>.</li>
  </ul></li>
</ol>
<hr>
<h3>Step 4: Assign the Target Group to the Load Balancer</h3>
<ol class="steps">
 <li>Return to the <strong>"Listeners &amp; Routing"</strong> section of the ALB setup.</li>
 <li>Under <strong>Default Action</strong>, select <strong>"Forward to Target Group"</strong>.</li>
 <li>Choose the <strong>Pyramid target group</strong> created earlier.</li>
</ol>
<hr>
<h3>Step 5: Configure SSL/TLS Certificate</h3>
<ol class="steps">
 <li>Under <strong>Secure Listener Settings</strong>, select <strong>"Default SSL/TLS Certificate"</strong>.</li>
 <li>Upload or select an existing <strong>SSL certificate</strong>.</li>
 <li><em>(Optional)</em> Configure additional security settings based on your company's policies.</li>
</ol>
<hr>
<h2>3. Final Configuration &amp; Testing</h2>
<h3>Modify ALB Listener Rules (Optional)</h3>
<p>If needed, edit the listener rules:</p>
<ol class="steps">
 <li>Go to <strong>EC2</strong> → <strong>Load Balancers</strong>.</li>
 <li>Select the <strong>ALB</strong> and navigate to <strong>Listeners → HTTPS:443 → Edit Default Rule</strong>.</li>
 <li>Ensure the action is <strong>"Forward to Target Groups"</strong> and the correct <strong>Pyramid target group</strong> is selected.</li>
</ol>
<hr>
<h3>1. Increase ALB Idle Timeout</h3>
<table>
 <tbody>
  <tr>
   <th>Setting</th>
   <th>Value</th>
  </tr>
  <tr>
   <td><strong>Default</strong></td>
   <td>60 seconds</td>
  </tr>
  <tr>
   <td><strong>Recommended</strong></td>
   <td>600 seconds</td>
  </tr>
 </tbody>
</table>
<h4>Steps:</h4>
<ol class="steps">
 <li>Go to <strong>EC2 Dashboard</strong> → <strong>Load Balancers</strong>.</li>
 <li>Select your <strong>Application Load Balancer (ALB)</strong>.</li>
 <li>Go to the <strong>Attributes</strong> tab.</li>
 <li>Click <strong>Edit</strong>.</li>
 <li>Set <strong>Idle Timeout</strong> to <strong>600 seconds</strong>.</li>
 <li>Click <strong>Save</strong>.</li>
</ol>
<hr>
<h3>2. Adjust Target Group Health Check Settings</h3>
<p>Increase timeout &amp; interval to prevent premature failures.</p>
<table>
 <tbody>
  <tr>
   <th>Setting</th>
   <th>Recommended Value</th>
  </tr>
  <tr>
   <td><strong>Timeout</strong></td>
   <td>10 seconds</td>
  </tr>
  <tr>
   <td><strong>Interval</strong></td>
   <td>30 seconds</td>
  </tr>
  <tr>
   <td><strong>Unhealthy Threshold</strong></td>
   <td>5</td>
  </tr>
  <tr>
   <td><strong>Healthy Threshold</strong></td>
   <td>3</td>
  </tr>
 </tbody>
</table>
<h4>Steps:</h4>
<ol class="steps">
 <li>Go to <strong>EC2 Dashboard</strong> → <strong>Target Groups</strong>.</li>
 <li>Select your <strong>Target Group</strong>.</li>
 <li>Go to the <strong>Health Checks</strong> tab → Click <strong>Edit</strong>.</li>
 <li>Apply the recommended values above.</li>
 <li>Click <strong>Save</strong>.</li>
</ol>
<hr>
<h3>Update Security &amp; DNS Settings</h3>
<ul>
 <li><strong>Security Group:</strong> Ensure inbound port <strong>443</strong> is open to allow user connections.</li>
 <li><strong>DNS Configuration:</strong> Update external <strong>DNS records</strong> to point to the ALB DNS name.</li>
</ul>
<hr>
<h2>4. Summary</h2>
<p class="check">✅ <strong>Pyramid is now configured</strong> to recognize HTTPS requests using <code>"X-Forwarded-Proto"</code>.</p>
<p class="check">✅ The <strong>AWS Load Balancer terminates SSL</strong> and forwards requests to Pyramid over HTTP.</p>
<p class="check">✅ Users can securely access Pyramid at <strong><code><a rev="auto" rel="nofollow noopener noreferrer" href="https://your-domain.com" target="_blank">https://your-domain.com</a></code></strong> via the ALB.</p>
<p>For further assistance, refer to the <a href="https://docs.aws.amazon.com/elasticloadbalancing/latest/application/introduction.html" rel="nofollow noopener noreferrer" target="_blank"><strong>AWS Load Balancer Documentation</strong></a> or contact <strong>AWS Support</strong>.</p>]]></description>
          <pubDate>Wed, 26 Mar 2025 14:20:27 +0000</pubDate>
          <guid>https://community.pyramidanalytics.com/t/83yfxdl/terminate-ssl-on-aws-amazon-load-balancers-alb</guid>
          <dc:creator>Daniel</dc:creator>
        </item>

      <item>
          <title>Discontinued support for EOL operating systems and databases 2024</title>
          <link>https://community.pyramidanalytics.com/t/60y8mn5/discontinued-support-for-eol-operating-systems-and-databases-2024</link>
          <description><![CDATA[<p><img alt="" class="fb-img" src="https://s3-us-west-2.amazonaws.com/media.forumbee.com/i/fb0a2c22-15b8-4c41-a6d6-973b498cd4ea/h/547.png" style="float:left" width="58"></p>
<p>&nbsp;Various operating systems and technologies are out of support or nearing end of life (EOL). In tandem, Pyramid will start to drop official support for them.</p>
<h2>Operating Systems&nbsp;</h2>
<ul>
 <li><strong>Windows 2012</strong>&nbsp;reached end of life in&nbsp;October 10, 2023. Consequently, the final version of Pyramid that will support&nbsp;Windows 2012&nbsp;will be Pyramid 2023.12 (not yet released). Customers should already be making plans to migrate off this&nbsp;Windows version.&nbsp;</li>
 <li><strong>Red Hat Enterprise Linux 7</strong> and <strong>CentOS 7</strong>&nbsp;are set to be out of support in&nbsp;June 2024. While we plan to support them&nbsp;beyond their&nbsp;EOL date, customers should start planning to migrate off them.&nbsp;</li>
 <li><strong>Ubuntu 16 and 18 </strong>are both out of standard support.&nbsp;While we plan to support them&nbsp;beyond their support dates until their official EOL dates, customers should start planning to migrate off them.&nbsp;</li>
</ul>
<p>We anticipate adding support for newer operating systems in the next few releases, this includes Red Hat Enterprise Linux 9, Oracle Linux 9, Ubuntu 24 and Amazon 2023.</p>
<h2>Repository Databases</h2>
<p>The discontinued support for these database engines relates to them as a repository, <strong>NOT as analytical data sources.&nbsp;</strong></p>
<p><strong>MS SQL Server</strong></p>
<ul>
 <li><strong>SQL 2012&nbsp;</strong>reached end of life in Jul&nbsp;12th&nbsp;2022.&nbsp;Consequently, the final version of Pyramid that will support&nbsp;SQL 2012&nbsp;will be Pyramid 2023.12 . Customers should already be making plans to migrate off this&nbsp;SQL version.</li>
 <li><strong>SQL 2014&nbsp;</strong>will reach end of life later this year. While we plan to support it beyond its EOL date, customers should start planning to migrate off it as well.&nbsp;</li>
</ul>
<p><strong>PostgreSQL</strong></p>
<ul>
 <li><strong>Postgres SQL 11&nbsp;</strong>reached end of life in November 9th&nbsp;2023.&nbsp;Consequently, the final version of Pyramid that will support&nbsp;Postgres SQL will be Pyramid 2023.12. Customers should already be making plans to migrate off this&nbsp;Postgres SQL version.</li>
 <li><strong>Postgres SQL 12&nbsp;</strong>will reach end of life later this year.&nbsp;While we plan to support it beyond its EOL date, customers should start planning to migrate off it as well.&nbsp;</li>
</ul>
<p><strong>Oracle Database</strong></p>
<ul>
 <li><strong>Oracle 10c&nbsp;</strong>reached end of life in June 30th&nbsp;2021.&nbsp;Consequently, the final version of Pyramid that will support&nbsp;Oracle 10c database will be Pyramid 2023.12. Customers should already be making plans to migrate off this&nbsp;Oracle version.</li>
</ul>]]></description>
          <pubDate>Thu, 14 Mar 2024 11:16:00 +0000</pubDate>
          <guid>https://community.pyramidanalytics.com/t/60y8mn5/discontinued-support-for-eol-operating-systems-and-databases-2024</guid>
          <dc:creator>Daniel</dc:creator>
        </item>

      <item>
          <title>How to Upgrade a Pyramid Kubernetes Cluster</title>
          <link>https://community.pyramidanalytics.com/t/x2h9rc5/how-to-upgrade-a-pyramid-kubernetes-cluster</link>
          <description><![CDATA[<p><span class="pen1"><b>Before upgrading your production install of Pyramid, it is imperative that you upgrade a test install&nbsp;of Pyramid based on a copy of your production database. </b></span><br> <span class="pen1"><strong>This step is crucial to guarantee that all content operates correctly before upgrading.<br> Upgrading without testing in a separate environment is strongly discouraged and not supported by our team.</strong></span></p>
<p>Before upgrading the cluster, <strong>take a full backup of the Pyramid repository</strong>.</p>
<p>Please&nbsp;navigate on the customer's portal to the <a href="https://customers.pyramidanalytics.com/kubernetes/" rel="nofollow noopener noreferrer" target="_blank">Pyramid&nbsp;Kubernetes Cluster configurator page.</a></p>
<p>&nbsp;</p>
<p>Select a version and configure the number of pods for each Pyramid service.<br> Ensure that you maintain the previous Port and Persistent storage settings during the upgrade.</p>
<p style="text-align:left"><img alt="" class="fb-img" src="https://s3-us-west-2.amazonaws.com/media.forumbee.com/i/1c9fd19b-3e6e-41bf-91b9-5f54889d76c9/h/547.png" style="" width="686"></p>
<p>After proceeding to the next page, you can skip steps 1 and 2 as there is no need to repeat them. However, make sure to obtain the YAML file in step 3.</p>
<p style="text-align:left"><img alt="" class="fb-img" src="https://s3-us-west-2.amazonaws.com/media.forumbee.com/i/71f9966f-6a44-432f-95e1-018b241cdfaa/h/547.png" style="" width="811"></p>
<p>Before deploying the YAML, <strong><u>ensure</u></strong>&nbsp;the cluster hosts have enough resources (CPU and RAM).</p>
<p>To deploy the YAML file, just run the command below(step 4):</p>
<pre class="language-none"><code class="language-none">kubectl&nbsp;apply&nbsp;-f&nbsp;pyramid-analytics-config.yaml</code></pre>
<p>Please note that the Kubernetes engine will initiate all the new pods before terminating the old ones.<br> This process may consume more resources until Kubernetes has terminated the old pods. However, it&nbsp;minimizes the&nbsp;amount of downtime taken during the upgrade process.</p>
<hr>
<p>If you choose to use <strong>Helm</strong> instead of YAML, you can perform an upgrade by executing the following command.<br> However, Please make sure to update the version number to the latest or the one that you want to install. This version <strong>must be newer</strong> than the one currently installed. You can find the version number in the drop-down list on the <a href="https://customers.pyramidanalytics.com/kubernetes/" rel="nofollow noopener noreferrer" target="_blank">Pyramid Kubernetes Cluster configurator page</a>.</p>
<pre class="language-none"><code class="language-none">helm&nbsp;install&nbsp;pyramid&nbsp;pyramid/pyramidanalytics&nbsp;--version&nbsp;2023.00.361</code></pre>]]></description>
          <pubDate>Mon, 17 Jul 2023 10:48:32 +0000</pubDate>
          <guid>https://community.pyramidanalytics.com/t/x2h9rc5/how-to-upgrade-a-pyramid-kubernetes-cluster</guid>
          <dc:creator>Omri Zach</dc:creator>
        </item>

      <item>
          <title>Pyramid installation tips</title>
          <link>https://community.pyramidanalytics.com/t/y4h0tvt/pyramid-installation-tips</link>
          <description><![CDATA[<p>This article provides useful recommendations and checks to perform before installing or upgrading Pyramid.</p>
<p>Following these recommendations can help prevent common installation issues and ensure that your environment meets the requirements of the Pyramid version being installed.</p>
<h2>1. Check System Requirements</h2>
<p>Before installing or upgrading Pyramid, confirm that the server meets the supported operating system, hardware, software, and database requirements.</p>
<p>Always refer to the <a href="https://help.pyramidanalytics.com/Content/Root/Guides/installation/Main/Recommended%20Setup.htm" target="_blank" rel="nofollow noopener noreferrer"> latest Pyramid System Requirements </a> before proceeding.</p>
<p><strong>Important for Pyramid 2025.11 and later:</strong></p>
<ul>
 <li><strong>Operating systems:</strong> Ubuntu 20, Debian 11, and Amazon Linux 2 are no longer supported.</li>
 <li><strong>PostgreSQL:</strong> PostgreSQL 12 and earlier are no longer supported as Pyramid repository databases.</li>
 <li><strong>Windows:</strong> Ensure that the required .NET Framework 4.7.2 and .NET 10 components are installed.</li>
 <li><strong>Linux:</strong> Ensure that the operating system is fully updated and that the required software repositories and dependencies are accessible.</li>
</ul>
<p><strong>Note:</strong> Minimum hardware requirements vary depending on the deployment type, number of users, and expected workload. Kubernetes deployments have different requirements from native installations.</p>
<h2>2. Check Antivirus and Endpoint Security</h2>
<p>Antivirus and endpoint security software can sometimes interfere with the Pyramid installation process by blocking executables, extracting files, or preventing services from being created or started.</p>
<p>Before installing Pyramid, check whether your security software requires exclusions for:</p>
<ul>
 <li>The Pyramid installer executable.</li>
 <li>The Pyramid installation directory.</li>
 <li>The Pyramid data and repository directories.</li>
 <li>Relevant Pyramid service processes.</li>
</ul>
<p>If the installation fails and antivirus interference is suspected, review the antivirus logs and temporarily apply approved exclusions where necessary.</p>
<p><strong>Important:</strong> Completely disabling antivirus protection is not normally recommended. Any temporary security changes should be approved by your IT or security team and reverted after troubleshooting.</p>
<h2>3. Check Firewall and Network Ports</h2>
<p>Pyramid uses multiple services that communicate with each other across the network.</p>
<p>If a firewall is enabled, ensure that the required ports are open between the relevant Pyramid servers and components.</p>
<p>This is particularly important for distributed and multi-server installations.</p>
<p>Check that:</p>
<ul>
 <li>The required Pyramid service ports are available.</li>
 <li>Servers can communicate with each other.</li>
 <li>The Pyramid application can connect to its repository database.</li>
 <li>Users can access the required web application ports.</li>
 <li>Firewalls, security groups, and network access controls allow the required traffic.</li>
</ul>
<p>For the required ports, refer to: <a href="/t/k9wbhv/firewall-settings-for-pyramid" rel="nofollow noopener noreferrer"> Firewall Settings for Pyramid </a>.</p>
<h2>4. Check Repository Database Requirements</h2>
<p>Pyramid requires a repository database to store application configuration, metadata, and other repository information.</p>
<p>Supported repository database technologies include:</p>
<ul>
 <li>Microsoft SQL Server</li>
 <li>PostgreSQL</li>
 <li>Oracle Database</li>
</ul>
<p>Before installing Pyramid, verify that the selected database version is supported and that the appropriate connection details and permissions are available.</p>
<p>When the installer is expected to create a database, the database account must have sufficient privileges to perform the required operations.</p>
<p>For existing databases or managed database services such as AWS RDS, the database may need to be created in advance by the database administrator.</p>
<p>In these cases, select the appropriate existing repository or managed database option in the installer.</p>
<h3>Important PostgreSQL Changes in Pyramid 2025.11</h3>
<p><strong>Pyramid 2025.11 and later no longer support PostgreSQL 12 or earlier as repository databases.</strong></p>
<p>Customers using an older PostgreSQL repository must migrate to a supported version before upgrading Pyramid.</p>
<p>This includes customers who originally installed Pyramid using the older bundled PostgreSQL 9.6 database.</p>
<p>For these installations, PostgreSQL must be migrated to a supported, separately managed PostgreSQL instance before upgrading Pyramid.</p>
<p>The migration guides below use PostgreSQL 18:</p>
<ul>
 <li><a href="/t/m1yjmxm/migrating-the-pyramid-database-from-postgresql-9-6-to-postgresql-18-windows" rel="nofollow noopener noreferrer"> Migrating PostgreSQL 9.6 to PostgreSQL 18 - Windows </a></li>
 <li><a href="/t/60yjmmq/migrating-the-pyramid-database-from-postgresql-9-6-to-postgresql-18-linux" rel="nofollow noopener noreferrer"> Migrating PostgreSQL 9.6 to PostgreSQL 18 - Linux </a></li>
</ul>
<p><strong>Important:</strong> Complete the PostgreSQL migration and verify that the existing Pyramid installation is working correctly before proceeding with the Pyramid 2025.11 or later upgrade.</p>
<p>If you are using an externally managed PostgreSQL server that already meets the supported requirements, the bundled PostgreSQL migration procedure does not apply.</p>
<h2>5. Check Installation Permissions and Dependencies</h2>
<p>Ensure that the account running the Pyramid installer has sufficient permissions to install the application, create directories, configure services, and perform the required system changes.</p>
<ul>
 <li><strong>Windows:</strong> Run the installer as Administrator.</li>
 <li><strong>Linux:</strong> Run the installer with the appropriate administrative permissions, typically using sudo.</li>
</ul>
<p>On Windows, install the required .NET components before starting the installation to help avoid unnecessary installation interruptions or reboots.</p>
<p>On Linux, ensure that the operating system is fully updated and that the required package repositories are accessible.</p>
<p>Linux installations may require internet access or access to properly configured offline repositories to install the necessary dependencies.</p>
<h2>6. Backup Before Upgrading</h2>
<p>If you are upgrading an existing Pyramid installation, always take a backup before starting the upgrade.</p>
<p>At a minimum, ensure that you have:</p>
<ul>
 <li>A valid backup of the Pyramid repository database.</li>
 <li>Backups of relevant IMDB data files.</li>
 <li>Backups of uploaded files and generated content, where applicable.</li>
 <li>Copies of any important configuration files.</li>
</ul>
<p>Where possible, verify that backups can be restored before proceeding with a production upgrade.</p>
<p>For repository backup instructions, see: <a href="/t/1852k1/how-to-backup-and-restore-a-postgresql-database" rel="nofollow noopener noreferrer"> How to Backup and Restore a PostgreSQL Database </a>.</p>
<h2>7. Troubleshooting Installation Failures</h2>
<p>If the Pyramid installation fails, review the error message and installer logs before attempting to reinstall the software.</p>
<p>Common causes of installation failures include:</p>
<ul>
 <li>Unsupported operating system or database versions.</li>
 <li>Missing software dependencies.</li>
 <li>Insufficient installation permissions.</li>
 <li>Antivirus or endpoint security interference.</li>
 <li>Blocked or unavailable network ports.</li>
 <li>Insufficient database permissions or incorrect connection settings.</li>
 <li>Configuration or service files remaining from an incomplete installation.</li>
</ul>
<p>If the installation fails:</p>
<ol>
 <li>Review the error message displayed by the installer.</li>
 <li>Check the installer logs for the underlying error.</li>
 <li>Verify that the system requirements and prerequisites are met.</li>
 <li>Correct any identified issues and retry the installation.</li>
 <li>If a complete uninstall and reinstall is required, refer to <a href="/t/h4g9v6/how-to-fully-uninstall-pyramid" rel="nofollow noopener noreferrer"> How to Fully Uninstall Pyramid </a>.</li>
</ol>
<p><strong>Important:</strong> Do not perform a complete uninstall or remove Pyramid repository data without first confirming that all required backups have been taken.</p>
<h2>8. Collecting Installer Logs</h2>
<p>If you are unable to resolve the installation issue, collect the installer logs before opening a support ticket.</p>
<p>On Windows, installer logs are generally written to the temporary directory of the account running the installation.</p>
<p>To access this directory, press <strong>Windows + R</strong> and enter:</p>
<pre class="language-none"><code>%TEMP%</code></pre>
<p>On Linux, installer logs may be located in:</p>
<pre class="language-none"><code>/tmp</code></pre>
<p>Depending on the Pyramid version and installer, look for log files with names such as:</p>
<ul>
 <li><code>installerbuilder_install.log</code></li>
 <li><code>pyramidinstaller.log</code></li>
</ul>
<p>File names may differ between installer versions. If multiple installation attempts have been made, sort the logs by modification time to identify the files associated with the relevant attempt.</p>
<h2>9. Contacting Pyramid Support</h2>
<p>If the issue persists, please <a href="https://support.pyramidanalytics.com/hc/en-us/requests/new" target="_blank" rel="nofollow noopener noreferrer"> open a Pyramid Support ticket </a>.</p>
<p>Include the following information:</p>
<ul>
 <li>The Pyramid version and build number being installed or upgraded.</li>
 <li>The operating system and version.</li>
 <li>The repository database type and version.</li>
 <li>The installation type (single-server, multi-server, or other).</li>
 <li>The installer logs from the failed installation.</li>
 <li>The exact error messages received.</li>
 <li>A description of the issue and when it occurred.</li>
 <li>Steps already taken to troubleshoot the issue.</li>
</ul>
<p>Providing this information will help Pyramid Support investigate the issue more efficiently.</p>
<p>For further installation information, refer to the <a href="https://help.pyramidanalytics.com/Content/Root/Guides/installation/Main/Recommended%20Setup.htm" target="_blank" rel="nofollow noopener noreferrer"> Pyramid Installation and System Requirements documentation </a>.</p>]]></description>
          <pubDate>Tue, 03 Jan 2023 14:45:00 +0000</pubDate>
          <guid>https://community.pyramidanalytics.com/t/y4h0tvt/pyramid-installation-tips</guid>
          <dc:creator>Daniel</dc:creator>
        </item>

      <item>
          <title>Issues re-installing Pyramid on Linux</title>
          <link>https://community.pyramidanalytics.com/t/m20l5z/issues-re-installing-pyramid-on-linux</link>
          <description><![CDATA[<p>If a Pyramid installation fails, you may encounter an error when attempting to reinstall Pyramid, even after running the uninstaller.</p>
<p>One possible error is:</p>
<pre class="language-none"><code>Error reading INI File /home/admin/Pyramid/config.ini</code></pre>
<p>This can occur when configuration files or service registrations from a previous installation remain on the Linux server.</p>
<p>The installation path shown in the error message is an example. The actual path will depend on the directory used during installation.</p>
<p>&nbsp;</p>
<p><em> Example of the installer error. The screenshot is illustrative; the displayed installer version is not a verified build number. </em></p>
<h2>1. Check for Remaining Pyramid Configuration Files</h2>
<p>If the installation failed and Pyramid has already been uninstalled, check whether the following configuration file remains:</p>
<pre class="language-bash"><code>/etc/pareg.ini</code></pre>
<p>You can check whether the file exists by running:</p>
<pre class="language-bash"><code>sudo ls -l /etc/pareg.ini</code></pre>
<p>This file may contain configuration information pointing to a previous Pyramid installation directory.</p>
<p>If it belongs to the failed installation and is no longer required, back it up before removing it.</p>
<pre class="language-bash"><code>sudo cp -p /etc/pareg.ini /etc/pareg.ini.bak</code></pre>
<p>Then remove the obsolete file:</p>
<pre class="language-bash"><code>sudo rm /etc/pareg.ini</code></pre>
<p><strong>Important:</strong> Only remove this file after verifying that it belongs to the installation being cleaned up. Do not remove configuration files belonging to an active Pyramid deployment.</p>
<h2>2. Check for Remaining Pyramid Services</h2>
<p>Pyramid creates Linux services to manage its application components.</p>
<p>Older Pyramid installations used service scripts under <strong>/etc/init.d</strong>.</p>
<p>More recent Linux installations can use <strong>systemd</strong> to manage these services.</p>
<p>Before reinstalling Pyramid, check for obsolete service registrations left behind by the previous installation.</p>
<h3>Current Pyramid Service Names</h3>
<p>Depending on the Pyramid version, installed components, and deployment configuration, the following services may be present:</p>
<ul>
 <li><strong>pyramidAgent</strong> - Pyramid Agent</li>
 <li><strong>pyramidFs</strong> - File System service</li>
 <li><strong>pyramidRTE</strong> - Runtime Engine</li>
 <li><strong>pyramidRTR</strong> - Router</li>
 <li><strong>pyramidTE</strong> - Task Engine</li>
 <li><strong>pyramidWeb</strong> - Web Server</li>
 <li><strong>pyramidIMDB</strong> - In-Memory Database</li>
 <li><strong>pyramidNLP</strong> - Natural Language Processing</li>
 <li><strong>pyramidSOLVE</strong> - Solve Engine</li>
 <li><strong>pyramidAI</strong> - AI service</li>
 <li><strong>pyramidDNC</strong> - .NET Connector, where installed</li>
 <li><strong>pyramidPG</strong> - Older bundled PostgreSQL service, where applicable</li>
</ul>
<p><strong>Note:</strong> Not every service will be installed in every environment.</p>
<p>The <strong>pyramidPG</strong> service is associated with installations using Pyramid's older bundled PostgreSQL repository. Environments using separately installed PostgreSQL will have their own PostgreSQL service, managed independently of Pyramid.</p>
<p>For more information, see: <a href="/t/y4ykha8/the-pyramid-services-in-linux" rel="nofollow noopener noreferrer"> The Pyramid Services in Linux </a>.</p>
<h2>3. Check for Older Init.d Service Scripts</h2>
<p>On installations using the older Linux service scripts, check the following directory:</p>
<pre class="language-bash"><code>/etc/init.d</code></pre>
<p>To list any Pyramid-related service scripts, run:</p>
<pre class="language-bash"><code>ls -l /etc/init.d/pyramid*</code></pre>
<p>You may find some of the service names listed above, depending on the version previously installed.</p>
<p>If Pyramid was completely uninstalled and these scripts are confirmed to be remnants of the failed installation, back them up before removing them.</p>
<p>For example, to back up an obsolete Task Engine service script:</p>
<pre class="language-bash"><code>sudo cp -p /etc/init.d/pyramidTE /etc/init.d/pyramidTE.bak</code></pre>
<p>Once confirmed to be obsolete, the original script can be removed:</p>
<pre class="language-bash"><code>sudo rm /etc/init.d/pyramidTE</code></pre>
<p>Repeat this procedure only for obsolete scripts associated with the failed installation.</p>
<p><strong>Warning:</strong> Do not remove the entire /etc/init.d directory or automatically delete every Pyramid service script. Some scripts may still be required by an existing installation.</p>
<h2>4. Check for Systemd Services</h2>
<p>On Linux systems using systemd, Pyramid services may be registered as systemd units rather than traditional init.d scripts.</p>
<p>To list installed Pyramid service units, run:</p>
<pre class="language-bash"><code>systemctl list-unit-files 'pyramid*'</code></pre>
<p>To list currently loaded Pyramid service units, including inactive services, run:</p>
<pre class="language-bash"><code>systemctl list-units --all 'pyramid*'</code></pre>
<p>To inspect a particular service, for example the Task Engine, run:</p>
<pre class="language-bash"><code>sudo systemctl status pyramidTE</code></pre>
<p>You can also inspect its unit definition:</p>
<pre class="language-bash"><code>systemctl cat pyramidTE</code></pre>
<p>If service registrations remain from a failed installation, check whether they reference an installation directory that no longer exists.</p>
<p>Before removing any systemd unit, confirm its location, ownership, and whether it is still required.</p>
<p>If obsolete service registrations need to be removed, follow the appropriate systemd cleanup procedure for the Linux distribution.</p>
<p>After removing obsolete systemd unit files, reload the systemd manager configuration:</p>
<pre class="language-bash"><code>sudo systemctl daemon-reload</code></pre>
<p><strong>Important:</strong> Do not remove active Pyramid service units or disable services belonging to another working Pyramid installation.</p>
<h2>5. Check the Previous Installation Directory</h2>
<p>If the installer reports that it cannot read <strong>config.ini</strong>, verify the installation directory referenced by the error.</p>
<p>For example:</p>
<pre class="language-bash"><code>/home/admin/Pyramid/config.ini</code></pre>
<p>Or, for an installation under the commonly used Linux installation directory:</p>
<pre class="language-bash"><code>/opt/pyramid/config.ini</code></pre>
<p>Check whether the directory and configuration file exist and whether the installation account has the required permissions.</p>
<p>If the path points to an installation that has already been removed, the remaining registration or configuration may need to be cleaned up.</p>
<p><strong>Warning:</strong> Do not delete the entire Pyramid installation or repository data directory without confirming that all required data, configuration, and database backups have been taken.</p>
<h2>6. Run the Installation Again</h2>
<p>After removing any confirmed obsolete configuration files and service registrations:</p>
<ol>
 <li>Verify that the previous Pyramid installation has been completely uninstalled.</li>
 <li>Confirm that any required repository and data backups have been saved.</li>
 <li>Ensure that obsolete service registrations no longer reference the previous installation.</li>
 <li>Verify that the installation directories and permissions are correct.</li>
 <li>Run the Pyramid installer again using the appropriate permissions.</li>
</ol>
<p>If the installation fails again, collect the installer logs and review the reported error.</p>
<p>On Linux, installer logs may be located in the temporary directory:</p>
<pre class="language-bash"><code>/tmp</code></pre>
<p>Include the installer logs and the exact error message when opening a ticket with Pyramid Support.</p>
<p>For additional installation troubleshooting recommendations, see: <a href="/t/y4h0tvt/pyramid-install-tips" rel="nofollow noopener noreferrer"> Pyramid Installation Tips </a>.</p>
<h2>Additional Notes</h2>
<p>This article describes troubleshooting steps for installations that failed or were incompletely removed.</p>
<p>Service names and registration methods may differ depending on the Pyramid version, Linux distribution, and deployment configuration.</p>
<p>If the server is part of a distributed Pyramid deployment, verify the affected node and services before making any changes.</p>]]></description>
          <pubDate>Mon, 03 Jun 2019 09:48:22 +0000</pubDate>
          <guid>https://community.pyramidanalytics.com/t/m20l5z/issues-re-installing-pyramid-on-linux</guid>
          <dc:creator>Daniel</dc:creator>
        </item>

      <item>
          <title>How to revert back to a previous version of Pyramid</title>
          <link>https://community.pyramidanalytics.com/t/m2wwcy/how-to-revert-back-to-a-previous-version-of-pyramid</link>
          <description><![CDATA[<p>On this page, you will find how to revert back your Pyramid version to a previous&nbsp;one.</p>
<p><strong>Pre-requisites:</strong></p>
<ul>
 <li>A backup of the Pyramid repository from the version you wish to revert back to.</li>
 <li>The installer of the version you need.</li>
</ul>
<p><strong>First Steps:</strong></p>
<ul>
 <li>If it wasn't already done, If you're using an IMDB (In-Memory DB), backup the 'imdata'&nbsp;folder to restore later.<br> The default location is: "C:\Program Files\<strong>Pyramid</strong>\repository\imdata"</li>
 <li>If you're using publications, backup the below folder to have the ability to review and open published publications:<br> "C:\Program Files\<strong>Pyramid</strong>\repository\general"<br> This step should be done on each Pyramid server.</li>
 <li>Copy the machine key from <strong>config.ini&nbsp;</strong><br> (C:\Program Files\<strong>Pyramid</strong>\config.ini).<br> After the reinstallation copy the old machine key to the new <strong>config.ini</strong><br> look for:<br> <em>[machine]<br> installType=1<br> host=myPyramidserver.com<br> <strong>machineKey</strong>=0e93adc283152805cceb676d9a38ec1e</em></li>
</ul>
<p><strong>Uninstall:</strong></p>
<ul>
 <li>Remove <strong>Pyramid </strong>completely from the server(s) through the control panel.<br> For more details, please follow up on this article:<br> '<a href="/t/h4g9v6/how-to-fully-uninstall-pyramid-2018-when-the-installer-fails" rel="nofollow noopener noreferrer">How to fully uninstall Pyramid</a>'</li>
</ul>
<p><strong>Re-install:</strong></p>
<ul>
 <li>Restore the backup of the Pyramid repository.</li>
 <li>Install the previous version of Pyramid<br> * Use the option of using an existing DB and point it to the restored DB.</li>
 <li>After the installation is complete, copy the old machine key into the new <strong>config.ini</strong></li>
 <li>Remove all the <strong>new </strong>server entries in the table "server_instances" (In Pyramid repository)&nbsp;(check according to the date they were added)</li>
 <li>Restart Pyramid services and try to log in.</li>
 <li>Restore the contents of the&nbsp;IMDB and&nbsp;General folder to their relative locations.</li>
</ul>]]></description>
          <pubDate>Thu, 07 Feb 2019 13:48:21 +0000</pubDate>
          <guid>https://community.pyramidanalytics.com/t/m2wwcy/how-to-revert-back-to-a-previous-version-of-pyramid</guid>
          <dc:creator>Guy Lavi</dc:creator>
        </item>

      <item>
          <title>After upgrading Pyramid, it is not possible to access Pyramid using the URL host name defined in IIS</title>
          <link>https://community.pyramidanalytics.com/t/h42hhb/after-upgrading-pyramid-it-is-not-possible-to-access-pyramid-using-the-url-host-name-defined-in-iis</link>
          <description><![CDATA[<p><u><strong>ISSUE:</strong></u></p>
<p>After upgrading a Pyramid install that uses IIS, the site is no longer accessible, please check that the following is correct:</p>
<p>1)</p>
<p>Open IIS &gt;Double click on the server name(1)&gt;Double&nbsp;Click on "Application Request Routing Cache"(2)<br> &nbsp;<img alt="" src="https://s3-us-west-2.amazonaws.com/media.forumbee.com/i/4f41dcf7-1cdd-4828-a721-f867e37f9315/547.png" style="">&nbsp;<br> <br>Make sure that the box "Enable proxy" is ticked and if not tick it (3)&gt;Click on Apply(4)</p>
<p><img alt="" src="https://s3-us-west-2.amazonaws.com/media.forumbee.com/i/8492cf0b-6482-4636-b020-e65e6b408bc5/547.png" style=""></p>
<p>2)</p>
<p>Check that the Rewrite URL rule is correct on the Pyramid2018 website.&nbsp;Double click on the Pyramid2018 website&nbsp;&gt;"URL Rewrite"&gt;"ReveseProxyInboundRule1"</p>
<p>The Rewrite URL should be&nbsp;"<span class="pen6">http</span><span class="pen6">://localhost:8181/{R:1}</span>" as shown below, if it is not, please update it, click apply and do an IISRESET.</p>
<p><img alt="" src="https://s3-us-west-2.amazonaws.com/media.forumbee.com/i/19f562ad-23a2-4ca0-8d5e-ca1bfe4b0e50/547.jpg" style=""></p>]]></description>
          <pubDate>Wed, 05 Sep 2018 08:18:41 +0000</pubDate>
          <guid>https://community.pyramidanalytics.com/t/h42hhb/after-upgrading-pyramid-it-is-not-possible-to-access-pyramid-using-the-url-host-name-defined-in-iis</guid>
          <dc:creator>Daniel</dc:creator>
        </item>

      <item>
          <title>How to best uninstall/Re-install the Pyramid</title>
          <link>https://community.pyramidanalytics.com/t/80k19s/how-to-best-uninstallre-install-the-pyramid</link>
          <description><![CDATA[<p>Before uninstalling, please note that:</p>
<ul>
 <li>When uninstalling the <strong>Alpha&nbsp;</strong>or <strong>Beta releases </strong>that are using the built-in&nbsp;repository,&nbsp;uninstalling will wipe out the database permanently.<br> If you wish to keep the database, please back it up manually before the uninstall.</li>
 <li>During the uninstall of the <strong>RTM</strong>, you can back up the built-in&nbsp;repository during uninstall.</li>
 <li>Content that was created in the <strong>Alpha </strong>or <strong>Beta </strong>releases will not work in the <strong>RTM </strong>release.</li>
 <li>R is uninstalled on its own. Just confirm&nbsp;it was removed.</li>
 <li>The services and shares removed by the uninstaller as well. Just confirm&nbsp;they were removed.</li>
 <li>The IIS website is removed by the uninstaller. If it was not removed, it can be removed manually. You can manually uninstall IIS if you wish.</li>
</ul>
<p>If your installer fails, or if you have uninstalled Pyramid but some components&nbsp;were not removed, do the following:</p>
<ol>
 <li>Uninstall the application properly from windows.</li>
 <li>Check that the installation folder is completely removed.<br> if not <u>delete it completely</u>.</li>
 <li>Uninstall the R installation.</li>
 <li>Optional: Download and run the attached* command script.<br> This script will wipe out all services and folder shares and&nbsp;remove the registry entries.<br> - Make sure NO "Pyramid ..." services exists.<br> -&nbsp;Check that Registry entry was removed.<br> &nbsp; If it wasn't, delete it manually. (See attached image)</li>
 <li>In some cases, a reboot is required.</li>
</ol>
<p>*Save the attached&nbsp;script to your computer (you will need to unzip the file).&nbsp;Then run it as an administrator.&nbsp;It will stop and delete services and removed folder shares.</p>
<p><u>Note.</u><br> The installer enables to install&nbsp;to IIS and to remote or local existing SQL/Postgres repository.<br> Currently, with the RTM version, you CANNOT install on top of an existing repository.<br> <br>When the machine is clean, you can attempt to reinstall if needed.<br> &nbsp;</p>
<p>If you require assistance, please open a support request by sending an email to <a rev="auto" rel="nofollow noopener noreferrer" href="mailto:Support@PyramidAnalytics.com">Support@PyramidAnalytics.com</a></p>]]></description>
          <pubDate>Wed, 01 Nov 2017 20:55:00 +0000</pubDate>
          <guid>https://community.pyramidanalytics.com/t/80k19s/how-to-best-uninstallre-install-the-pyramid</guid>
          <dc:creator>John Hormaechea</dc:creator>
        </item>

      </channel>
</rss>
