<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Sihar Simbolon</title>
    <description>The latest articles on DEV Community by Sihar Simbolon (@sihar).</description>
    <link>https://dev.to/sihar</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F721478%2Ff710df57-23d0-4647-8768-26918046bb81.jpeg</url>
      <title>DEV Community: Sihar Simbolon</title>
      <link>https://dev.to/sihar</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sihar"/>
    <language>en</language>
    <item>
      <title>Pengalaman saya menggunakan FlyEnv selama 6 bulan</title>
      <dc:creator>Sihar Simbolon</dc:creator>
      <pubDate>Wed, 12 Nov 2025 02:48:37 +0000</pubDate>
      <link>https://dev.to/sihar/pengalaman-saya-menggunakan-flyenv-selama-6-bulan-4m8p</link>
      <guid>https://dev.to/sihar/pengalaman-saya-menggunakan-flyenv-selama-6-bulan-4m8p</guid>
      <description>&lt;p&gt;Awal mula menggunakan Mac OS kurang lebih 3 tahun yang lalu, saya meng-install PHP satu-satu menggunakan homebrew.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;brew install php@7.4
brew install php@8.0
...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Begitu seterusnya sampai semua versi yang saya butuhkan terinstall.&lt;br&gt;
Sedangkan untuk mengganti php yang aktif saat ini untuk apache&lt;br&gt;
saya menggunakan perintah sphp&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sphp 8.0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dengan cara ini, kebutuhan saya untuk menggunakan versi PHP yang berbeda-beda sudah teratasi.&lt;br&gt;
Hanya saja jika ingin mengakses langsung ke projectnya kita perlu setting subdomain local lagi dan ini cukup banyak rutinitas yang dilakukan.&lt;br&gt;
Saya berpikir pasti ada cara lain atau tool lain yang dapat mempersingkat ini.&lt;br&gt;
Sambil berjalan hingga di awal tahun 2025, saya menemukan tools seperti Xampp di Windows yang bernama PHPWebStudy.&lt;br&gt;
Saya coba jalankan di Mac saya dan berjalan cukup lancar.&lt;br&gt;
PHPWebStudy sudah mengenali versi PHP yang sudah kita install sebelumnya menggunakan homebrew.&lt;br&gt;
PHPWebStudy juga support subdomain untuk tiap project.&lt;br&gt;
Jadi kita bisa memiliki subdomain app1.test untuk project app1 dan app2.test untuk project app2.&lt;br&gt;
Database seperti MySQL dan PostgreSQL juga sudah muncul disini.&lt;br&gt;
Jadi benar-benar memudahkan kita memiliki sebuah panel berisi segala tool atau ekosistem yang berhubungan dengan project kita.&lt;/p&gt;

&lt;p&gt;Benar-benar puas dan sangat merekomendasikan tools ini jika ada pengguna Xampp dan sejenisnya di perangkat Anda.&lt;br&gt;
Sukses terus PHPWebStudy.&lt;br&gt;
Dan satu lagi, saat ini PHPWebStudy sudah berganti nama menjadi &lt;a href="https://flyenv.com/" rel="noopener noreferrer"&gt;FlyEnv&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fucd3vn9iwmg0bgd94hdu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fucd3vn9iwmg0bgd94hdu.png" alt="FlyEnv multiple PHP" width="800" height="499"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5aj7bw0crcnley6a4ugn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5aj7bw0crcnley6a4ugn.png" alt="FlyEnv UI" width="800" height="445"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://flyenv.com/" rel="noopener noreferrer"&gt;https://flyenv.com/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>php</category>
      <category>flyenv</category>
      <category>phpwebstudy</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Analyze PostgreSQL log using pgBadger and scheduling using crontab</title>
      <dc:creator>Sihar Simbolon</dc:creator>
      <pubDate>Fri, 08 Mar 2024 04:07:40 +0000</pubDate>
      <link>https://dev.to/sihar/scheduling-building-postgresql-log-using-pgbadger-4736</link>
      <guid>https://dev.to/sihar/scheduling-building-postgresql-log-using-pgbadger-4736</guid>
      <description>&lt;p&gt;pgBadger can help us analyze PostgreSQL log with fully detailed reports and graphs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step by Step&lt;/strong&gt;&lt;br&gt;
