{"id":15632,"date":"2021-02-11T20:00:38","date_gmt":"2021-02-11T19:00:38","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/8000-databases-in-one-postgresql-cluster\/"},"modified":"2021-02-11T20:00:38","modified_gmt":"2021-02-11T19:00:38","slug":"8000-databases-in-one-postgresql-cluster","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/8000-databases-in-one-postgresql-cluster\/","title":{"rendered":"8000 databases in one PostgreSQL cluster?"},"content":{"rendered":"<p>A while ago I posted this tweet on Twitter: <\/p>\n<blockquote class=\"twitter-tweet\">\n<p lang=\"en\" dir=\"ltr\"><a href=\"https:\/\/twitter.com\/hashtag\/Postgresql?src=hash&amp;ref_src=twsrc%5Etfw\">#Postgresql<\/a> friends: 8000 databases. One cluster, 8000 clusters, Kubernetes,, what would be your choice? Let&#039;s assume 10gb per database. I know backup\/restore, inodes etc, no discussions about that, just thoughts and ideas<\/p>\n<p>&mdash; Daniel Westermann (@westermanndanie) <a href=\"https:\/\/twitter.com\/westermanndanie\/status\/1354512929610211329?ref_src=twsrc%5Etfw\">January 27, 2021<\/a><\/p><\/blockquote>\n<p> While this might sound unusual, this actually was under consideration by one of our customers. Each of their customers usually gets a dedicated database and is free to do in that database whatever they want. Because they can also create multiple schemas, a schema only solution was not the way to go. To be clear right now: We did not implement it like this, the reasons are in this post. The actual implementation will follow with a follow up post.<\/p>\n<p><!--more--><\/p>\n<p>To see what it means to work with such many databases let&#8217;s initialize the cluster, nothing special here:<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">\npostgres@pg13:\/home\/postgres\/ [pg131] initdb -D \/u02\/pgdata\/13\nThe files belonging to this database system will be owned by user \"postgres\".\nThis user must also own the server process.\n\nThe database cluster will be initialized with locale \"C.UTF-8\".\nThe default database encoding has accordingly been set to \"UTF8\".\nThe default text search configuration will be set to \"english\".\n\nData page checksums are disabled.\n\ncreating directory \/u02\/pgdata\/13 ... ok\ncreating subdirectories ... ok\nselecting dynamic shared memory implementation ... posix\nselecting default max_connections ... 100\nselecting default shared_buffers ... 128MB\nselecting default time zone ... Etc\/UTC\ncreating configuration files ... ok\nrunning bootstrap script ... ok\nperforming post-bootstrap initialization ... ok\nsyncing data to disk ... ok\n\ninitdb: warning: enabling \"trust\" authentication for local connections\nYou can change this by editing pg_hba.conf or using the option -A, or\n--auth-local and --auth-host, the next time you run initdb.\n\nSuccess. You can now start the database server using:\n\n    pg_ctl -D \/u02\/pgdata\/13 -l logfile start\n<\/pre>\n<p>Starting up:<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">\npostgres@pg13:\/home\/postgres\/ [pg131] pg_ctl -D \/u02\/pgdata\/13\/ start\nwaiting for server to start....2021-02-10 20:51:19.878 UTC [15930] LOG:  starting PostgreSQL 13.1 dbi services build on x86_64-pc-linux-gnu, compiled by gcc (Debian 8.3.0-6) 8.3.0, 64-bit\n2021-02-10 20:51:19.879 UTC [15930] LOG:  listening on IPv4 address \"127.0.0.1\", port 5432\n2021-02-10 20:51:19.883 UTC [15930] LOG:  listening on Unix socket \"\/tmp\/.s.PGSQL.5432\"\n2021-02-10 20:51:19.889 UTC [15931] LOG:  database system was shut down at 2021-02-10 20:49:54 UTC\n2021-02-10 20:51:19.895 UTC [15930] LOG:  database system is ready to accept connections\n done\nserver started\npostgres@pg13:\/home\/postgres\/ [pg131] psql -c \"select version()\" postgres\n                                                  version                                                  \n-----------------------------------------------------------------------------------------------------------\n PostgreSQL 13.1 on x86_64-pc-linux-gnu, compiled by gcc (Debian 8.3.0-6) 8.3.0, 64-bit\n(1 row)\n<\/pre>\n<p>Generating 8000 databases in PostgreSQL is quite easy, all you need to do is something like this:<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">\npostgres@pg13:\/home\/postgres\/ [pg131] for i in {1..8000}; do psql -c \"create database db_${i}\" postgres; done\nCREATE DATABASE\nCREATE DATABASE\nCREATE DATABASE\n...\npostgres@pg13:\/home\/postgres\/ [pg131] psql -c \"select count(*) from pg_database\" postgres\n count \n-------\n  8003\n(1 row)\n<\/pre>\n<p>This will take some time but PostgreSQL quite happily creates the databases. You can actually create much more databases, if you really want, up to <a href=\"https:\/\/www.postgresql.org\/docs\/current\/limits.html\" target=\"_blank\" rel=\"noopener\">4,294,950,911<\/a>. Now that we have 8000 databases, let&#8217;s do some math. A single PostgreSQL database consumes around 8MB of disk space. As we have 8000 databases, that is around 64000MB of disk space, for just the empty databases:<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">\npostgres@pg13:\/home\/postgres\/ [pg131] du -sh \/u02\/pgdata\/13\/\n60G     \/u02\/pgdata\/13\/\n<\/pre>\n<p>This is quite some space, that could be used more efficiently. As all of these databases should be owned by a separate user, that makes 8000 users in addition:<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">\npostgres@pg13:\/home\/postgres\/ [pg131] for i in {1..8000}; do psql -c \"create user u_${i}\" postgres; done\npostgres@pg13:\/home\/postgres\/ [pg131] for i in {1..8000}; do psql -c \"alter database db_${i} owner to u_${i}\" postgres; done\n<\/pre>\n<p>Now lets assume each of those database contains 100 tables, 100 indexes and 100 sequences. Initially I wanted to do it like this, but this is actually a very bad idea: <\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">\npostgres@pg13:\/home\/postgres\/ [pg131] for i in {1..8000}\n&gt; do\n&gt;     for e in {1..100}\n&gt;     do\n&gt;         psql -c \"create table tab${e}(a int primary key generated always as identity, b text, c date)\" db_${i}\n&gt;     done\n&gt; done\nCREATE TABLE\nCREATE TABLE\nCREATE TABLE\n...\n<\/pre>\n<p>Creating 800000 connections is catastrophic for performance, so a much better way of doing it, is like this (and this are still 8000 connections and it will take some time to complete):<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">\npostgres@pg13:\/home\/postgres\/ [pg131] for e in {1..100}\n&gt; do\n&gt;     echo \"create table tab${e}(a int primary key generated always as identity, b text, c date);\" &gt;&gt; \/var\/tmp\/load.sql\n&gt; done\npostgres@pg13:\/home\/postgres\/ [pg131] for i in {1..8000}\n&gt; do\n&gt;     psql -f \/var\/tmp\/load.sql db_${i}\n&gt; done\nCREATE TABLE\nCREATE TABLE\nCREATE TABLE\n...\npostgres@pg13:\/home\/postgres\/ [pg131] rm -f \/var\/tmp\/load.sql\n<\/pre>\n<p>Once that completed, let&#8217;s check the space usage again:<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">\npostgres@pg13:\/home\/postgres\/ [pg131] du -sh \/u02\/pgdata\/13\/\n88G     \/u02\/pgdata\/13\/\n<\/pre>\n<p>We&#8217;ve added 28GB and do not have a single user generated row in any of these databases, this is quite huge. Only from this point of view, it does not seems a good idea to combine as many databases as in this example into a single cluster. But there is more to consider than space usage:<\/p>\n<ul>\n<li>When you have 8000 databases you need to expect 8000 concurrent sessions. How do you handle that, especially if each of those connections goes to a different database?<\/li>\n<li>Backup and Restore: Physical backup and restore only works for the whole cluster. Of course could restore the whole cluster to another system and then pick specific databases you are interested in, but this will take some time as well.<\/li>\n<li>Autovacuum has potentially to process many databases in parallel, so how many worker processes can you give?<\/li>\n<li>8000 databases with 100 tables each are at least 80&#8217;0000 files on disk, not counting FSM, VM and index files. Depending on your file system and your segment size you might need to tweak the file system as well.<\/li>\n<li>Access permissions: Managing access permissions for at least 8000 users might become tricky. In addition pg_hba.conf gets large.<\/li>\n<li>I guess it all comes down to: Are you willing to invest into a monster machine with as many cores as currently are available on the market, which lots and lots of memory and the fastest disks you can get? And then you probably want at least two of them so you can failover in case of a disaster, or even three if you want to have automated failover? And then you need at least one test system as close to production as possible.<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>A while ago I posted this tweet on Twitter: #Postgresql friends: 8000 databases. One cluster, 8000 clusters, Kubernetes,, what would be your choice? Let&#039;s assume 10gb per database. I know backup\/restore, inodes etc, no discussions about that, just thoughts and ideas &mdash; Daniel Westermann (@westermanndanie) January 27, 2021 While this might sound unusual, this actually [&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":[229],"tags":[77],"type_dbi":[],"class_list":["post-15632","post","type-post","status-publish","format-standard","hentry","category-database-administration-monitoring","tag-postgresql"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.2 (Yoast SEO v27.5) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>8000 databases in one PostgreSQL cluster? - 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\/8000-databases-in-one-postgresql-cluster\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"8000 databases in one PostgreSQL cluster?\" \/>\n<meta property=\"og:description\" content=\"A while ago I posted this tweet on Twitter: #Postgresql friends: 8000 databases. One cluster, 8000 clusters, Kubernetes,, what would be your choice? Let&#039;s assume 10gb per database. I know backup\/restore, inodes etc, no discussions about that, just thoughts and ideas &mdash; Daniel Westermann (@westermanndanie) January 27, 2021 While this might sound unusual, this actually [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/8000-databases-in-one-postgresql-cluster\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2021-02-11T19:00:38+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=\"5 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\\\/8000-databases-in-one-postgresql-cluster\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/8000-databases-in-one-postgresql-cluster\\\/\"},\"author\":{\"name\":\"Daniel Westermann\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/person\\\/8d08e9bd996a89bd75c0286cbabf3c66\"},\"headline\":\"8000 databases in one PostgreSQL cluster?\",\"datePublished\":\"2021-02-11T19:00:38+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/8000-databases-in-one-postgresql-cluster\\\/\"},\"wordCount\":604,\"commentCount\":0,\"keywords\":[\"PostgreSQL\"],\"articleSection\":[\"Database Administration &amp; Monitoring\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/8000-databases-in-one-postgresql-cluster\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/8000-databases-in-one-postgresql-cluster\\\/\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/8000-databases-in-one-postgresql-cluster\\\/\",\"name\":\"8000 databases in one PostgreSQL cluster? - dbi Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#website\"},\"datePublished\":\"2021-02-11T19:00:38+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/person\\\/8d08e9bd996a89bd75c0286cbabf3c66\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/8000-databases-in-one-postgresql-cluster\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/8000-databases-in-one-postgresql-cluster\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/8000-databases-in-one-postgresql-cluster\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"8000 databases in one PostgreSQL cluster?\"}]},{\"@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":"8000 databases in one PostgreSQL cluster? - 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\/8000-databases-in-one-postgresql-cluster\/","og_locale":"en_US","og_type":"article","og_title":"8000 databases in one PostgreSQL cluster?","og_description":"A while ago I posted this tweet on Twitter: #Postgresql friends: 8000 databases. One cluster, 8000 clusters, Kubernetes,, what would be your choice? Let&#039;s assume 10gb per database. I know backup\/restore, inodes etc, no discussions about that, just thoughts and ideas &mdash; Daniel Westermann (@westermanndanie) January 27, 2021 While this might sound unusual, this actually [&hellip;]","og_url":"https:\/\/www.dbi-services.com\/blog\/8000-databases-in-one-postgresql-cluster\/","og_site_name":"dbi Blog","article_published_time":"2021-02-11T19:00:38+00:00","author":"Daniel Westermann","twitter_card":"summary_large_image","twitter_creator":"@westermanndanie","twitter_misc":{"Written by":"Daniel Westermann","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dbi-services.com\/blog\/8000-databases-in-one-postgresql-cluster\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/8000-databases-in-one-postgresql-cluster\/"},"author":{"name":"Daniel Westermann","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d08e9bd996a89bd75c0286cbabf3c66"},"headline":"8000 databases in one PostgreSQL cluster?","datePublished":"2021-02-11T19:00:38+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/8000-databases-in-one-postgresql-cluster\/"},"wordCount":604,"commentCount":0,"keywords":["PostgreSQL"],"articleSection":["Database Administration &amp; Monitoring"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbi-services.com\/blog\/8000-databases-in-one-postgresql-cluster\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/8000-databases-in-one-postgresql-cluster\/","url":"https:\/\/www.dbi-services.com\/blog\/8000-databases-in-one-postgresql-cluster\/","name":"8000 databases in one PostgreSQL cluster? - dbi Blog","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"datePublished":"2021-02-11T19:00:38+00:00","author":{"@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d08e9bd996a89bd75c0286cbabf3c66"},"breadcrumb":{"@id":"https:\/\/www.dbi-services.com\/blog\/8000-databases-in-one-postgresql-cluster\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/8000-databases-in-one-postgresql-cluster\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/8000-databases-in-one-postgresql-cluster\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dbi-services.com\/blog\/"},{"@type":"ListItem","position":2,"name":"8000 databases in one PostgreSQL cluster?"}]},{"@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\/15632","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=15632"}],"version-history":[{"count":0,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/15632\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=15632"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=15632"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=15632"},{"taxonomy":"type","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/type_dbi?post=15632"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}