
{"id":5709,"date":"2024-05-29T07:53:33","date_gmt":"2024-05-29T07:53:33","guid":{"rendered":"https:\/\/test.opensource-db.in\/wp1\/?p=5709"},"modified":"2024-05-29T07:53:34","modified_gmt":"2024-05-29T07:53:34","slug":"the-101s-of-postgres-streaming-replication","status":"publish","type":"post","link":"https:\/\/test.opensource-db.in\/wp1\/the-101s-of-postgres-streaming-replication\/","title":{"rendered":"The 101s of Postgres Streaming Replication"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Introduction:<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Embarking on my first customer engagement to set up PostgreSQL Streaming Replication was an insightful journey. As a Database Engineer, this was my first hands-on experience with implementing streaming replication in a real-world environment. The stakes were high, as the customer required a robust and reliable high-availability solution to ensure their critical applications remained operational without interruption.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">From the initial planning stages to the final deployment, every step of the process brought new challenges and learning opportunities. The customer\u2019s environment was complex, with multiple databases running on different nodes, each requiring seamless synchronization to maintain data integrity and consistency. My goal was to create a replication setup that not only met their high availability needs but also provided the scalability and performance necessary to support their growing business.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In this blog post, I\u2019ll share my experience setting up PostgreSQL Streaming Replication. Whether you\u2019re a seasoned DBA or new to the world of database replication, I hope my journey will provide valuable insights and practical tips for successfully implementing streaming replication in your own PostgreSQL environment.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The streaming replication of a standby database server is configured to connect to the primary server, which streams WAL (Write-Ahead Logging) records to the standby as they are generated, without waiting for the WAL file to be filled. By default, streaming replication is asynchronous, where data is written to the standby server after a transaction has been committed on the primary server. This means that there is a small delay between committing a transaction in the master server and the changes becoming visible in the standby server.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 1 :Configure Primary Server<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Open postgresql.conf file on the primary server and make this changes:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>listen_addresses = '*'  \nwal_level = replica      \nmax_wal_senders = 5\nhot_standby=on<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Step 2: Enable Replication User<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Open<code> pg_hba.conf<\/code> file and add an entry to allow replication connections from the standby server:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>host    replication    replication_user    standby_ip\/32    md5\n#Restart PostgreSQL to apply the changes.<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Step 3: Create database<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code><span style=\"background-color: initial;font-family: inherit;font-size: inherit;color: initial\">postgres=# CREATE DATABASE mydb;<\/span><code>CREATE DATABASE<\/code> <code>#Switch to database : \n\\c mydb\n<\/code><\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Step 4: Create the user<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Create a user  in master using whichever slave should connect for streaming the WALs. This user must have replication role<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><code>mydb=# CREATE ROLE replica WITH REPLICATION ENCRYPTED PASSWORD 'postgres';\nCREATE ROLE<\/code><\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Step 5: Taking pg_basebackup<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><code>pg_basebackup<\/code> helps us to stream the data through the\u00a0 wal sender process from the master to a slave to set up replication.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;postgres@master ~]$ pg_basebackup -h 10.206.0.2 \\\n                                   -p 5433 -D \/var\/lib\/pgsql\/14\/data\/ \\\n                                   -U replica  -P -v -R -X stream \\\n                                   -C -S book1 \npg_basebackup: initiating base backup, waiting for checkpoint to complete\npg_basebackup: checkpoint completed\npg_basebackup: write-ahead log start point: 0\/2000028 on timeline 1\npg_basebackup: starting background WAL receiver\npg_basebackup: created replication slot \"book1\"\n34874\/34874 kB (100%), 1\/1 tablespace                                         \npg_basebackup: write-ahead log end point: 0\/2000100\npg_basebackup: waiting for background process to finish streaming ...\npg_basebackup: syncing data to disk ...\npg_basebackup: renaming backup_manifest.tmp to backup_manifest\npg_basebackup: base backup completed<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Step 6: Check for Standby Signal<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Notice that <code>standby.signal<\/code> is created and the connection settings are appended to<code> postgresql.auto.conf.<\/code><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;postgres@master ~]$ cd \/var\/lib\/pgsql\/14\/data\n# Check for postgresql.conf and standby.signal file in the data directory.\n\n&#91;postgres@master data]$ ls -ltr\n-rw-------. 1 postgres postgres    225 May 29 02:41 backup_label\n-rw-------. 1 postgres postgres 180563 May 29 02:42 backup_manifest\ndrwx------. 6 postgres postgres     54 May 29 02:42 base\n-rw-------. 1 postgres postgres     30 May 29 02:42 current_logfiles\ndrwx------. 2 postgres postgres   4096 May 29 02:42 global\ndrwx------. 2 postgres postgres     32 May 29 02:42 log\ndrwx------. 2 postgres postgres      6 May 29 02:42 pg_commit_ts\ndrwx------. 2 postgres postgres      6 May 29 02:42 pg_dynshmem\n-rw-------. 1 postgres postgres   4929 May 29 02:42 pg_hba.conf\n-rw-------. 1 postgres postgres   1636 May 29 02:42 pg_ident.conf\ndrwx------. 4 postgres postgres     68 May 29 02:42 pg_logical\ndrwx------. 4 postgres postgres     36 May 29 02:42 pg_multixact\ndrwx------. 2 postgres postgres      6 May 29 02:42 pg_notify\ndrwx------. 2 postgres postgres      6 May 29 02:42 pg_replslot\ndrwx------. 2 postgres postgres      6 May 29 02:42 pg_serial\ndrwx------. 2 postgres postgres      6 May 29 02:42 pg_snapshots\ndrwx------. 2 postgres postgres      6 May 29 02:42 pg_stat\ndrwx------. 2 postgres postgres      6 May 29 02:42 pg_stat_tmp\ndrwx------. 2 postgres postgres      6 May 29 02:42 pg_subtrans\ndrwx------. 2 postgres postgres      6 May 29 02:42 pg_tblspc\ndrwx------. 2 postgres postgres      6 May 29 02:42 pg_twophase\n-rw-------. 1 postgres postgres      3 May 29 02:42 PG_VERSION\ndrwx------. 3 postgres postgres     60 May 29 02:42 pg_wal\ndrwx------. 2 postgres postgres     18 May 29 02:42 pg_xact\n-rw-------. 1 postgres postgres    372 May 29 02:42 postgresql.auto.conf\n-rw-------. 1 postgres postgres  28724 May 29 02:42 postgresql.conf\n-rw-------. 1 postgres postgres      0 May 29 02:42 standby.signal<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">Step 7: Check the replication slot<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Now connect the master server, you should be able to see the replication slot called book1 when you open the <code>pg_replication_slots<\/code> view as follows.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>mydb=# select * from pg_replication_slots ;\n-&#91; RECORD 1 ]-------+----------\nslot_name           | book1\nplugin              | \nslot_type           | physical\ndatoid              | \ndatabase            | \ntemporary           | f\nactive              | t\nactive_pid          | 3506\nxmin                | \ncatalog_xmin        | \nrestart_lsn         | 0\/3018E38\nconfirmed_flush_lsn | \nwal_status          | reserved\nsafe_wal_size       | \ntwo_phase           | f<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">#Now start PostgreSQL on a slave(standby) server.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 8: Check the status on Standby<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">We can check the status on standby using the below command.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>mydb=# select * from pg_stat_wal_receiver ;\n-&#91; RECORD 1 ]---------+------------------------------------------------------\npid                   | 3487\nstatus                | streaming\nreceive_start_lsn     | 0\/3000000\nreceive_start_tli     | 1\nwritten_lsn           | 0\/3018E38\nflushed_lsn           | 0\/3018E38\nreceived_tli          | 1\nlast_msg_send_time    | 2024-05-29 07:15:34.249873+00\nlast_msg_receipt_time | 2024-05-29 07:15:34.376013+00\nlatest_end_lsn        | 0\/3018E38\nlatest_end_time       | 2024-05-29 03:32:03.18865+00\nslot_name             | book1\nsender_host           | 10.206.0.2\nsender_port           | 5433\nconninfo              | user=replica passfile=\/var\/lib\/pgsql\/.pgpass channel_binding=prefer dbname=replication host=10.206.0.2 port=5433 fallback_application_name=walreceiver sslmode=prefer sslcompression=0 sslsni=1 ssl_min_protocol_version=TLSv1.2 gssencmode=prefer krbsrvname=postgres target_session_attrs=any\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion:<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Setting up PostgreSQL Streaming Replication for the first time was both a challenging and rewarding experience. This journey taught me the importance of meticulous planning, a thorough understanding of the underlying technology, and the ability to troubleshoot issues as they arise. Here are some key takeaways from my experience:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Understanding the Basics: Gaining a solid grasp of how streaming replication works is crucial. Knowing the differences between synchronous and asynchronous replication, and when to use each, can make a significant impact on your setup\u2019s reliability and performance.<\/li>\n\n\n\n<li>Proper Configuration: The configuration of the primary and standby servers is the backbone of a successful replication setup. Ensuring that parameters like <code>wal_level<\/code>, <code>max_wal_senders<\/code>, and <code>archive_mode<\/code> are correctly set is vital.<\/li>\n\n\n\n<li>Monitoring and Maintenance: Implementing monitoring tools to track replication status and performance is critical. Regular maintenance, such as vacuuming and analyzing databases, helps keep the replication environment healthy.<\/li>\n\n\n\n<li>Testing Failover: Regularly testing failover procedures ensures that the replication setup is reliable and that you can quickly recover in case of a primary server failure. This practice builds confidence in the system\u2019s resilience. I&#8217;ll be covering this topic in the next blog post.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">My first foray into PostgreSQL Streaming Replication was a significant learning curve, but it ultimately reinforced my skills and confidence in managing high-availability database systems. I hope this blog post has provided you with a comprehensive overview and practical insights into setting up streaming replication. Whether you are a novice or a seasoned DBA, these lessons can guide you through your own replication projects, ensuring a more resilient and reliable PostgreSQL environment.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Happy replicating!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Introduction: Embarking on my first customer engagement to set up PostgreSQL Streaming Replication was an insightful journey. As a Database [&hellip;]<\/p>\n","protected":false},"author":13,"featured_media":5720,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[23],"tags":[99],"class_list":["post-5709","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-postgresql-14","tag-postgres-14"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v25.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>The 101s of Postgres Streaming Replication - OpenSource DB<\/title>\n<meta name=\"robots\" content=\"noindex, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"The 101s of Postgres Streaming Replication - OpenSource DB\" \/>\n<meta property=\"og:description\" content=\"Introduction: Embarking on my first customer engagement to set up PostgreSQL Streaming Replication was an insightful journey. As a Database [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/test.opensource-db.in\/wp1\/the-101s-of-postgres-streaming-replication\/\" \/>\n<meta property=\"og:site_name\" content=\"OpenSource DB\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/people\/OpenSource-DB\/100072970755470\/\" \/>\n<meta property=\"article:published_time\" content=\"2024-05-29T07:53:33+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-05-29T07:53:34+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2024\/05\/image-2.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1800\" \/>\n\t<meta property=\"og:image:height\" content=\"945\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Shameer Bhupathi\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@opensource_db\" \/>\n<meta name=\"twitter:site\" content=\"@opensource_db\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Shameer Bhupathi\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/test.opensource-db.in\/wp1\/the-101s-of-postgres-streaming-replication\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/test.opensource-db.in\/wp1\/the-101s-of-postgres-streaming-replication\/\"},\"author\":{\"name\":\"Shameer Bhupathi\",\"@id\":\"https:\/\/test.opensource-db.in\/wp1\/#\/schema\/person\/422480fbefed0b2cee82aeab232110f5\"},\"headline\":\"The 101s of Postgres Streaming Replication\",\"datePublished\":\"2024-05-29T07:53:33+00:00\",\"dateModified\":\"2024-05-29T07:53:34+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/test.opensource-db.in\/wp1\/the-101s-of-postgres-streaming-replication\/\"},\"wordCount\":692,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/test.opensource-db.in\/wp1\/#organization\"},\"image\":{\"@id\":\"https:\/\/test.opensource-db.in\/wp1\/the-101s-of-postgres-streaming-replication\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2024\/05\/image-2.png\",\"keywords\":[\"postgres 14\"],\"articleSection\":[\"PostgreSQL 14\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/test.opensource-db.in\/wp1\/the-101s-of-postgres-streaming-replication\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/test.opensource-db.in\/wp1\/the-101s-of-postgres-streaming-replication\/\",\"url\":\"https:\/\/test.opensource-db.in\/wp1\/the-101s-of-postgres-streaming-replication\/\",\"name\":\"The 101s of Postgres Streaming Replication - OpenSource DB\",\"isPartOf\":{\"@id\":\"https:\/\/test.opensource-db.in\/wp1\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/test.opensource-db.in\/wp1\/the-101s-of-postgres-streaming-replication\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/test.opensource-db.in\/wp1\/the-101s-of-postgres-streaming-replication\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2024\/05\/image-2.png\",\"datePublished\":\"2024-05-29T07:53:33+00:00\",\"dateModified\":\"2024-05-29T07:53:34+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/test.opensource-db.in\/wp1\/the-101s-of-postgres-streaming-replication\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/test.opensource-db.in\/wp1\/the-101s-of-postgres-streaming-replication\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/test.opensource-db.in\/wp1\/the-101s-of-postgres-streaming-replication\/#primaryimage\",\"url\":\"https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2024\/05\/image-2.png\",\"contentUrl\":\"https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2024\/05\/image-2.png\",\"width\":1800,\"height\":945},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/test.opensource-db.in\/wp1\/the-101s-of-postgres-streaming-replication\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/test.opensource-db.in\/wp1\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"The 101s of Postgres Streaming Replication\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/test.opensource-db.in\/wp1\/#website\",\"url\":\"https:\/\/test.opensource-db.in\/wp1\/\",\"name\":\"OpenSource DB\",\"description\":\"Your Trusted OpenSource Databases partner\",\"publisher\":{\"@id\":\"https:\/\/test.opensource-db.in\/wp1\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/test.opensource-db.in\/wp1\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/test.opensource-db.in\/wp1\/#organization\",\"name\":\"OPENSOURCE DB PRIVATE LIMITED\",\"url\":\"https:\/\/test.opensource-db.in\/wp1\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/test.opensource-db.in\/wp1\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2021\/10\/osdb-logo-tm-2.png\",\"contentUrl\":\"https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2021\/10\/osdb-logo-tm-2.png\",\"width\":368,\"height\":120,\"caption\":\"OPENSOURCE DB PRIVATE LIMITED\"},\"image\":{\"@id\":\"https:\/\/test.opensource-db.in\/wp1\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/people\/OpenSource-DB\/100072970755470\/\",\"https:\/\/x.com\/opensource_db\",\"https:\/\/www.youtube.com\/channel\/UCmTI5h\",\"https:\/\/www.linkedin.com\/company\/opensource-db\",\"https:\/\/www.instagram.com\/opensource_db\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/test.opensource-db.in\/wp1\/#\/schema\/person\/422480fbefed0b2cee82aeab232110f5\",\"name\":\"Shameer Bhupathi\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/test.opensource-db.in\/wp1\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/2cfa95999202132ded07acd24f6faf25dca145a6c3efe47919204f115ffbf625?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/2cfa95999202132ded07acd24f6faf25dca145a6c3efe47919204f115ffbf625?s=96&d=mm&r=g\",\"caption\":\"Shameer Bhupathi\"},\"url\":\"https:\/\/test.opensource-db.in\/wp1\/author\/shameer-bhupathi\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"The 101s of Postgres Streaming Replication - OpenSource DB","robots":{"index":"noindex","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"og_locale":"en_US","og_type":"article","og_title":"The 101s of Postgres Streaming Replication - OpenSource DB","og_description":"Introduction: Embarking on my first customer engagement to set up PostgreSQL Streaming Replication was an insightful journey. As a Database [&hellip;]","og_url":"https:\/\/test.opensource-db.in\/wp1\/the-101s-of-postgres-streaming-replication\/","og_site_name":"OpenSource DB","article_publisher":"https:\/\/www.facebook.com\/people\/OpenSource-DB\/100072970755470\/","article_published_time":"2024-05-29T07:53:33+00:00","article_modified_time":"2024-05-29T07:53:34+00:00","og_image":[{"width":1800,"height":945,"url":"https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2024\/05\/image-2.png","type":"image\/png"}],"author":"Shameer Bhupathi","twitter_card":"summary_large_image","twitter_creator":"@opensource_db","twitter_site":"@opensource_db","twitter_misc":{"Written by":"Shameer Bhupathi","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/test.opensource-db.in\/wp1\/the-101s-of-postgres-streaming-replication\/#article","isPartOf":{"@id":"https:\/\/test.opensource-db.in\/wp1\/the-101s-of-postgres-streaming-replication\/"},"author":{"name":"Shameer Bhupathi","@id":"https:\/\/test.opensource-db.in\/wp1\/#\/schema\/person\/422480fbefed0b2cee82aeab232110f5"},"headline":"The 101s of Postgres Streaming Replication","datePublished":"2024-05-29T07:53:33+00:00","dateModified":"2024-05-29T07:53:34+00:00","mainEntityOfPage":{"@id":"https:\/\/test.opensource-db.in\/wp1\/the-101s-of-postgres-streaming-replication\/"},"wordCount":692,"commentCount":0,"publisher":{"@id":"https:\/\/test.opensource-db.in\/wp1\/#organization"},"image":{"@id":"https:\/\/test.opensource-db.in\/wp1\/the-101s-of-postgres-streaming-replication\/#primaryimage"},"thumbnailUrl":"https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2024\/05\/image-2.png","keywords":["postgres 14"],"articleSection":["PostgreSQL 14"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/test.opensource-db.in\/wp1\/the-101s-of-postgres-streaming-replication\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/test.opensource-db.in\/wp1\/the-101s-of-postgres-streaming-replication\/","url":"https:\/\/test.opensource-db.in\/wp1\/the-101s-of-postgres-streaming-replication\/","name":"The 101s of Postgres Streaming Replication - OpenSource DB","isPartOf":{"@id":"https:\/\/test.opensource-db.in\/wp1\/#website"},"primaryImageOfPage":{"@id":"https:\/\/test.opensource-db.in\/wp1\/the-101s-of-postgres-streaming-replication\/#primaryimage"},"image":{"@id":"https:\/\/test.opensource-db.in\/wp1\/the-101s-of-postgres-streaming-replication\/#primaryimage"},"thumbnailUrl":"https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2024\/05\/image-2.png","datePublished":"2024-05-29T07:53:33+00:00","dateModified":"2024-05-29T07:53:34+00:00","breadcrumb":{"@id":"https:\/\/test.opensource-db.in\/wp1\/the-101s-of-postgres-streaming-replication\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/test.opensource-db.in\/wp1\/the-101s-of-postgres-streaming-replication\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/test.opensource-db.in\/wp1\/the-101s-of-postgres-streaming-replication\/#primaryimage","url":"https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2024\/05\/image-2.png","contentUrl":"https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2024\/05\/image-2.png","width":1800,"height":945},{"@type":"BreadcrumbList","@id":"https:\/\/test.opensource-db.in\/wp1\/the-101s-of-postgres-streaming-replication\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/test.opensource-db.in\/wp1\/"},{"@type":"ListItem","position":2,"name":"The 101s of Postgres Streaming Replication"}]},{"@type":"WebSite","@id":"https:\/\/test.opensource-db.in\/wp1\/#website","url":"https:\/\/test.opensource-db.in\/wp1\/","name":"OpenSource DB","description":"Your Trusted OpenSource Databases partner","publisher":{"@id":"https:\/\/test.opensource-db.in\/wp1\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/test.opensource-db.in\/wp1\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/test.opensource-db.in\/wp1\/#organization","name":"OPENSOURCE DB PRIVATE LIMITED","url":"https:\/\/test.opensource-db.in\/wp1\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/test.opensource-db.in\/wp1\/#\/schema\/logo\/image\/","url":"https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2021\/10\/osdb-logo-tm-2.png","contentUrl":"https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2021\/10\/osdb-logo-tm-2.png","width":368,"height":120,"caption":"OPENSOURCE DB PRIVATE LIMITED"},"image":{"@id":"https:\/\/test.opensource-db.in\/wp1\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/people\/OpenSource-DB\/100072970755470\/","https:\/\/x.com\/opensource_db","https:\/\/www.youtube.com\/channel\/UCmTI5h","https:\/\/www.linkedin.com\/company\/opensource-db","https:\/\/www.instagram.com\/opensource_db\/"]},{"@type":"Person","@id":"https:\/\/test.opensource-db.in\/wp1\/#\/schema\/person\/422480fbefed0b2cee82aeab232110f5","name":"Shameer Bhupathi","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/test.opensource-db.in\/wp1\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/2cfa95999202132ded07acd24f6faf25dca145a6c3efe47919204f115ffbf625?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/2cfa95999202132ded07acd24f6faf25dca145a6c3efe47919204f115ffbf625?s=96&d=mm&r=g","caption":"Shameer Bhupathi"},"url":"https:\/\/test.opensource-db.in\/wp1\/author\/shameer-bhupathi\/"}]}},"rttpg_featured_image_url":{"full":["https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2024\/05\/image-2.png",1800,945,false],"landscape":["https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2024\/05\/image-2.png",1800,945,false],"portraits":["https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2024\/05\/image-2.png",1800,945,false],"thumbnail":["https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2024\/05\/image-2-150x150.png",150,150,true],"medium":["https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2024\/05\/image-2-300x158.png",300,158,true],"large":["https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2024\/05\/image-2-1024x538.png",1024,538,true],"1536x1536":["https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2024\/05\/image-2-1536x806.png",1536,806,true],"2048x2048":["https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2024\/05\/image-2.png",1800,945,false],"ultp_layout_landscape_large":["https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2024\/05\/image-2.png",1200,630,false],"ultp_layout_landscape":["https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2024\/05\/image-2.png",870,457,false],"ultp_layout_portrait":["https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2024\/05\/image-2.png",600,315,false],"ultp_layout_square":["https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2024\/05\/image-2.png",600,315,false]},"rttpg_author":{"display_name":"Shameer Bhupathi","author_link":"https:\/\/test.opensource-db.in\/wp1\/author\/shameer-bhupathi\/"},"rttpg_comment":0,"rttpg_category":"<a href=\"https:\/\/test.opensource-db.in\/wp1\/category\/postgres\/postgresql-14\/\" rel=\"category tag\">PostgreSQL 14<\/a>","rttpg_excerpt":"Introduction: Embarking on my first customer engagement to set up PostgreSQL Streaming Replication was an insightful journey. As a Database [&hellip;]","_links":{"self":[{"href":"https:\/\/test.opensource-db.in\/wp1\/wp-json\/wp\/v2\/posts\/5709","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/test.opensource-db.in\/wp1\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/test.opensource-db.in\/wp1\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/test.opensource-db.in\/wp1\/wp-json\/wp\/v2\/users\/13"}],"replies":[{"embeddable":true,"href":"https:\/\/test.opensource-db.in\/wp1\/wp-json\/wp\/v2\/comments?post=5709"}],"version-history":[{"count":11,"href":"https:\/\/test.opensource-db.in\/wp1\/wp-json\/wp\/v2\/posts\/5709\/revisions"}],"predecessor-version":[{"id":5728,"href":"https:\/\/test.opensource-db.in\/wp1\/wp-json\/wp\/v2\/posts\/5709\/revisions\/5728"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/test.opensource-db.in\/wp1\/wp-json\/wp\/v2\/media\/5720"}],"wp:attachment":[{"href":"https:\/\/test.opensource-db.in\/wp1\/wp-json\/wp\/v2\/media?parent=5709"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/test.opensource-db.in\/wp1\/wp-json\/wp\/v2\/categories?post=5709"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/test.opensource-db.in\/wp1\/wp-json\/wp\/v2\/tags?post=5709"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}