Prepare your PostgreSQL log format&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;...
# pgbadger settings
log_line_prefix = '%t [%p]: [%l-1] user=%u,db=%d,app=%a,client=%h '
log_checkpoints = on
log_connections = on
log_disconnections = on
log_lock_waits = on
log_temp_files = 0
log_autovacuum_min_duration = 0
log_error_verbosity = default
log_min_duration_statement = 0
...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Apply PostgreSQL settings&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;postgres=# select pg_reload_conf();
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Install pgBadger&lt;br&gt;
Better using other server/vps to install pgBadger and save pgBadger report there.&lt;br&gt;
To install pgBadger you can use &lt;a href="https://pgbadger.darold.net/documentation.html#INSTALLATION"&gt;this instruction&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Create folder for output directory pgBadger&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mkdir /var/www/postgresql-reports
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create folder for save PostgreSQL log&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mkdir /home/xxxx/postgresql-log
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create bash script&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;touch /home/xxx/script/building-report.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Fill the script using this&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#!/bin/bash

filename="postgresql-"$(date -d "1 day ago" +%Y-%m-%d)

#copy h-1 postgresql log from remote server
scp your_username@your_server_address:/var/log/postgresql/$filename".log" /home/xxxx/postgresql-log/

#building report using pgbadger
pgbadger -p "%t [%p]: [%l-1] user=%u,db=%d,app=%a,client=%h " /home/xxxx/postgresql-log/$filename".log" -O /var/www/postgresql-reports/ -o $filename".html" --no-progressbar
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Open crontab&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;crontab -e
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add pgBadger command&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;0 1 * * * /bin/bash /home/xxx/script/building-report.sh 2&amp;gt;&amp;amp;1 | logger -t pgbadger-cmd
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Finish!!!&lt;/p&gt;

&lt;p&gt;Reference:&lt;br&gt;
&lt;a href="https://pgbadger.darold.net/documentation.html"&gt;pgBadger documentation&lt;/a&gt;&lt;/p&gt;

</description>
      <category>postgres</category>
      <category>pgbadger</category>
      <category>scheduling</category>
    </item>
    <item>
      <title>How to restart PostgreSQL with PgBouncer assist</title>
      <dc:creator>Sihar Simbolon</dc:creator>
      <pubDate>Thu, 01 Feb 2024 05:12:20 +0000</pubDate>
      <link>https://dev.to/sihar/how-to-restart-postgresql-with-pgbouncer-assist-1fng</link>
      <guid>https://dev.to/sihar/how-to-restart-postgresql-with-pgbouncer-assist-1fng</guid>
      <description>&lt;p&gt;This is step that I use for restarting postgresql.&lt;br&gt;
Note:&lt;br&gt;
Please do this on development only&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pgbouncer&amp;gt; KILL dbname&lt;span class="p"&gt;;&lt;/span&gt; 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Restart postgresql&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl restart postgresql-12
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Resume dbname from pgbouncer&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pgbouncer&amp;gt; RESUME dbname&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>postgres</category>
      <category>pgbouncer</category>
    </item>
    <item>
      <title>How to use pg_stat_monitor on PostgreSQL</title>
      <dc:creator>Sihar Simbolon</dc:creator>
      <pubDate>Tue, 30 Jan 2024 07:29:51 +0000</pubDate>
      <link>https://dev.to/sihar/how-to-use-pgstatmonitor-on-postgresql-1716</link>
      <guid>https://dev.to/sihar/how-to-use-pgstatmonitor-on-postgresql-1716</guid>
      <description>&lt;p&gt;This setup using PostgreSQL 12 on CentOS 7&lt;br&gt;&lt;br&gt;
After this setup, you can check the query plan for query that already done on PostgreSQL.&lt;/p&gt;

