{"id":9950,"date":"2017-04-13T14:03:33","date_gmt":"2017-04-13T12:03:33","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/in-core-logical-replication-will-hit-postgresql-10\/"},"modified":"2017-04-13T14:03:33","modified_gmt":"2017-04-13T12:03:33","slug":"in-core-logical-replication-will-hit-postgresql-10","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/in-core-logical-replication-will-hit-postgresql-10\/","title":{"rendered":"In-core logical replication will hit PostgreSQL 10"},"content":{"rendered":"<p>Finally in PostgreSQL 10 (expected to be released this September) a long awaited feature will probably appear: In-core logical replication. PostgreSQL supports physical replication since version 9.0 and now the next step happened with the implementation of logical replication. This will be a major help in upgrading PostgreSQL instances from one version to another with no (or almost no) downtime. In addition this can be used to consolidate data from various instances into one instance for reporting purposes or you can use it to distribute only a subset of your data to selected users on other instances. In contrast to physical replication logical replication works on the table level so you can replicate changes in one or more tables, one database are all databases in a PostgreSQL instance which is quite flexible.<\/p>\n<p><!--more--><\/p>\n<p>In PostgreSQL logical replication is implemented using a publisher and subscriber model. This mean the publisher is the one who will send the data and the subscriber is the one who will receive and apply the changes. A subscriber can be a publisher as well so you can build cascading logical replication. Here is an overview of a possible setup:<\/p>\n<p><a href=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/pg-logocal-replication-overview.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/pg-logocal-replication-overview.png\" alt=\"pg-logocal-replication-overview\" width=\"838\" height=\"529\" class=\"aligncenter size-full wp-image-15873\" \/><\/a><\/p>\n<p>For setting up logical replication when you do not start with an empty database you&#8217;ll need to initially load the database where you want to replicate to. How can you do that? I have two PostgreSQL 10 instances (build from the git sources) running on the same host:<\/p>\n<table>\n<tbody>\n<tr>\n<th>Role<\/th>\n<th>Port<\/th>\n<\/tr>\n<tr>\n<td>Publisher<\/td>\n<td>6666<\/td>\n<\/tr>\n<tr>\n<td>Subsriber<\/td>\n<td>6667<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Lets assume we have this sample setup on the publisher instance:<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">drop table if exists t1;\ncreate table t1 ( a int primary key\n                , b varchar(100)\n                );\nwith generator as \n ( select a.*\n     from generate_series ( 1, 5000000 ) a\n    order by random()\n )\ninsert into t1 ( a,b ) \n     select a\n          , md5(a::varchar)\n       from generator;\nselect * from pg_size_pretty ( pg_relation_size ('t1' ));\n<\/pre>\n<p>On the subscriber instance there is the same table, but empty:<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">create table t1 ( a int primary key\n                , b varchar(100)\n                );\n<\/pre>\n<p>Before we start with the initial load lets take a look at the process list:<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [8,15]\">\npostgres@pgbox:\/home\/postgres\/ [PUBLISHER] ps -ef | egrep \"PUBLISHER|SUBSCRIBER\"\npostgres 17311     1  0 11:33 pts\/0    00:00:00 \/u01\/app\/postgres\/product\/dev\/db_01\/bin\/postgres -D \/u02\/pgdata\/PUBLISHER\npostgres 17313 17311  0 11:33 ?        00:00:00 postgres: PUBLISHER: checkpointer process   \npostgres 17314 17311  0 11:33 ?        00:00:00 postgres: PUBLISHER: writer process   \npostgres 17315 17311  0 11:33 ?        00:00:00 postgres: PUBLISHER: wal writer process   \npostgres 17316 17311  0 11:33 ?        00:00:00 postgres: PUBLISHER: autovacuum launcher process   \npostgres 17317 17311  0 11:33 ?        00:00:00 postgres: PUBLISHER: stats collector process   \npostgres 17318 17311  0 11:33 ?        00:00:00 postgres: PUBLISHER: bgworker: logical replication launcher   \npostgres 17321     1  0 11:33 pts\/1    00:00:00 \/u01\/app\/postgres\/product\/dev\/db_01\/bin\/postgres -D \/u02\/pgdata\/SUBSCRIBER\npostgres 17323 17321  0 11:33 ?        00:00:00 postgres: SUBSCRIBER: checkpointer process   \npostgres 17324 17321  0 11:33 ?        00:00:00 postgres: SUBSCRIBER: writer process   \npostgres 17325 17321  0 11:33 ?        00:00:00 postgres: SUBSCRIBER: wal writer process   \npostgres 17326 17321  0 11:33 ?        00:00:00 postgres: SUBSCRIBER: autovacuum launcher process   \npostgres 17327 17321  0 11:33 ?        00:00:00 postgres: SUBSCRIBER: stats collector process   \npostgres 17328 17321  0 11:33 ?        00:00:00 postgres: SUBSCRIBER: bgworker: logical replication launcher   \n<\/pre>\n<p>You&#8217;ll notice that there is a new background process called &#8220;bgworker: logical replication launcher&#8221;. We&#8217;ll come back to that later.<\/p>\n<p>Time to create our first publication on the publisher with the <a href=\"https:\/\/www.postgresql.org\/docs\/devel\/static\/sql-createpublication.html\" target=\"_blank\">create publication<\/a> command:<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">\npostgres@pgbox:\/u02\/pgdata\/PUBLISHER\/ [PUBLISHER] psql -X postgres\npsql (10devel)\nType \"help\" for help.\n\npostgres=# create publication my_first_publication for table t1;\nCREATE PUBLICATION\n<\/pre>\n<p>On the subscriber we need to create a subscription by using the <a href=\"https:\/\/www.postgresql.org\/docs\/devel\/static\/sql-createsubscription.html\" target=\"_blank\">create subscription<\/a> command:<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">\npostgres@pgbox:\/u02\/pgdata\/SUBSCRIBER\/ [SUBSCRIBER] psql -X postgres\npsql (10devel)\nType \"help\" for help.\n\npostgres=# create subscription my_first_subscription connection 'host=localhost port=6666 dbname=postgres user=postgres' publication my_first_publication;\nERROR:  could not create replication slot \"my_first_subscription\": ERROR:  logical decoding requires wal_level &gt;= logical\n<\/pre>\n<p>Ok, good hint. After changing that on both instances:<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">\npostgres@pgbox:\/home\/postgres\/ [SUBSCRIBER] psql -X postgres\npsql (10devel)\nType \"help\" for help.\n\npostgres=# create subscription my_first_subscription connection 'host=localhost port=6666 dbname=postgres user=postgres' publication my_first_publication;\nCREATE SUBSCRIPTION\n<\/pre>\n<p>If you are not on super fast hardware and check the process list again you&#8217;ll see something like this:<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">\npostgres 19465 19079 19 11:58 ?        00:00:04 postgres: SUBSCRIBER: bgworker: logical replication worker for subscription 16390 sync 16384  \n<\/pre>\n<p>On the subscriber the &#8220;logical replication launcher&#8221; background process launched a worker process and syncs the table automatically (this can be avoided by using the &#8220;NOCOPY DATA&#8221;):<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">\npostgres=# show port;\n port \n------\n 6667\n(1 row)\n\npostgres=# select count(*) from t1;\n  count  \n---------\n 5000000\n(1 row)\n<\/pre>\n<p>Wow, that was really easy. You can find more details in the logfile of the subscriber instance:<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">\n2017-04-13 11:58:15.099 CEST - 1 - 19087 -  - @ LOG:  starting logical replication worker for subscription \"my_first_subscription\"\n2017-04-13 11:58:15.101 CEST - 1 - 19463 -  - @ LOG:  logical replication apply for subscription my_first_subscription started\n2017-04-13 11:58:15.104 CEST - 2 - 19463 -  - @ LOG:  starting logical replication worker for subscription \"my_first_subscription\"\n2017-04-13 11:58:15.105 CEST - 1 - 19465 -  - @ LOG:  logical replication sync for subscription my_first_subscription, table t1 started\n2017-04-13 11:59:03.373 CEST - 1 - 19082 -  - @ LOG:  checkpoint starting: xlog\n2017-04-13 11:59:37.985 CEST - 2 - 19082 -  - @ LOG:  checkpoint complete: wrote 14062 buffers (85.8%); 1 transaction log file(s) added, 0 removed, 0 recycled; write=26.959 s, sync=2.291 s, total=34.740 s; sync files=13, longest=1.437 s, average=0.171 s; distance=405829 kB, estimate=405829 kB\n2017-04-13 12:02:23.728 CEST - 2 - 19465 -  - @ LOG:  logical replication synchronization worker finished processing\n<\/pre>\n<p>On the publisher instance you get another process for sending the changes to the subscriber:<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">\npostgres 19464 18318  0 11:58 ?        00:00:00 postgres: PUBLISHER: wal sender process postgres ::1(41768) idle\n<\/pre>\n<p>Changes to the table on the publisher should now get replicated to the subscriber node:<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">\npostgres=# show port;\n port \n------\n 6666\n(1 row)\npostgres=# insert into t1 (a,b) values (-1,'aaaaa');\nINSERT 0 1\npostgres=# update t1 set b='bbbbb' where a=-1;\nUPDATE 1\n<\/pre>\n<p>On the subscriber node:<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">\npostgres=# show port;\n port \n------\n 6667\n(1 row)\n\npostgres=# select * from t1 where a = -1;\n a  |   b   \n----+-------\n -1 | aaaaa\n(1 row)\n\npostgres=# select * from t1 where a = -1;\n a  |   b   \n----+-------\n -1 | bbbbb\n(1 row)\n<\/pre>\n<p>As mentioned initially you can make the subscriber a publisher and the publisher a subscriber at the same time. So when we create this table on both instances:<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">\ncreate table t2 ( a int primary key );\n<\/pre>\n<p>Then create a publication on the subscriber node: <\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">\npostgres=# create table t2 ( a int primary key );\nCREATE TABLE\npostgres=# show port;\n port \n------\n 6667\n(1 row)\n\npostgres=# create publication my_second_publication for table t2;\nCREATE PUBLICATION\npostgres=# \n<\/pre>\n<p>Then create the subscription to that on the publisher node:<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">\npostgres=# show port;\n port \n------\n 6666\n(1 row)\n\npostgres=# create subscription my_second_subscription connection 'host=localhost port=6667 dbname=postgres user=postgres' publication my_second_publication;\nCREATE SUBSCRIPTION\n<\/pre>\n<p>&#8230; we have a second logical replication the other way around:<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">\npostgres=# show port;\n port \n------\n 6667\n(1 row)\npostgres=# insert into t2 values ( 1 );\nINSERT 0 1\npostgres=# insert into t2 values ( 2 );\nINSERT 0 1\npostgres=# \n<\/pre>\n<p>On the other instance:<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">\npostgres=# show port;\n port \n------\n 6666\n(1 row)\n\npostgres=# select * from t2;\n a \n---\n 1\n 2\n(2 rows)\n<\/pre>\n<p>There are two new catalog views which give you information about subscriptions and publications:<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">\npostgres=# select * from pg_subscription;\n subdbid |        subname         | subowner | subenabled |                      subconninfo                       |      subslotname       |     subpublications     \n---------+------------------------+----------+------------+--------------------------------------------------------+------------------------+-------------------------\n   13216 | my_second_subscription |       10 | t          | host=localhost port=6667 dbname=postgres user=postgres | my_second_subscription | {my_second_publication}\n(1 row)\n\npostgres=# select * from pg_publication;\n       pubname        | pubowner | puballtables | pubinsert | pubupdate | pubdelete \n----------------------+----------+--------------+-----------+-----------+-----------\n my_first_publication |       10 | f            | t         | t         | t\n(1 row)\n<\/pre>\n<p>What a cool feature and so easy to use. Thanks to all who brought that into PostgreSQL 10, great work.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Finally in PostgreSQL 10 (expected to be released this September) a long awaited feature will probably appear: In-core logical replication. PostgreSQL supports physical replication since version 9.0 and now the next step happened with the implementation of logical replication. This will be a major help in upgrading PostgreSQL instances from one version to another with [&hellip;]<\/p>\n","protected":false},"author":29,"featured_media":9952,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[229],"tags":[1074,77],"type_dbi":[],"class_list":["post-9950","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-database-administration-monitoring","tag-logical-replication","tag-postgresql"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.2 (Yoast SEO v27.4) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>In-core logical replication will hit PostgreSQL 10 - dbi 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\/in-core-logical-replication-will-hit-postgresql-10\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"In-core logical replication will hit PostgreSQL 10\" \/>\n<meta property=\"og:description\" content=\"Finally in PostgreSQL 10 (expected to be released this September) a long awaited feature will probably appear: In-core logical replication. PostgreSQL supports physical replication since version 9.0 and now the next step happened with the implementation of logical replication. This will be a major help in upgrading PostgreSQL instances from one version to another with [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/in-core-logical-replication-will-hit-postgresql-10\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2017-04-13T12:03:33+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/pg_logical_replication_overview.png\" \/>\n\t<meta property=\"og:image:width\" content=\"900\" \/>\n\t<meta property=\"og:image:height\" content=\"519\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Daniel Westermann\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@westermanndanie\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Daniel Westermann\" \/>\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:\\\/\\\/www.dbi-services.com\\\/blog\\\/in-core-logical-replication-will-hit-postgresql-10\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/in-core-logical-replication-will-hit-postgresql-10\\\/\"},\"author\":{\"name\":\"Daniel Westermann\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/person\\\/8d08e9bd996a89bd75c0286cbabf3c66\"},\"headline\":\"In-core logical replication will hit PostgreSQL 10\",\"datePublished\":\"2017-04-13T12:03:33+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/in-core-logical-replication-will-hit-postgresql-10\\\/\"},\"wordCount\":536,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/in-core-logical-replication-will-hit-postgresql-10\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/2\\\/2022\\\/04\\\/pg_logical_replication_overview.png\",\"keywords\":[\"Logical Replication\",\"PostgreSQL\"],\"articleSection\":[\"Database Administration &amp; Monitoring\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/in-core-logical-replication-will-hit-postgresql-10\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/in-core-logical-replication-will-hit-postgresql-10\\\/\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/in-core-logical-replication-will-hit-postgresql-10\\\/\",\"name\":\"In-core logical replication will hit PostgreSQL 10 - dbi Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/in-core-logical-replication-will-hit-postgresql-10\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/in-core-logical-replication-will-hit-postgresql-10\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/2\\\/2022\\\/04\\\/pg_logical_replication_overview.png\",\"datePublished\":\"2017-04-13T12:03:33+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/person\\\/8d08e9bd996a89bd75c0286cbabf3c66\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/in-core-logical-replication-will-hit-postgresql-10\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/in-core-logical-replication-will-hit-postgresql-10\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/in-core-logical-replication-will-hit-postgresql-10\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/2\\\/2022\\\/04\\\/pg_logical_replication_overview.png\",\"contentUrl\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/2\\\/2022\\\/04\\\/pg_logical_replication_overview.png\",\"width\":900,\"height\":519},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/in-core-logical-replication-will-hit-postgresql-10\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"In-core logical replication will hit PostgreSQL 10\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/\",\"name\":\"dbi Blog\",\"description\":\"\",\"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\":\"Person\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/person\\\/8d08e9bd996a89bd75c0286cbabf3c66\",\"name\":\"Daniel Westermann\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/31350ceeecb1dd8986339a29bf040d4cd3cd087d410deccd8f55234466d6c317?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/31350ceeecb1dd8986339a29bf040d4cd3cd087d410deccd8f55234466d6c317?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/31350ceeecb1dd8986339a29bf040d4cd3cd087d410deccd8f55234466d6c317?s=96&d=mm&r=g\",\"caption\":\"Daniel Westermann\"},\"description\":\"Daniel Westermann is Principal Consultant and Technology Leader Open Infrastructure at dbi services. He has more than 15 years of experience in management, engineering and optimization of databases and infrastructures, especially on Oracle and PostgreSQL. Since the beginning of his career, he has specialized in Oracle Technologies and is Oracle Certified Professional 12c and Oracle Certified Expert RAC\\\/GridInfra. Over time, Daniel has become increasingly interested in open source technologies, becoming \u201cTechnology Leader Open Infrastructure\u201d and PostgreSQL expert. \u00a0Based on community or EnterpriseDB tools, he develops and installs complex high available solutions with PostgreSQL. He is also a certified PostgreSQL Plus 9.0 Professional and a Postgres Advanced Server 9.4 Professional. He is a regular speaker at PostgreSQL conferences in Switzerland and Europe. Today Daniel is also supporting our customers on AWS services such as AWS RDS, database migrations into the cloud, EC2 and automated infrastructure management with AWS SSM (System Manager). He is a certified AWS Solutions Architect Professional. Prior to dbi services, Daniel was Management System Engineer at LC SYSTEMS-Engineering AG in Basel. Before that, he worked as Oracle Developper &amp;\u00a0Project Manager at Delta Energy Solutions AG in Basel (today Powel AG). Daniel holds a diploma in Business Informatics (DHBW, Germany). His branch-related experience mainly covers the pharma industry, the financial sector, energy, lottery and telecommunications.\",\"sameAs\":[\"https:\\\/\\\/x.com\\\/westermanndanie\"],\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/author\\\/daniel-westermann\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"In-core logical replication will hit PostgreSQL 10 - dbi 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\/in-core-logical-replication-will-hit-postgresql-10\/","og_locale":"en_US","og_type":"article","og_title":"In-core logical replication will hit PostgreSQL 10","og_description":"Finally in PostgreSQL 10 (expected to be released this September) a long awaited feature will probably appear: In-core logical replication. PostgreSQL supports physical replication since version 9.0 and now the next step happened with the implementation of logical replication. This will be a major help in upgrading PostgreSQL instances from one version to another with [&hellip;]","og_url":"https:\/\/www.dbi-services.com\/blog\/in-core-logical-replication-will-hit-postgresql-10\/","og_site_name":"dbi Blog","article_published_time":"2017-04-13T12:03:33+00:00","og_image":[{"width":900,"height":519,"url":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/pg_logical_replication_overview.png","type":"image\/png"}],"author":"Daniel Westermann","twitter_card":"summary_large_image","twitter_creator":"@westermanndanie","twitter_misc":{"Written by":"Daniel Westermann","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dbi-services.com\/blog\/in-core-logical-replication-will-hit-postgresql-10\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/in-core-logical-replication-will-hit-postgresql-10\/"},"author":{"name":"Daniel Westermann","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d08e9bd996a89bd75c0286cbabf3c66"},"headline":"In-core logical replication will hit PostgreSQL 10","datePublished":"2017-04-13T12:03:33+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/in-core-logical-replication-will-hit-postgresql-10\/"},"wordCount":536,"commentCount":0,"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/in-core-logical-replication-will-hit-postgresql-10\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/pg_logical_replication_overview.png","keywords":["Logical Replication","PostgreSQL"],"articleSection":["Database Administration &amp; Monitoring"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbi-services.com\/blog\/in-core-logical-replication-will-hit-postgresql-10\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/in-core-logical-replication-will-hit-postgresql-10\/","url":"https:\/\/www.dbi-services.com\/blog\/in-core-logical-replication-will-hit-postgresql-10\/","name":"In-core logical replication will hit PostgreSQL 10 - dbi Blog","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/in-core-logical-replication-will-hit-postgresql-10\/#primaryimage"},"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/in-core-logical-replication-will-hit-postgresql-10\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/pg_logical_replication_overview.png","datePublished":"2017-04-13T12:03:33+00:00","author":{"@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d08e9bd996a89bd75c0286cbabf3c66"},"breadcrumb":{"@id":"https:\/\/www.dbi-services.com\/blog\/in-core-logical-replication-will-hit-postgresql-10\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/in-core-logical-replication-will-hit-postgresql-10\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dbi-services.com\/blog\/in-core-logical-replication-will-hit-postgresql-10\/#primaryimage","url":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/pg_logical_replication_overview.png","contentUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/pg_logical_replication_overview.png","width":900,"height":519},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/in-core-logical-replication-will-hit-postgresql-10\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dbi-services.com\/blog\/"},{"@type":"ListItem","position":2,"name":"In-core logical replication will hit PostgreSQL 10"}]},{"@type":"WebSite","@id":"https:\/\/www.dbi-services.com\/blog\/#website","url":"https:\/\/www.dbi-services.com\/blog\/","name":"dbi Blog","description":"","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":"Person","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d08e9bd996a89bd75c0286cbabf3c66","name":"Daniel Westermann","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/31350ceeecb1dd8986339a29bf040d4cd3cd087d410deccd8f55234466d6c317?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/31350ceeecb1dd8986339a29bf040d4cd3cd087d410deccd8f55234466d6c317?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/31350ceeecb1dd8986339a29bf040d4cd3cd087d410deccd8f55234466d6c317?s=96&d=mm&r=g","caption":"Daniel Westermann"},"description":"Daniel Westermann is Principal Consultant and Technology Leader Open Infrastructure at dbi services. He has more than 15 years of experience in management, engineering and optimization of databases and infrastructures, especially on Oracle and PostgreSQL. Since the beginning of his career, he has specialized in Oracle Technologies and is Oracle Certified Professional 12c and Oracle Certified Expert RAC\/GridInfra. Over time, Daniel has become increasingly interested in open source technologies, becoming \u201cTechnology Leader Open Infrastructure\u201d and PostgreSQL expert. \u00a0Based on community or EnterpriseDB tools, he develops and installs complex high available solutions with PostgreSQL. He is also a certified PostgreSQL Plus 9.0 Professional and a Postgres Advanced Server 9.4 Professional. He is a regular speaker at PostgreSQL conferences in Switzerland and Europe. Today Daniel is also supporting our customers on AWS services such as AWS RDS, database migrations into the cloud, EC2 and automated infrastructure management with AWS SSM (System Manager). He is a certified AWS Solutions Architect Professional. Prior to dbi services, Daniel was Management System Engineer at LC SYSTEMS-Engineering AG in Basel. Before that, he worked as Oracle Developper &amp;\u00a0Project Manager at Delta Energy Solutions AG in Basel (today Powel AG). Daniel holds a diploma in Business Informatics (DHBW, Germany). His branch-related experience mainly covers the pharma industry, the financial sector, energy, lottery and telecommunications.","sameAs":["https:\/\/x.com\/westermanndanie"],"url":"https:\/\/www.dbi-services.com\/blog\/author\/daniel-westermann\/"}]}},"_links":{"self":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/9950","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\/29"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/comments?post=9950"}],"version-history":[{"count":0,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/9950\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media\/9952"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=9950"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=9950"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=9950"},{"taxonomy":"type","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/type_dbi?post=9950"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}