{"id":5144,"date":"2015-05-04T12:25:54","date_gmt":"2015-05-04T10:25:54","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/variations-on-1m-rows-insert2-commit-write-postgresql\/"},"modified":"2015-05-04T12:25:54","modified_gmt":"2015-05-04T10:25:54","slug":"variations-on-1m-rows-insert2-commit-write-postgresql","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/variations-on-1m-rows-insert2-commit-write-postgresql\/","title":{"rendered":"Variations on 1M rows insert(2): commit write &#8211; PostgreSQL"},"content":{"rendered":"<p>Franck was quite fast with his second post <a href=\"https:\/\/www.dbi-services.com\/index.php\/blog\/entry\/insert1m-commit\" target=\"_blank\">Variations on 1M rows insert(2): commit write<\/a>. Lets see what we can do on the PostgreSQL side.<br \/>\n<img decoding=\"async\" id=\"system-readmore\" class=\"mceItemReadMore\" title=\"Read More\" src=\"http:\/\/wwwold.dbi-services.com\/plugins\/editors\/jce\/tiny_mce\/plugins\/article\/img\/trans.gif\" alt=\"Read More\" \/><br \/>\nI&#8217;ll take the same test table as Franck again:<\/p>\n<pre>create table DEMO (\"id\" number , \"text\" varchar2(15), \"number\" number) ;<\/pre>\n<p>The pgplsql block which corresponds to Frank&#8217;s plsql block looks like this:<\/p>\n<pre class=\"brush: java; gutter: true; first-line: 1\">\\timing on\ntruncate table DEMO;\nDO $$DECLARE\n  l_people_array varchar(15)[12] := '{\"Marc\", \"Bill\", \"George\", \"Eliot\", \"Matt\", \"Trey\", \"Tracy\",\"Greg\", \"Steve\", \"Kristina\", \"Katie\", \"Jeff\"}';\n  n int;\nBEGIN\n  for i in 0..1e6 loop\n     n:=trunc(random()*1000+1);\n     begin\n       insert into DEMO values( i , l_people_array[floor((random()*11))+1::int] , n );\n     exception when others then raise;\n     end;\n  end loop;\nEND$$;\n<\/pre>\n<p>Some explanations: In pgplsql we can not do a commit inside a loop. Either everything <a href=\"http:\/\/www.postgresql.org\/docs\/current\/interactive\/plpgsql-control-structures.html#PLPGSQL-ERROR-TRAPPING\" target=\"_blank\">is committed or nothing<\/a>. But we can force the same behavior by using a begin\/exception\/end block. Lets see the results:<\/p>\n<pre class=\"brush: java; gutter: true; first-line: 1\">Time: 5.920 ms\nTRUNCATE TABLE\nTime: 10.527 ms\nLOG:  checkpoints are occurring too frequently (5 seconds apart)\nHINT:  Consider increasing the configuration parameter \"checkpoint_segments\".\nDO\nTime: 9271.443 ms\n<\/pre>\n<p>Compare that to the test case with the transaction only committing once:<\/p>\n<pre class=\"brush: java; gutter: true; first-line: 1\">postgres=# \\i 1mio_rows_no_pk.sql\nTiming is on.\n autocommit \n------------\n on\n(1 row)\n\nTime: 0.275 ms\nTRUNCATE TABLE\nTime: 16.355 ms\nDO\nTime: 6992.205 ms<\/pre>\n<p>&nbsp;<\/p>\n<p>It makes a difference of around 2,5 seconds. But 2,5 seconds for 1&#8217;000&#8217;001 commits is again not that bad. In his second post Franck continues with various variations of commits. In PostgreSQL a commit is not as much fine grained (at least as far as I know, comments welcome). The most similar behavior is <a href=\"http:\/\/www.postgresql.org\/docs\/9.4\/static\/runtime-config-wal.html#GUC-SYNCHRONOUS-COMMIT\" target=\"_blank\">synchronous_commit<\/a>. So lets give it a try.<br \/>\nNow the test case looks like this:<\/p>\n<pre class=\"brush: java; gutter: true; first-line: 1\">\\timing on\nalter system set synchronous_commit='off';\nselect pg_reload_conf();\ntruncate table DEMO;\nDO $$DECLARE\n  l_people_array varchar(15)[12] := '{\"Marc\", \"Bill\", \"George\", \"Eliot\", \"Matt\", \"Trey\", \"Tracy\",\"Greg\", \"Steve\", \"Kristina\", \"Katie\", \"Jeff\"}';\n  n int;\nBEGIN\n  for i in 0..1e6 loop\n     n:=trunc(random()*1000+1);\n     begin\n       insert into DEMO values( i , l_people_array[floor((random()*11))+1::int] , n );\n     exception when others then raise;\n     end;\n  end loop;\nEND$$;\n<\/pre>\n<p>Execute it:<\/p>\n<pre class=\"brush: java; gutter: true; first-line: 1\">postgres=# \\i 1mio_rows_no_pk_commit_by_row.sql\nTiming is on.\nALTER SYSTEM\nTime: 12.870 ms\nLOG:  received SIGHUP, reloading configuration files\nLOG:  parameter \"synchronous_commit\" changed to \"off\"\n pg_reload_conf \n----------------\n t\n(1 row)\n\nTime: 5.521 ms\nTRUNCATE TABLE\nTime: 7.898 ms\nDO\nTime: 8861.194 ms<\/pre>\n<p>&nbsp;<\/p>\n<p>Compared to 9,2 seconds from the previous test it makes not that much difference. But this might be dependent on the actual use case and needs to be tested case by case.<br \/>\nLets see what comes next &#8230;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Franck was quite fast with his second post Variations on 1M rows insert(2): commit write. Lets see what we can do on the PostgreSQL side. I&#8217;ll take the same test table as Franck again: create table DEMO (&#8220;id&#8221; number , &#8220;text&#8221; varchar2(15), &#8220;number&#8221; number) ; The pgplsql block which corresponds to Frank&#8217;s plsql block looks [&hellip;]<\/p>\n","protected":false},"author":29,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[368],"tags":[77],"type_dbi":[],"class_list":["post-5144","post","type-post","status-publish","format-standard","hentry","category-development-performance","tag-postgresql"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.2 (Yoast SEO v27.2) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Variations on 1M rows insert(2): commit write - PostgreSQL - 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\/variations-on-1m-rows-insert2-commit-write-postgresql\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Variations on 1M rows insert(2): commit write - PostgreSQL\" \/>\n<meta property=\"og:description\" content=\"Franck was quite fast with his second post Variations on 1M rows insert(2): commit write. Lets see what we can do on the PostgreSQL side. I&#8217;ll take the same test table as Franck again: create table DEMO (&quot;id&quot; number , &quot;text&quot; varchar2(15), &quot;number&quot; number) ; The pgplsql block which corresponds to Frank&#8217;s plsql block looks [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/variations-on-1m-rows-insert2-commit-write-postgresql\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2015-05-04T10:25:54+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/wwwold.dbi-services.com\/plugins\/editors\/jce\/tiny_mce\/plugins\/article\/img\/trans.gif\" \/>\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=\"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\/variations-on-1m-rows-insert2-commit-write-postgresql\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/variations-on-1m-rows-insert2-commit-write-postgresql\/\"},\"author\":{\"name\":\"Daniel Westermann\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d08e9bd996a89bd75c0286cbabf3c66\"},\"headline\":\"Variations on 1M rows insert(2): commit write &#8211; PostgreSQL\",\"datePublished\":\"2015-05-04T10:25:54+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/variations-on-1m-rows-insert2-commit-write-postgresql\/\"},\"wordCount\":212,\"commentCount\":0,\"image\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/variations-on-1m-rows-insert2-commit-write-postgresql\/#primaryimage\"},\"thumbnailUrl\":\"http:\/\/wwwold.dbi-services.com\/plugins\/editors\/jce\/tiny_mce\/plugins\/article\/img\/trans.gif\",\"keywords\":[\"PostgreSQL\"],\"articleSection\":[\"Development &amp; Performance\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/variations-on-1m-rows-insert2-commit-write-postgresql\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/variations-on-1m-rows-insert2-commit-write-postgresql\/\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/variations-on-1m-rows-insert2-commit-write-postgresql\/\",\"name\":\"Variations on 1M rows insert(2): commit write - PostgreSQL - dbi Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/variations-on-1m-rows-insert2-commit-write-postgresql\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/variations-on-1m-rows-insert2-commit-write-postgresql\/#primaryimage\"},\"thumbnailUrl\":\"http:\/\/wwwold.dbi-services.com\/plugins\/editors\/jce\/tiny_mce\/plugins\/article\/img\/trans.gif\",\"datePublished\":\"2015-05-04T10:25:54+00:00\",\"author\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d08e9bd996a89bd75c0286cbabf3c66\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/variations-on-1m-rows-insert2-commit-write-postgresql\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/variations-on-1m-rows-insert2-commit-write-postgresql\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/variations-on-1m-rows-insert2-commit-write-postgresql\/#primaryimage\",\"url\":\"http:\/\/wwwold.dbi-services.com\/plugins\/editors\/jce\/tiny_mce\/plugins\/article\/img\/trans.gif\",\"contentUrl\":\"http:\/\/wwwold.dbi-services.com\/plugins\/editors\/jce\/tiny_mce\/plugins\/article\/img\/trans.gif\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/variations-on-1m-rows-insert2-commit-write-postgresql\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/www.dbi-services.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Variations on 1M rows insert(2): commit write &#8211; PostgreSQL\"}]},{\"@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":"Variations on 1M rows insert(2): commit write - PostgreSQL - 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\/variations-on-1m-rows-insert2-commit-write-postgresql\/","og_locale":"en_US","og_type":"article","og_title":"Variations on 1M rows insert(2): commit write - PostgreSQL","og_description":"Franck was quite fast with his second post Variations on 1M rows insert(2): commit write. Lets see what we can do on the PostgreSQL side. I&#8217;ll take the same test table as Franck again: create table DEMO (\"id\" number , \"text\" varchar2(15), \"number\" number) ; The pgplsql block which corresponds to Frank&#8217;s plsql block looks [&hellip;]","og_url":"https:\/\/www.dbi-services.com\/blog\/variations-on-1m-rows-insert2-commit-write-postgresql\/","og_site_name":"dbi Blog","article_published_time":"2015-05-04T10:25:54+00:00","og_image":[{"url":"http:\/\/wwwold.dbi-services.com\/plugins\/editors\/jce\/tiny_mce\/plugins\/article\/img\/trans.gif","type":"","width":"","height":""}],"author":"Daniel Westermann","twitter_card":"summary_large_image","twitter_creator":"@westermanndanie","twitter_misc":{"Written by":"Daniel Westermann","Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dbi-services.com\/blog\/variations-on-1m-rows-insert2-commit-write-postgresql\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/variations-on-1m-rows-insert2-commit-write-postgresql\/"},"author":{"name":"Daniel Westermann","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d08e9bd996a89bd75c0286cbabf3c66"},"headline":"Variations on 1M rows insert(2): commit write &#8211; PostgreSQL","datePublished":"2015-05-04T10:25:54+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/variations-on-1m-rows-insert2-commit-write-postgresql\/"},"wordCount":212,"commentCount":0,"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/variations-on-1m-rows-insert2-commit-write-postgresql\/#primaryimage"},"thumbnailUrl":"http:\/\/wwwold.dbi-services.com\/plugins\/editors\/jce\/tiny_mce\/plugins\/article\/img\/trans.gif","keywords":["PostgreSQL"],"articleSection":["Development &amp; Performance"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbi-services.com\/blog\/variations-on-1m-rows-insert2-commit-write-postgresql\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/variations-on-1m-rows-insert2-commit-write-postgresql\/","url":"https:\/\/www.dbi-services.com\/blog\/variations-on-1m-rows-insert2-commit-write-postgresql\/","name":"Variations on 1M rows insert(2): commit write - PostgreSQL - dbi Blog","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/variations-on-1m-rows-insert2-commit-write-postgresql\/#primaryimage"},"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/variations-on-1m-rows-insert2-commit-write-postgresql\/#primaryimage"},"thumbnailUrl":"http:\/\/wwwold.dbi-services.com\/plugins\/editors\/jce\/tiny_mce\/plugins\/article\/img\/trans.gif","datePublished":"2015-05-04T10:25:54+00:00","author":{"@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d08e9bd996a89bd75c0286cbabf3c66"},"breadcrumb":{"@id":"https:\/\/www.dbi-services.com\/blog\/variations-on-1m-rows-insert2-commit-write-postgresql\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/variations-on-1m-rows-insert2-commit-write-postgresql\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dbi-services.com\/blog\/variations-on-1m-rows-insert2-commit-write-postgresql\/#primaryimage","url":"http:\/\/wwwold.dbi-services.com\/plugins\/editors\/jce\/tiny_mce\/plugins\/article\/img\/trans.gif","contentUrl":"http:\/\/wwwold.dbi-services.com\/plugins\/editors\/jce\/tiny_mce\/plugins\/article\/img\/trans.gif"},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/variations-on-1m-rows-insert2-commit-write-postgresql\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dbi-services.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Variations on 1M rows insert(2): commit write &#8211; PostgreSQL"}]},{"@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\/5144","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=5144"}],"version-history":[{"count":0,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/5144\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=5144"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=5144"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=5144"},{"taxonomy":"type","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/type_dbi?post=5144"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}