&lt;p&gt;Install PostgreSQL repository package&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;yum &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Install extension pg_stat_monitor&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;yum &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; pg_stat_monitor_12
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add extension in Postgresql configuration&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;...
shared_preload_libraries = 'pg_stat_monitor'    # (change requires restart)
...

pg_stat_monitor.pgsm_query_max_len = 4096
pg_stat_monitor.pgsm_normalized_query = 1
pg_stat_monitor.pgsm_enable_query_plan = 1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Restart PostgreSQL service&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;systemctl restart postgresql-12
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Enter to psql and create the extension&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;psql -U postgres  
postgres=# create extension pg_stat_monitor;
postgres=# select query, query_plan from pg_stat_monitor;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>postgres</category>
      <category>monitoring</category>
    </item>
    <item>
      <title>Perbandingan backup dan restore database MariaDB menggunakan mysqldump,mydumper, mysql dan myloader</title>
      <dc:creator>Sihar Simbolon</dc:creator>
      <pubDate>Thu, 18 Aug 2022 04:52:00 +0000</pubDate>
      <link>https://dev.to/sihar/perbandingan-backup-dan-restore-database-mariadb-menggunakan-mysqldumpmydumper-mysql-dan-myloader-1mef</link>
      <guid>https://dev.to/sihar/perbandingan-backup-dan-restore-database-mariadb-menggunakan-mysqldumpmydumper-mysql-dan-myloader-1mef</guid>
      <description>&lt;h1&gt;
  
  
  Backup menggunakan mydumper
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;time mydumper -h ip_address -u nama_usernya -p passwordnya --database nama_databasenya --outputdir nama_foldernya --logfile alamat_logfilenya.log
0.46s user 0.17s system 17% cpu 3.542 total
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Backup menggunakan mysqldump
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;time mysqldump -h ip_address -u nama_usernya --databases nama_databasenya -p &amp;gt; nama_backup_file.sql
Enter password: 
0.38s user 0.13s system 7% cpu 7.241 total
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Restore menggunakan myloader
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;time myloader -u nama_usernya -p passwordnya --database=nama_databasenya --directory=nama_folder_hasil_export_dari_mydumper    
0.04s user 0.06s system 7% cpu 1.467 total
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Restore menggunakan mysql
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;time mysql -u nama_usernya -p &amp;lt; nama_backup_file.sql
0.29s user 0.04s system 5% cpu 6.398 total
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dari percobaan di atas, didapat hasil backup menggunakan mydumper lebih cepat begitu juga restore menggunakan mysql&lt;/p&gt;

</description>
      <category>mysql</category>
      <category>mydumper</category>
      <category>myloader</category>
    </item>
    <item>
      <title>Kesalahan menggunakan pattern matching not like any di PostgreSQL</title>
      <dc:creator>Sihar Simbolon</dc:creator>
      <pubDate>Wed, 11 May 2022 04:58:48 +0000</pubDate>
      <link>https://dev.to/sihar/kesalahan-menggunakan-pattern-matching-not-like-any-di-postgresql-7fm</link>
      <guid>https://dev.to/sihar/kesalahan-menggunakan-pattern-matching-not-like-any-di-postgresql-7fm</guid>
      <description>&lt;p&gt;Biasanya saya menggunakan pattern matching menggunakan keyword "not in".&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT kolom1 from tabel where kategori not in ('A', 'B')
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Kemudian saya mencoba menggunakan keyword "not like any"&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT kolom1 from tabel where kategori not like any (array['A', 'B'])
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Menurut saya, hasilnya akan sama. Tetapi setelah dijalankan hasilnya berbeda. Saya penasaran kenapa hasil berbeda dan setelah saya cari tahu, cara kerja keyword any itu adalah akan bernilai benar jika salah satu elemen terpenuhi. Jadi jika elemen A dibandingkan ke keyword not like any akan bernilai true karena memenuhi kriteria bukan memenuhi salah satu elemen di dalam array yaitu B. Begitu juga sebaliknya. Sementara hasil yang diinginkan adalah bukan elemen A dan juga bukan elemen B. Untuk menjawab masalah ini digunakan keyword "not like all"&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT kolom1 from tabel where kategori not like all (array['A', 'B'])
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Referensi&lt;br&gt;
&lt;a href="https://stackoverflow.com/questions/49557830/understanding-ilike-any-element-of-an-array-postgresql"&gt;stackoverflow&lt;/a&gt;&lt;/p&gt;

