[{"data":1,"prerenderedAt":123},["ShallowReactive",2],{"term-l\u002Flogical-replication":3,"related-l\u002Flogical-replication":108},{"id":4,"title":5,"acronym":6,"body":7,"category":89,"description":90,"difficulty":91,"extension":92,"letter":93,"meta":94,"navigation":95,"path":96,"related":97,"seo":102,"sitemap":103,"stem":106,"subcategory":6,"__hash__":107},"terms\u002Fterms\u002Fl\u002Flogical-replication.md","Logical Replication",null,{"type":8,"value":9,"toc":83},"minimark",[10,15,19,23,26,30,72,76,79],[11,12,14],"h2",{"id":13},"eli5-the-vibe-check","ELI5 - The Vibe Check",[16,17,18],"p",{},"Physical replication copies a database byte for byte, same version, same everything. Logical replication is smarter and messier: it replicates actual row changes (insert this, update that) instead of raw bytes, which means you can replicate between different Postgres versions, replicate just one table, or feed those changes into something that isn't even Postgres at all.",[11,20,22],{"id":21},"real-talk","Real Talk",[16,24,25],{},"Logical replication streams row-level data changes (inserts, updates, deletes) decoded from the write-ahead log, rather than copying physical disk blocks. Unlike physical replication, it allows replicating a subset of tables and replicating across major database versions, and it's the mechanism tools like Debezium and Postgres's built-in publication and subscription model use to feed changes into other systems.",[11,27,29],{"id":28},"show-me-the-code","Show Me The Code",[31,32,37],"pre",{"className":33,"code":34,"language":35,"meta":36,"style":36},"language-sql shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","-- Postgres logical replication\nCREATE PUBLICATION my_pub FOR TABLE orders;\nCREATE SUBSCRIPTION my_sub\n  CONNECTION 'host=other-host dbname=app'\n  PUBLICATION my_pub;\n","sql","",[38,39,40,48,54,60,66],"code",{"__ignoreMap":36},[41,42,45],"span",{"class":43,"line":44},"line",1,[41,46,47],{},"-- Postgres logical replication\n",[41,49,51],{"class":43,"line":50},2,[41,52,53],{},"CREATE PUBLICATION my_pub FOR TABLE orders;\n",[41,55,57],{"class":43,"line":56},3,[41,58,59],{},"CREATE SUBSCRIPTION my_sub\n",[41,61,63],{"class":43,"line":62},4,[41,64,65],{},"  CONNECTION 'host=other-host dbname=app'\n",[41,67,69],{"class":43,"line":68},5,[41,70,71],{},"  PUBLICATION my_pub;\n",[11,73,75],{"id":74},"when-youll-hear-this","When You'll Hear This",[16,77,78],{},"\"We use logical replication to stream just the orders table into the analytics database.\" \u002F \"Logical replication let us upgrade Postgres versions with near-zero downtime.\"",[80,81,82],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":36,"searchDepth":50,"depth":50,"links":84},[85,86,87,88],{"id":13,"depth":50,"text":14},{"id":21,"depth":50,"text":22},{"id":28,"depth":50,"text":29},{"id":74,"depth":50,"text":75},"database","Physical replication copies a database byte for byte, same version, same everything.","advanced","md","l",{},true,"\u002Fterms\u002Fl\u002Flogical-replication",[98,99,100,101],"Write-Ahead Log","Change Data Capture","Debezium","Read Replica",{"title":5,"description":90},{"changefreq":104,"priority":105},"weekly",0.7,"terms\u002Fl\u002Flogical-replication","k9wjt3YUW6So3vXDWY9A2SP0CkjRNQVYtDsvhDulw0c",[109,113,116,120],{"title":99,"path":110,"acronym":6,"category":111,"difficulty":91,"description":112},"\u002Fterms\u002Fc\u002Fchange-data-capture","backend","Change Data Capture (CDC) watches your database for changes and streams them as events.",{"title":100,"path":114,"acronym":6,"category":111,"difficulty":91,"description":115},"\u002Fterms\u002Fd\u002Fdebezium","Debezium is the nosy coworker who reads your database's diary.",{"title":101,"path":117,"acronym":6,"category":89,"difficulty":118,"description":119},"\u002Fterms\u002Fr\u002Fread-replica","intermediate","A read replica is a copy of your database that only handles read queries.",{"title":98,"path":121,"acronym":6,"category":89,"difficulty":91,"description":122},"\u002Fterms\u002Fw\u002Fwrite-ahead-log","The Write-Ahead Log (WAL) is the database's diary. Before changing any actual data, the database first writes what it's about to do in this log.",1792528097510]