{"id":41495,"date":"2025-11-12T09:50:03","date_gmt":"2025-11-12T08:50:03","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/?p=41495"},"modified":"2025-11-12T09:50:03","modified_gmt":"2025-11-12T08:50:03","slug":"postgresql-19-logical-replication-of-sequences","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/postgresql-19-logical-replication-of-sequences\/","title":{"rendered":"PostgreSQL 19: Logical replication of sequences"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Logical replication in PostgreSQL got a lot of features and performance improvements over the last releases. It was introduced in PostgreSQL 10 back in 2017, and PostgreSQL 9.6 (in 2016) introduced logical decoding which is the basis for logical replication. Today logical replication is really mature and from my point of view only two major features are missing: DDL replication and the replication of sequences. The latter is now possible with the upcoming PostgreSQL 19 next year, and this is what this post is about.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Before we can see how this works we need a logical replication setup. An easy method to set this up is to create a physical replica and then transform that into a logical replica using <a href=\"https:\/\/www.postgresql.org\/docs\/18\/app-pgcreatesubscriber.html\">pg_createsubscriber<\/a>:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; highlight: [1,3,5,7,8,9,10]; title: ; notranslate\" title=\"\">\npostgres@:\/home\/postgres\/ &#x5B;pgdev] psql -c &quot;create table t ( a int primary key generated always as identity, b text)&quot;\nCREATE TABLE\npostgres@:\/home\/postgres\/ &#x5B;pgdev] psql -c &quot;insert into t (b) values (&#039;aaaa&#039;)&quot;\nINSERT 0 1\npostgres@:\/home\/postgres\/ &#x5B;pgdev] psql -c &quot;insert into t (b) values (&#039;bbbb&#039;)&quot;\nINSERT 0 1\npostgres@:\/home\/postgres\/ &#x5B;pgdev] pg_basebackup --pgdata=\/var\/tmp\/dummy --write-recovery-conf --checkpoint=fast\npostgres@:\/home\/postgres\/ &#x5B;pgdev] echo &quot;port=8888&quot; &gt;&gt; \/var\/tmp\/dummy\/postgresql.auto.conf \npostgres@:\/home\/postgres\/ &#x5B;pgdev] pg_createsubscriber --all --pgdata=\/var\/tmp\/dummy --subscriber-port=8888 --publisher-server=&quot;host=localhost,port=5432&quot;\npostgres@:\/home\/postgres\/ &#x5B;pgdev] pg_ctl --pgdata=\/var\/tmp\/dummy start\n2025-11-11 13:21:20.818 CET - 1 - 9669 -  - @ - 0LOG:  redirecting log output to logging collector process\n2025-11-11 13:21:20.818 CET - 2 - 9669 -  - @ - 0HINT:  Future log output will appear in directory &quot;pg_log&quot;.\n2025-11-11 13:21:21.250 CET - 1 - 9684 -  - @ - 0LOG:  redirecting log output to logging collector process\n2025-11-11 13:21:21.250 CET - 2 - 9684 -  - @ - 0HINT:  Future log output will appear in directory &quot;pg_log&quot;.\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Once this is done we have a logical replica and the data is synchronized:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; highlight: [1]; title: ; notranslate\" title=\"\">\npostgres@:\/home\/postgres\/ &#x5B;pgdev] psql -p 8888 -c &quot;select * from t&quot;\n a |  b   \n---+------\n 1 | aaaa\n 2 | bbbb\n(2 rows)\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">A quick check the replication is ongoing:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; highlight: [1,3]; title: ; notranslate\" title=\"\">\npostgres@:\/home\/postgres\/ &#x5B;pgdev] psql -p 5432 -c &quot;insert into t (b) values(&#039;cccc&#039;);&quot;\nINSERT 0 1\npostgres@:\/home\/postgres\/ &#x5B;pgdev] psql -p 8888 -c &quot;select * from t&quot;\n a |  b   \n---+------\n 1 | aaaa\n 2 | bbbb\n 3 | cccc\n(3 rows)\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">The &#8220;generated always as identidy&#8221; we used above to create the table automatically created a sequence for us:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; highlight: [1]; title: ; notranslate\" title=\"\">\nostgres@:\/home\/postgres\/ &#x5B;pgdev] psql -p 5432 -c &quot;\\x&quot; -c &quot;select * from pg_sequences;&quot;\nExpanded display is on.\n-&#x5B; RECORD 1 ]-+-----------\nschemaname    | public\nsequencename  | t_a_seq\nsequenceowner | postgres\ndata_type     | integer\nstart_value   | 1\nmin_value     | 1\nmax_value     | 2147483647\nincrement_by  | 1\ncycle         | f\ncache_size    | 1\nlast_value    | 3\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Checking the same sequence on the replica clearly shows that the sequence is not synchronized (last_value is still a 2):<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; highlight: [1]; title: ; notranslate\" title=\"\">\npostgres@:\/home\/postgres\/ &#x5B;pgdev] psql -p 8888 -c &quot;\\x&quot; -c &quot;select * from pg_sequences;&quot;\nExpanded display is on.\n-&#x5B; RECORD 1 ]-+-----------\nschemaname    | public\nsequencename  | t_a_seq\nsequenceowner | postgres\ndata_type     | integer\nstart_value   | 1\nmin_value     | 1\nmax_value     | 2147483647\nincrement_by  | 1\ncycle         | f\ncache_size    | 1\nlast_value    | 2\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">The reason is, that sequences are not synchronized automatically:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; highlight: [1,8]; title: ; notranslate\" title=\"\">\npostgres@:\/home\/postgres\/ &#x5B;pgdev] psql -p 5432 -c &quot;\\x&quot; -c &quot;select * from pg_publication;&quot;\nExpanded display is on.\n-&#x5B; RECORD 1 ]---+-------------------------------\noid             | 16397\npubname         | pg_createsubscriber_5_f58e9acd\npubowner        | 10\npuballtables    | t\npuballsequences | f\npubinsert       | t\npubupdate       | t\npubdelete       | t\npubtruncate     | t\npubviaroot      | f\npubgencols      | n\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">As there currently is no way to enable sequence synchronization for an existing publication we can either drop and re-create or add an additional publication and subscription just for the sequences:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; highlight: [1,3,22]; title: ; notranslate\" title=\"\">\npostgres@:\/home\/postgres\/ &#x5B;pgdev] psql -p 5432 -c &quot;create publication pubseq for all sequences;&quot;\nCREATE PUBLICATION\npostgres@:\/home\/postgres\/ &#x5B;pgdev] psql -p 5432 -c &quot;\\x&quot; -c &quot;select * from pg_publication;&quot;\nExpanded display is on.\n-&#x5B; RECORD 1 ]---+-------------------------------\noid             | 16397\npubname         | pg_createsubscriber_5_f58e9acd\npubowner        | 10\npuballtables    | t\npuballsequences | f\npubinsert       | t\npubupdate       | t\npubdelete       | t\npubtruncate     | t\npubviaroot      | f\npubgencols      | n\n-&#x5B; RECORD 2 ]---+-------------------------------\noid             | 16398\npubname         | pubseq\npubowner        | 10\npuballtables    | f\npuballsequences | t\npubinsert       | t\npubupdate       | t\npubdelete       | t\npubtruncate     | t\npubviaroot      | f\npubgencols      | n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">The publication has sequence replication enabled and the subscription to consume this can be created like this:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; highlight: [1]; title: ; notranslate\" title=\"\">\npostgres@:\/home\/postgres\/ &#x5B;pgdev] psql -p 8888 -c &quot;create subscription subseq connection &#039;host=localhost port=5432&#039; publication pubseq&quot;\nCREATE SUBSCRIPTION\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Now the sequence is visible in <a href=\"https:\/\/www.postgresql.org\/docs\/devel\/catalog-pg-subscription-rel.html\" target=\"_blank\" rel=\"noreferrer noopener\">pg_subscription_rel<\/a> on the subscriber:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; highlight: [1]; title: ; notranslate\" title=\"\">\npostgres@:\/home\/postgres\/ &#x5B;pgdev] psql -p 8888 -c &quot;select * from pg_subscription_rel;&quot;\n srsubid | srrelid | srsubstate |  srsublsn  \n---------+---------+------------+------------\n   24589 |   16385 | r          | \n   24590 |   16384 | r          | 0\/04004780   -- sequence\n(2 rows)\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">State &#8220;r&#8221; means ready, so the sequence should have synchronized, and indeed:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; highlight: [1,16]; title: ; notranslate\" title=\"\">\npostgres@:\/home\/postgres\/ &#x5B;pgdev] psql -p 8888 -c &quot;\\x&quot; -c &quot;select * from pg_sequences&quot;\nExpanded display is on.\n-&#x5B; RECORD 1 ]-+-----------\nschemaname    | public\nsequencename  | t_a_seq\nsequenceowner | postgres\ndata_type     | integer\nstart_value   | 1\nmin_value     | 1\nmax_value     | 2147483647\nincrement_by  | 1\ncycle         | f\ncache_size    | 1\nlast_value    | 3\n\npostgres@:\/home\/postgres\/ &#x5B;pgdev] psql -p 5432 -c &quot;\\x&quot; -c &quot;select * from pg_sequences&quot;\nExpanded display is on.\n-&#x5B; RECORD 1 ]-+-----------\nschemaname    | public\nsequencename  | t_a_seq\nsequenceowner | postgres\ndata_type     | integer\nstart_value   | 1\nmin_value     | 1\nmax_value     | 2147483647\nincrement_by  | 1\ncycle         | f\ncache_size    | 1\nlast_value    | 3\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Adding new rows to the table, which also increases the last_value of the sequence, should also synchronize the sequences:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; highlight: [1,3,5,20]; title: ; notranslate\" title=\"\">\npostgres@:\/home\/postgres\/ &#x5B;pgdev] psql -p 5432 -c &quot;insert into t (b) values (&#039;eeee&#039;)&quot;\nINSERT 0 1\npostgres@:\/home\/postgres\/ &#x5B;pgdev] psql -p 5432 -c &quot;insert into t (b) values (&#039;ffff&#039;)&quot;\nINSERT 0 1\npostgres@:\/home\/postgres\/ &#x5B;pgdev] psql -p 5432 -c &quot;\\x&quot; -c &quot;select * from pg_sequences&quot;\nExpanded display is on.\n-&#x5B; RECORD 1 ]-+-----------\nschemaname    | public\nsequencename  | t_a_seq\nsequenceowner | postgres\ndata_type     | integer\nstart_value   | 1\nmin_value     | 1\nmax_value     | 2147483647\nincrement_by  | 1\ncycle         | f\ncache_size    | 1\nlast_value    | 6\n\npostgres@:\/home\/postgres\/ &#x5B;pgdev] psql -p 8888 -c &quot;\\x&quot; -c &quot;select * from pg_sequences&quot;\nExpanded display is on.\n-&#x5B; RECORD 1 ]-+-----------\nschemaname    | public\nsequencename  | t_a_seq\nsequenceowner | postgres\ndata_type     | integer\nstart_value   | 1\nmin_value     | 1\nmax_value     | 2147483647\nincrement_by  | 1\ncycle         | f\ncache_size    | 1\nlast_value    | 4\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">&#8230; but is not happening automatically. To get them synchronized you need to refresh the subscription:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; highlight: [1,4]; title: ; notranslate\" title=\"\">\npostgres@:\/home\/postgres\/ &#x5B;pgdev] psql -p 8888 -c &quot;\\x&quot; -c &quot;alter subscription subseq refresh sequences&quot;\nExpanded display is on.\nALTER SUBSCRIPTION\npostgres@:\/home\/postgres\/ &#x5B;pgdev] psql -p 8888 -c &quot;\\x&quot; -c &quot;select * from pg_sequences&quot;\nExpanded display is on.\n-&#x5B; RECORD 1 ]-+-----------\nschemaname    | public\nsequencename  | t_a_seq\nsequenceowner | postgres\ndata_type     | integer\nstart_value   | 1\nmin_value     | 1\nmax_value     | 2147483647\nincrement_by  | 1\ncycle         | f\ncache_size    | 1\nlast_value    | 6\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Great, this reduces the work to fix the sequences quite a bit and is really helpful. As usual, thanks to all involved.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Logical replication in PostgreSQL got a lot of features and performance improvements over the last releases. It was introduced in PostgreSQL 10 back in 2017, and PostgreSQL 9.6 (in 2016) introduced logical decoding which is the basis for logical replication. Today logical replication is really mature and from my point of view only two major&hellip;&nbsp;<\/p>\n","protected":false},"author":28,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"neve_meta_sidebar":"","neve_meta_container":"","neve_meta_enable_content_width":"","neve_meta_content_width":0,"neve_meta_title_alignment":"","neve_meta_author_avatar":"","neve_post_elements_order":"","neve_meta_disable_header":"","neve_meta_disable_footer":"","neve_meta_disable_title":"","neve_meta_reading_time":"","_themeisle_gutenberg_block_has_review":false,"footnotes":""},"categories":[4133],"tags":[],"class_list":["post-41495","post","type-post","status-publish","format-standard","hentry","category-database"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v28.8 (Yoast SEO v28.8) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>PostgreSQL 19: Logical replication of sequences - dbi services | Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.dbi-services.com\/blog\/postgresql-19-logical-replication-of-sequences\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"PostgreSQL 19: Logical replication of sequences\" \/>\n<meta property=\"og:description\" content=\"Logical replication in PostgreSQL got a lot of features and performance improvements over the last releases. It was introduced in PostgreSQL 10 back in 2017, and PostgreSQL 9.6 (in 2016) introduced logical decoding which is the basis for logical replication. Today logical replication is really mature and from my point of view only two major&hellip;&nbsp;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/postgresql-19-logical-replication-of-sequences\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi services | Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/dbiservices\/\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-12T08:50:03+00:00\" \/>\n<meta name=\"author\" content=\"Open source Team\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@dbiservices\" \/>\n<meta name=\"twitter:site\" content=\"@dbiservices\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Open source Team\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/postgresql-19-logical-replication-of-sequences\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/postgresql-19-logical-replication-of-sequences\\\/\"},\"author\":{\"name\":\"Open source Team\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/person\\\/0b4548362cac3eeff8b3eaf329e3530a\"},\"headline\":\"PostgreSQL 19: Logical replication of sequences\",\"datePublished\":\"2025-11-12T08:50:03+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/postgresql-19-logical-replication-of-sequences\\\/\"},\"wordCount\":319,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#organization\"},\"articleSection\":[\"Database\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/postgresql-19-logical-replication-of-sequences\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/postgresql-19-logical-replication-of-sequences\\\/\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/postgresql-19-logical-replication-of-sequences\\\/\",\"name\":\"PostgreSQL 19: Logical replication of sequences - dbi services | Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#website\"},\"datePublished\":\"2025-11-12T08:50:03+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/postgresql-19-logical-replication-of-sequences\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/postgresql-19-logical-replication-of-sequences\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/postgresql-19-logical-replication-of-sequences\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"PostgreSQL 19: Logical replication of sequences\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/\",\"name\":\"dbi services Blog\",\"description\":\"#BeSharing\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#organization\"},\"alternateName\":\"dbi Blog\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#organization\",\"name\":\"dbi services\",\"alternateName\":\"dbi\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/dbi-services-logo.png\",\"contentUrl\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/dbi-services-logo.png\",\"width\":512,\"height\":512,\"caption\":\"dbi services\"},\"image\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/dbiservices\\\/\",\"https:\\\/\\\/x.com\\\/dbiservices\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/dbi-services\\\/\",\"https:\\\/\\\/www.youtube.com\\\/user\\\/dbiservices\"],\"description\":\"Swiss IT consulting and services company specialised in efficient data infrastructures and platforms: databases, application servers, cloud, DevOps, digitalization, analytics, data quality and monitoring. Headquartered in Del\u00e9mont with offices in Nyon, Basel, Bern and Zurich.\",\"email\":\"info@dbi-services.com\",\"telephone\":\"+41 32 422 96 00\",\"legalName\":\"dbi services SA\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/person\\\/0b4548362cac3eeff8b3eaf329e3530a\",\"name\":\"Open source Team\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/2022\\\/05\\\/open-source-author.png\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/2022\\\/05\\\/open-source-author.png\",\"contentUrl\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/2022\\\/05\\\/open-source-author.png\",\"caption\":\"Open source Team\"},\"description\":\"Posts published under the Open source Team account are collective contributions by the dbi services open infrastructure consultants. The practice covers open-source databases and platforms, PostgreSQL first of all, along with MySQL, MariaDB, and Linux, from architecture, replication, and high availability to performance tuning and operations under service level agreements, and contributes actively to the PostgreSQL community.\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/author\\\/open-source-team\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"PostgreSQL 19: Logical replication of sequences - dbi services | Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.dbi-services.com\/blog\/postgresql-19-logical-replication-of-sequences\/","og_locale":"en_US","og_type":"article","og_title":"PostgreSQL 19: Logical replication of sequences","og_description":"Logical replication in PostgreSQL got a lot of features and performance improvements over the last releases. It was introduced in PostgreSQL 10 back in 2017, and PostgreSQL 9.6 (in 2016) introduced logical decoding which is the basis for logical replication. Today logical replication is really mature and from my point of view only two major&hellip;&nbsp;","og_url":"https:\/\/www.dbi-services.com\/blog\/postgresql-19-logical-replication-of-sequences\/","og_site_name":"dbi services | Blog","article_publisher":"https:\/\/www.facebook.com\/dbiservices\/","article_published_time":"2025-11-12T08:50:03+00:00","author":"Open source Team","twitter_card":"summary_large_image","twitter_creator":"@dbiservices","twitter_site":"@dbiservices","twitter_misc":{"Written by":"Open source Team","Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dbi-services.com\/blog\/postgresql-19-logical-replication-of-sequences\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/postgresql-19-logical-replication-of-sequences\/"},"author":{"name":"Open source Team","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/0b4548362cac3eeff8b3eaf329e3530a"},"headline":"PostgreSQL 19: Logical replication of sequences","datePublished":"2025-11-12T08:50:03+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/postgresql-19-logical-replication-of-sequences\/"},"wordCount":319,"commentCount":0,"publisher":{"@id":"https:\/\/www.dbi-services.com\/blog\/#organization"},"articleSection":["Database"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbi-services.com\/blog\/postgresql-19-logical-replication-of-sequences\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/postgresql-19-logical-replication-of-sequences\/","url":"https:\/\/www.dbi-services.com\/blog\/postgresql-19-logical-replication-of-sequences\/","name":"PostgreSQL 19: Logical replication of sequences - dbi services | Blog","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"datePublished":"2025-11-12T08:50:03+00:00","breadcrumb":{"@id":"https:\/\/www.dbi-services.com\/blog\/postgresql-19-logical-replication-of-sequences\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/postgresql-19-logical-replication-of-sequences\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/postgresql-19-logical-replication-of-sequences\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dbi-services.com\/blog\/"},{"@type":"ListItem","position":2,"name":"PostgreSQL 19: Logical replication of sequences"}]},{"@type":"WebSite","@id":"https:\/\/www.dbi-services.com\/blog\/#website","url":"https:\/\/www.dbi-services.com\/blog\/","name":"dbi services Blog","description":"#BeSharing","publisher":{"@id":"https:\/\/www.dbi-services.com\/blog\/#organization"},"alternateName":"dbi Blog","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.dbi-services.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.dbi-services.com\/blog\/#organization","name":"dbi services","alternateName":"dbi","url":"https:\/\/www.dbi-services.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/2026\/09\/dbi-services-logo.png","contentUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/2026\/09\/dbi-services-logo.png","width":512,"height":512,"caption":"dbi services"},"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/dbiservices\/","https:\/\/x.com\/dbiservices","https:\/\/www.linkedin.com\/company\/dbi-services\/","https:\/\/www.youtube.com\/user\/dbiservices"],"description":"Swiss IT consulting and services company specialised in efficient data infrastructures and platforms: databases, application servers, cloud, DevOps, digitalization, analytics, data quality and monitoring. Headquartered in Del\u00e9mont with offices in Nyon, Basel, Bern and Zurich.","email":"info@dbi-services.com","telephone":"+41 32 422 96 00","legalName":"dbi services SA"},{"@type":"Person","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/0b4548362cac3eeff8b3eaf329e3530a","name":"Open source Team","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/2022\/05\/open-source-author.png","url":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/2022\/05\/open-source-author.png","contentUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/2022\/05\/open-source-author.png","caption":"Open source Team"},"description":"Posts published under the Open source Team account are collective contributions by the dbi services open infrastructure consultants. The practice covers open-source databases and platforms, PostgreSQL first of all, along with MySQL, MariaDB, and Linux, from architecture, replication, and high availability to performance tuning and operations under service level agreements, and contributes actively to the PostgreSQL community.","url":"https:\/\/www.dbi-services.com\/blog\/author\/open-source-team\/"}]}},"_links":{"self":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/41495","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/users\/28"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/comments?post=41495"}],"version-history":[{"count":0,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/41495\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=41495"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=41495"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=41495"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}