</description>
      <category>postgres</category>
      <category>patternmatching</category>
    </item>
    <item>
      <title>Memilih versi PostgreSQL di production</title>
      <dc:creator>Sihar Simbolon</dc:creator>
      <pubDate>Wed, 19 Jan 2022 01:54:37 +0000</pubDate>
      <link>https://dev.to/sihar/memilih-versi-postgresql-di-production-19n4</link>
      <guid>https://dev.to/sihar/memilih-versi-postgresql-di-production-19n4</guid>
      <description>&lt;p&gt;Ini merupakan cara yang saya gunakan ketika akan menginstall PostgreSQL di production.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mode cepat
&lt;/h2&gt;

&lt;p&gt;Memilih PostgreSQL 1 versi di belakang.&lt;br&gt;
Contoh:&lt;br&gt;
Di awal tahun 2021, PostgreSQL yang terbaru ada di versi 13.&lt;br&gt;
Jika akan menginstall PostgreSQL di waktu itu maka versi yang diinstall versi 12.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mode reguler
&lt;/h2&gt;

&lt;p&gt;Mendata resource yang dimiliki, kebutuhan kemudian membandingkannya dengan fitur yang dimiliki PostgreSQL yang paling mendekati&lt;br&gt;
Contoh:&lt;br&gt;
Di awal tahun 2021, server yang disediakan memiliki processor 16 core. Saat memilih versi, maka dipilih versi yang bisa menggunakan processor semaksimal mungkin (misal paralel query). Jika kita mengecek featurematrix di &lt;a href="https://www.postgresql.org/about/featurematrix/"&gt;link ini&lt;/a&gt; maka akan diketahui fitur paralel query sudah ada sejak versi 10. Kita memiliki pilihan versi 10, 11, 12, 13, 14. Silahkan Anda pilih dari 5 versi tadi.&lt;br&gt;
Selesai!&lt;/p&gt;

</description>
      <category>postgres</category>
    </item>
    <item>
      <title>Create kolom index untuk like di Postgresql</title>
      <dc:creator>Sihar Simbolon</dc:creator>
      <pubDate>Thu, 30 Dec 2021 03:23:02 +0000</pubDate>
      <link>https://dev.to/sihar/create-kolom-index-untuk-like-di-postgresql-5egf</link>
      <guid>https://dev.to/sihar/create-kolom-index-untuk-like-di-postgresql-5egf</guid>
      <description>&lt;p&gt;Spesifikasi Percobaan:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Centos 7&lt;/li&gt;
&lt;li&gt;PostgreSQL 12&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Persoalan:&lt;br&gt;
Query pencarian ke sebuah kolom (contoh: nama) memerlukan waktu yang cukup lama meskipun sudah dibuat index untuk kolom tersebut.&lt;br&gt;
Contoh cuplikan query:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;EXPLAIN ANALYZE SELECT nama from tabela where nama ilike '%abcdefg%';
...
Planning Time: 0.300 ms
Execution Time: 261.213 ms
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Penyebab:&lt;br&gt;
Index btree tidak bekerja untuk pencarian menggunakan like atau ilike (partial match). Index btree bekerja ketika menggunakan pencarian full match. Contoh: "...where nama ='abcdefg'..."&lt;/p&gt;

&lt;p&gt;Solusi:&lt;br&gt;
Install software contrib sesuai versi postgresql&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;yum install postgresql12-contrib
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create extension di database yang diinginkan&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;create extension pg_trgm;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Buat index di tabela&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CREATE INDEX CONCURRENTLY idx_tabela1 ON tabela USING gin (nama gin_trgm_ops);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Explain analyze query sebelumnya&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;EXPLAIN ANALYZE SELECT nama from tabela where nama ilike '%abcdefg%';
...
Planning Time: 0.588 ms
Execution Time: 1.004 ms
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Waktu eksekusi untuk pencarian seperti sebelumnya jauh lebih cepat. Selesai!&lt;/p&gt;

