{"id":36995,"date":"2025-02-07T08:57:43","date_gmt":"2025-02-07T07:57:43","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/?p=36995"},"modified":"2025-02-07T08:57:43","modified_gmt":"2025-02-07T07:57:43","slug":"postgresql-18-introduce-autovacuum_vacuum_max_threshold","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/postgresql-18-introduce-autovacuum_vacuum_max_threshold\/","title":{"rendered":"PostgreSQL 18: Introduce autovacuum_vacuum_max_threshold"},"content":{"rendered":"\n<p><a href=\"https:\/\/www.postgresql.org\/docs\/currnet\/routine-vacuuming.html\">Vacuum\/Autovacuum<\/a> is one of the critical parts of every PostgreSQL installation. When autovacuum is not configured properly for your workload you&#8217;ll suffer from bloat and performance issues sooner or later. Most of the installations we&#8217;ve seen run with the defaults just fine, and a lot of people probably never need to deal with adjusting any of the parameters for autovacuum. On the other side there are workloads where the defaults do not work nicely anymore and you need to adjust how autovacuum deals with specific tables. PostgreSQL 18 will come with a new parameter called &#8220;autovacuum_vacuum_max_threshold&#8221; which gives you one more option to deal with a specific issue.<\/p>\n\n\n\n<p>Before we look at the new parameter lets take a look at when autovacuum kicks in in the default configuration. This is controlled by two parameters:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: sql; highlight: [1,7]; title: ; notranslate\" title=\"\">\npostgres=# show autovacuum_vacuum_threshold;\n autovacuum_vacuum_threshold \n-----------------------------\n 50\n(1 row)\n\npostgres=# show autovacuum_vacuum_scale_factor;\n autovacuum_vacuum_scale_factor \n--------------------------------\n 0.2\n(1 row)\n<\/pre><\/div>\n\n\n<p>What that means is, that approximately 20% of the table (the 0.2 of <a href=\"https:\/\/www.postgresql.org\/docs\/current\/runtime-config-autovacuum.html#GUC-AUTOVACUUM-VACUUM-SCALE-FACTOR\" target=\"_blank\" rel=\"noreferrer noopener\">autovacuum_vacuum_scale_factor<\/a>) + 50 tuples (<a href=\"https:\/\/www.postgresql.org\/docs\/current\/runtime-config-autovacuum.html#GUC-AUTOVACUUM-VACUUM-THRESHOLD\" target=\"_blank\" rel=\"noreferrer noopener\">autovacuum_vacuum_threshold<\/a>) need to change before autovacuum is triggered. Given this simple table with one million rows:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: sql; highlight: [1,8]; title: ; notranslate\" title=\"\">\npostgres=# \\d t\n                 Table &quot;public.t&quot;\n Column |  Type   | Collation | Nullable | Default \n--------+---------+-----------+----------+---------\n a      | integer |           |          | \n b      | text    |           |          | \n\npostgres=# select count(*) from t;\n  count  \n---------\n 1000000\n(1 row)\n<\/pre><\/div>\n\n\n<p>&#8230; this can easily be triggered by changing more than 20% of the table:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: sql; highlight: [1,7,13,16,22]; title: ; notranslate\" title=\"\">\npostgres=# select last_autovacuum from pg_stat_all_tables where relname = &#039;t&#039;;\n       last_autovacuum        \n------------------------------\n 2025-02-07 07:24:58.40076+01\n(1 row)\n\npostgres=# select now();\n              now              \n-------------------------------\n 2025-02-07 07:26:48.333006+01\n(1 row)\n\npostgres=# update t set b = &#039;xxx&#039; where a &lt; 250000;\nUPDATE 249999\n\npostgres=# select pg_sleep(&#039;60&#039;);\n pg_sleep \n----------\n \n(1 row)\n\npostgres=# select last_autovacuum from pg_stat_all_tables where relname = &#039;t&#039;;\n        last_autovacuum        \n-------------------------------\n 2025-02-07 07:27:58.356337+01\n(1 row)\n<\/pre><\/div>\n\n\n<p>The consequence of this is, that the more rows you have in a table, the longer it takes for autovacuum to kick in. You can deal with this already today by adjusting either &#8220;autovacuum_vacuum_threshold&#8221; or &#8220;autovacuum_vacuum_scale_factor&#8221; or both on either the table or globally on the instance level. If, for example, you want autovacuum to kick in after 10&#8217;000 rows have been changed in the above table you can do it like this:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: sql; highlight: [1,3]; title: ; notranslate\" title=\"\">\npostgres=# alter table t set ( autovacuum_vacuum_threshold = 10000 );\nALTER TABLE\npostgres=# alter table t set ( autovacuum_vacuum_scale_factor = 0 );\nALTER TABLE\n<\/pre><\/div>\n\n\n<p>Doing the same test as above but only changing 10001 rows:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: sql; highlight: [1,3,9,15,21]; title: ; notranslate\" title=\"\">\npostgres=# update t set b = &#039;aaa&#039; where a &lt; 10002;\nUPDATE 10001\npostgres=# select now();\n              now              \n-------------------------------\n 2025-02-07 07:54:35.295413+01\n(1 row)\n\npostgres=# select last_autovacuum from pg_stat_all_tables where relname = &#039;t&#039;;\n        last_autovacuum        \n-------------------------------\n 2025-02-07 07:27:58.356337+01\n(1 row)\n\npostgres=# select pg_sleep(60);\n pg_sleep \n----------\n \n(1 row)\n\npostgres=# select last_autovacuum from pg_stat_all_tables where relname = &#039;t&#039;;\n       last_autovacuum        \n------------------------------\n 2025-02-07 07:54:58.69969+01\n(1 row)\n\n<\/pre><\/div>\n\n\n<p>The downside of this is, that you need to deal with that manually. With the introduction of &#8220;autovacuum_vacuum_max_threshold&#8221; PostgreSQL will handle those cases in a more &#8220;by default&#8221; way. The default for this parameter is quite high:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\npostgres=# show autovacuum_vacuum_max_threshold;\n autovacuum_vacuum_max_threshold \n---------------------------------\n 100000000\n(1 row)\n<\/pre><\/div>\n\n\n<p>To see it in action lets reset the table level settings we did above and set autovacuum_vacuum_max_threshold instead:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: sql; highlight: [1,3,5]; title: ; notranslate\" title=\"\">\npostgres=# alter table t reset ( autovacuum_vacuum_scale_factor );\nALTER TABLE\npostgres=# alter table t reset ( autovacuum_vacuum_threshold );\nALTER TABLE\npostgres=# alter table t set ( autovacuum_vacuum_max_threshold = 10000 );\nALTER TABLE\n<\/pre><\/div>\n\n\n<p>This will have exactly the same effect:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: sql; highlight: [1,3,9,15,21]; title: ; notranslate\" title=\"\">\npostgres=# update t set b = &#039;qqq&#039; where a &lt; 10002;\nUPDATE 10001\npostgres=# select now();\n              now              \n-------------------------------\n 2025-02-07 08:02:51.582044+01\n(1 row)\n\npostgres=# select last_autovacuum from pg_stat_all_tables where relname = &#039;t&#039;;\n       last_autovacuum        \n------------------------------\n 2025-02-07 07:54:58.69969+01\n(1 row)\n\npostgres=# select pg_sleep(60);\n pg_sleep \n----------\n \n(1 row)\n\npostgres=# select last_autovacuum from pg_stat_all_tables where relname = &#039;t&#039;;\n        last_autovacuum        \n-------------------------------\n 2025-02-07 08:02:58.809895+01\n(1 row)\n<\/pre><\/div>\n\n\n<p>Nice, and as always, thanks to everyone <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=306dc520b9dfd6014613961962a89940a431a069\" target=\"_blank\" rel=\"noreferrer noopener\">involved<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Vacuum\/Autovacuum is one of the critical parts of every PostgreSQL installation. When autovacuum is not configured properly for your workload you&#8217;ll suffer from bloat and performance issues sooner or later. Most of the installations we&#8217;ve seen run with the defaults just fine, and a lot of people probably never need to deal with adjusting any [&hellip;]<\/p>\n","protected":false},"author":29,"featured_media":0,"comment_status":"open","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[229,198],"tags":[77],"type_dbi":[],"class_list":["post-36995","post","type-post","status-publish","format-standard","hentry","category-database-administration-monitoring","category-database-management","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>PostgreSQL 18: Introduce autovacuum_vacuum_max_threshold - 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\/postgresql-18-introduce-autovacuum_vacuum_max_threshold\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"PostgreSQL 18: Introduce autovacuum_vacuum_max_threshold\" \/>\n<meta property=\"og:description\" content=\"Vacuum\/Autovacuum is one of the critical parts of every PostgreSQL installation. When autovacuum is not configured properly for your workload you&#8217;ll suffer from bloat and performance issues sooner or later. Most of the installations we&#8217;ve seen run with the defaults just fine, and a lot of people probably never need to deal with adjusting any [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/postgresql-18-introduce-autovacuum_vacuum_max_threshold\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2025-02-07T07:57:43+00:00\" \/>\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=\"3 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-18-introduce-autovacuum_vacuum_max_threshold\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/postgresql-18-introduce-autovacuum_vacuum_max_threshold\/\"},\"author\":{\"name\":\"Daniel Westermann\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d08e9bd996a89bd75c0286cbabf3c66\"},\"headline\":\"PostgreSQL 18: Introduce autovacuum_vacuum_max_threshold\",\"datePublished\":\"2025-02-07T07:57:43+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/postgresql-18-introduce-autovacuum_vacuum_max_threshold\/\"},\"wordCount\":354,\"commentCount\":0,\"keywords\":[\"PostgreSQL\"],\"articleSection\":[\"Database Administration &amp; Monitoring\",\"Database management\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/postgresql-18-introduce-autovacuum_vacuum_max_threshold\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/postgresql-18-introduce-autovacuum_vacuum_max_threshold\/\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/postgresql-18-introduce-autovacuum_vacuum_max_threshold\/\",\"name\":\"PostgreSQL 18: Introduce autovacuum_vacuum_max_threshold - dbi Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#website\"},\"datePublished\":\"2025-02-07T07:57:43+00:00\",\"author\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d08e9bd996a89bd75c0286cbabf3c66\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/postgresql-18-introduce-autovacuum_vacuum_max_threshold\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/postgresql-18-introduce-autovacuum_vacuum_max_threshold\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/postgresql-18-introduce-autovacuum_vacuum_max_threshold\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/www.dbi-services.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"PostgreSQL 18: Introduce autovacuum_vacuum_max_threshold\"}]},{\"@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":"PostgreSQL 18: Introduce autovacuum_vacuum_max_threshold - 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\/postgresql-18-introduce-autovacuum_vacuum_max_threshold\/","og_locale":"en_US","og_type":"article","og_title":"PostgreSQL 18: Introduce autovacuum_vacuum_max_threshold","og_description":"Vacuum\/Autovacuum is one of the critical parts of every PostgreSQL installation. When autovacuum is not configured properly for your workload you&#8217;ll suffer from bloat and performance issues sooner or later. Most of the installations we&#8217;ve seen run with the defaults just fine, and a lot of people probably never need to deal with adjusting any [&hellip;]","og_url":"https:\/\/www.dbi-services.com\/blog\/postgresql-18-introduce-autovacuum_vacuum_max_threshold\/","og_site_name":"dbi Blog","article_published_time":"2025-02-07T07:57:43+00:00","author":"Daniel Westermann","twitter_card":"summary_large_image","twitter_creator":"@westermanndanie","twitter_misc":{"Written by":"Daniel Westermann","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dbi-services.com\/blog\/postgresql-18-introduce-autovacuum_vacuum_max_threshold\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/postgresql-18-introduce-autovacuum_vacuum_max_threshold\/"},"author":{"name":"Daniel Westermann","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d08e9bd996a89bd75c0286cbabf3c66"},"headline":"PostgreSQL 18: Introduce autovacuum_vacuum_max_threshold","datePublished":"2025-02-07T07:57:43+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/postgresql-18-introduce-autovacuum_vacuum_max_threshold\/"},"wordCount":354,"commentCount":0,"keywords":["PostgreSQL"],"articleSection":["Database Administration &amp; Monitoring","Database management"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbi-services.com\/blog\/postgresql-18-introduce-autovacuum_vacuum_max_threshold\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/postgresql-18-introduce-autovacuum_vacuum_max_threshold\/","url":"https:\/\/www.dbi-services.com\/blog\/postgresql-18-introduce-autovacuum_vacuum_max_threshold\/","name":"PostgreSQL 18: Introduce autovacuum_vacuum_max_threshold - dbi Blog","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"datePublished":"2025-02-07T07:57:43+00:00","author":{"@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d08e9bd996a89bd75c0286cbabf3c66"},"breadcrumb":{"@id":"https:\/\/www.dbi-services.com\/blog\/postgresql-18-introduce-autovacuum_vacuum_max_threshold\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/postgresql-18-introduce-autovacuum_vacuum_max_threshold\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/postgresql-18-introduce-autovacuum_vacuum_max_threshold\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dbi-services.com\/blog\/"},{"@type":"ListItem","position":2,"name":"PostgreSQL 18: Introduce autovacuum_vacuum_max_threshold"}]},{"@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\/36995","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=36995"}],"version-history":[{"count":10,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/36995\/revisions"}],"predecessor-version":[{"id":37005,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/36995\/revisions\/37005"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=36995"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=36995"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=36995"},{"taxonomy":"type","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/type_dbi?post=36995"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}