&lt;p&gt;Referensi&lt;br&gt;
&lt;a href="https://niallburkley.com/blog/index-columns-for-like-in-postgres/"&gt;https://niallburkley.com/blog/index-columns-for-like-in-postgres/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>postgres</category>
      <category>index</category>
    </item>
    <item>
      <title>Reporting dan logging di PostgreSQL</title>
      <dc:creator>Sihar Simbolon</dc:creator>
      <pubDate>Wed, 29 Dec 2021 02:48:46 +0000</pubDate>
      <link>https://dev.to/sihar/reporting-dan-logging-di-postgresql-5b07</link>
      <guid>https://dev.to/sihar/reporting-dan-logging-di-postgresql-5b07</guid>
      <description>&lt;h2&gt;
  
  
  Tujuan
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Log query yang berjalan mulai dari 2 detik (2000ms)&lt;/li&gt;
&lt;li&gt;Memastikan file log berada di direktori /var/log/postgresql&lt;/li&gt;
&lt;li&gt;File log tergenerate harian&lt;/li&gt;
&lt;li&gt;Log mencatat kapan dijalankannya sebuah query&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;PostgreSQL yang digunakan versi 12&lt;/p&gt;

&lt;p&gt;Create direktori /var/log/postgresql dan set user ownernya&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# mkdir /var/log/postgresql
# chown -R postgres.postgres /var/log/postgresql
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Sesuaikan bagian logging di file /var/lib/pgsql/12/data/postgresql.conf&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;...
log_min_duration_statement = 2000
log_directory = '/var/log/postgresql'
log_filename = 'postgresql-%Y-%m-%d.log'
...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Reload konfigurasi PostgreSQL&lt;/p&gt;

</description>
      <category>logging</category>
      <category>postgres</category>
    </item>
    <item>
      <title>Backup dan Replikasi PostgreSQL 12 menggunakan pgBackRest di CentOS 7</title>
      <dc:creator>Sihar Simbolon</dc:creator>
      <pubDate>Fri, 08 Oct 2021 04:57:15 +0000</pubDate>
      <link>https://dev.to/sihar/backup-dan-replikasi-postgresql-12-menggunakan-pgbackrest-di-centos-7-331b</link>
      <guid>https://dev.to/sihar/backup-dan-replikasi-postgresql-12-menggunakan-pgbackrest-di-centos-7-331b</guid>
      <description>&lt;p&gt;Berawal dari kesulitan saya mencari tutorial tentang backup dan replikasi postgresql menggunakan pgbackrest, akhir saya menemukan artikel tentang topik yang sama di dev.to yang ditulis oleh &lt;a href="https://dev.to/mehdipourfar/backup-and-replicate-postgresql-12-using-pgbackrest-in-ubuntu-20-04-5c4e"&gt;Mehdi Pourfar&lt;/a&gt;&lt;br&gt;&lt;br&gt;
Tutorial ini ditujukan untuk development saja.&lt;/p&gt;

&lt;p&gt;Environment&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CentOS 7.9
PostgreSQL 12.8
pgBackRest 2.35
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Server&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pgprimary 172.16.16.160
pgreplica 172.16.16.161
pgbackup 172.16.16.162
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Instalasi software di server pgprimary, pgreplica dan pgbackup&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# vi /etc/yum.repos.d/CentOS-Base.repo
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Tambahkan exclude=postgresql* di bagian [base] dan [updates]&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[base]
...
exclude=postgresql*

#released updates
[updates]
...
exclude=postgresql*
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Setting selinux menjadi disabled di /etc/selinux/config&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;...
SELINUX=disabled
...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo yum install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
sudo yum install postgresql12-server postgresql12-contrib
sudo yum install epel-release
sudo yum install libzstd
sudo yum install pgbackrest
sudo systemctl enable postgresql-12
sudo /usr/pgsql-12/bin/postgresql-12-setup initdb
sudo systemctl start postgresql-12
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create pgbackrest configuration di server pgprimary, pgreplica dan pgbackup&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# mkdir -p -m 770 /var/log/pgbackrest
# chown postgres:postgres /var/log/pgbackrest
# mkdir -p /etc/pgbackrest
# mkdir -p /etc/pgbackrest/conf.d
# touch /etc/pgbackrest/pgbackrest.conf
# chmod 640 /etc/pgbackrest/pgbackrest.conf
# chown postgres:postgres /etc/pgbackrest/pgbackrest.conf
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create pgbackrest repository di server pgbackup&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# mkdir -p /var/lib/pgbackrest
# chmod 750 /var/lib/pgbackrest
# chown postgres:postgres /var/lib/pgbackrest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Allow user postgres untuk ssh di masing-masing server&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# nano /etc/ssh/sshd_config
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pastikan user postgres ada di bagian AllowUsers dan PubkeyAuthentication yes&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;...
AllowUsers postgres
PubkeyAuthentication yes
...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Restart system sshd&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# systemctl restart sshd
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Generate public key dan copy key tersebut ke masing-masing server&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;di server pgprimary
$ ssh-keygen
$ ssh-copy-id postgres@172.16.16.161
$ ssh-copy-id postgres@172.16.16.162

di server pgreplica
$ ssh-keygen
$ ssh-copy-id postgres@172.16.16.160
$ ssh-copy-id postgres@172.16.16.162

di server pgbackup
$ ssh-keygen
$ ssh-copy-id postgres@172.16.16.160
$ ssh-copy-id postgres@172.16.16.161
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Setting postgresql.conf di pgprimary&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;archive_command = 'pgbackrest --stanza=clusterku archive-push %p'
archive_mode = on
listen_addresses = '*'
max_wal_senders = 3
wal_level = replica
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Setting pgbackrest di pgprimary&lt;br&gt;
/etc/pgbackrest/pgbackrest.conf&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[clusterku]
pg1-path=/var/lib/pgsql/12/data

[global]
repo1-host=172.16.16.162
repo1-host-user=postgres
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Restart service postgresql&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# systemctl restart postgresql-12
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Setting pgbackrest di server pgbackup&lt;br&gt;
/etc/pgbackrest/pgbackrest.conf&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[clusterku]
pg1-host=172.16.16.160
pg1-host-user=postgres
pg1-path=/var/lib/pgsql/12/data                                                                                                               

[global]                                                                                                                                  
process-max=2
repo1-path=/var/lib/pgbackrest
repo1-retention-full=4
repo1-host-user=postgres
start-fast=y
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create stanza di server pgbackup&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ pgbackrest --stanza=clusterku --log-level-console=info stanza-create
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Cek stanza yang sudah dicreate di server pgbackup pada server pgprimary dan pgreplica&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ pgbackrest --stanza=clusterku --log-level-console=info check

...
INFO: check command end: completed successfully (910ms)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Lakukan backup di server pgbackup&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ pgbackrest --stanza=clusterku --log-level-console=info backup
...
 P00   INFO: expire command end: completed successfully (                                                                             10ms)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Buat penjadwalan di server pgbackup agar backup stanza dilakukan secara periodik.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ crontab -e
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pada script berikut ini berisi backup full yang dilakukan di hari minggu dan backup diferensial di hari lainnya&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;30 06  *   *   0     pgbackrest --type=full --stanza=clusterku backup
30 06  *   *   1-6   pgbackrest --type=diff --stanza=clusterku backup
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create user replikasi pada server pgprimary&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# su – postgres
$ createuser --replication -P -e replicator
$ exit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Izinkan user replicator diakses dari jaringan server pgreplica dan pgbackup&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;...
host    replication     replicator      172.16.16.0/24          md5
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Restart postgresql di server pgbackup&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# systemctl restart postgresql-12
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Lakukan konfigurasi pgbackrest pada server pgreplica&lt;br&gt;
/etc/pgbackrest/pgbackrest.conf&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[clusterku]
pg1-path=/var/lib/pgsql/12/data
recovery-option=primary_conninfo=host=172.16.16.160 port=5432 user=replicator application_name=replica1

[global]
repo1-host=172.16.16.162
repo1-host-user=postgres
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Buat file .pgpass di home directory postgres yang berisi berikut&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;172.16.16.160:5432:replication:replicator:yourpassword
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Lakukan penarikan data postgresql dari server pgprimary di server pgreplica&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# systemctl stop postgresql-12
# su - postgres
$ pgbackrest --stanza=clusterku --delta --type=standby --log-level-console=info restore
$ exit
# systemctl start postgresql-12
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Selesai&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tambahan&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Restore database menggunakan pgbackrest ke waktu tertentu pada server pgprimary&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# systemctl stop postgresql-12
# su - postgres
$ pgbackrest --stanza=clusterku --delta --type=time "--target=2021-10-08 09:28:23.201731+07" --target-action=promote restore
$ exit
# systemctl start postgresql-12
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Jika dilakukan restore pada server pgprimary, maka perlu dilakukan backup pada server pgbackup dan restore pada server pgreplica (karena saat di lakukan restore pada server pgprimary, sinkronisasi server pgreplica ke server pgprimary hilang).&lt;/p&gt;

&lt;p&gt;backup pada server pgbackup&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pgbackrest --stanza=clusterku --log-level-console=info backup
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;restore pada server pgreplica&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# systemctl stop postgresql-12
# su - postgres
$ pgbackrest --stanza=clusterku --delta --type=standby restore
$ exit
# systemctl start postgresql-12
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Data di server pgreplica menjadi sesuai dengan data di server pgprimary&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Langkah-langkah promote server pgreplica menjadi pgprimary&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;sesuaikan konfigurasi pgbackrest di server pgprimary baru (161). Beri tanda # (comment) pada bagian recovery-option
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[clusterku]
pg1-path=/var/lib/pgsql/12/data
#recovery-option=primary_conninfo=host=172.16.16.160 port=5432 user=replicator application_name=replica1

[global]
repo1-host=172.16.16.162
repo1-host-user=postgres
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Restore pgbackrest di server pgprimary yang baru&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# systemctl stop postgresql-12
# su - postgres
$ pgbackrest --stanza=clusterku --delta --type=immediate --target-action=promote restore
$ exit
# systemctl start postgresql-12
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;sesuaikan konfigurasi pgbackrest di server pgbackup
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[clusterku]
#rubah ip address di pg1-host dari ip 160 ke 161
pg1-host=172.16.16.161
pg1-host-user=postgres
pg1-path=/var/lib/pgsql/12/data

[global]
process-max=2
repo1-path=/var/lib/pgbackrest
repo1-retention-full=4
repo1-retention-diff=6
repo1-host-user=postgres
start-fast=y
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;lakukan backup di server pgbackup
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# su - postgres
$ pgbackrest --stanza=clusterku --log-level-console=info backup
$ exit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;buat konfigurasi .pgpass di server pgreplica baru (160)
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ touch .pgpass
$ chmod 600 .pgpass
$ nano .pgpass
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;172.16.16.161:5432:replication:replicator:your_password
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;tambahkan bagian recovery-option di konfigurasi pgbackrest server pgreplica
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[clusterku]
...
recovery-option=primary_conninfo=host=172.16.16.161 port=5432 user=replicator application_name=replica1
...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;stop service postgresql dan lakukan restore
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# systemctl stop postgresql-12
# su - postgres
$ pgbackrest --stanza=clusterku --delta --type=standby restore
$ exit
# systemctl start postgresql-12
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;test lakukan perubahan data di server pgprimary baru (161) dan cek apakah data di server pgreplica baru(160) ikut berubah&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>postgres</category>
      <category>pgbackrest</category>
    </item>
  </channel>
</rss>
