{"id":33433,"date":"2024-06-08T14:28:01","date_gmt":"2024-06-08T12:28:01","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/?p=33433"},"modified":"2024-06-08T14:28:04","modified_gmt":"2024-06-08T12:28:04","slug":"cloudnativepg-bootstrapping-an-empty-cluster","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/cloudnativepg-bootstrapping-an-empty-cluster\/","title":{"rendered":"CloudnativePG &#8211; Bootstrapping an empty cluster"},"content":{"rendered":"\n<p>In the <a href=\"https:\/\/www.dbi-services.com\/blog\/cloudnativepg-on-minicube-on-opensuse-leap-micro-6\/\" target=\"_blank\" rel=\"noreferrer noopener\">last post<\/a> we&#8217;ve created a very simple three node PostgreSQL cluster using <a href=\"https:\/\/cloudnative-pg.io\/\">CloudNativePG<\/a> and this was really easy to do. While this is great to get started quickly, you usually want to have more control on how PostgreSQL is initialized and configured. In this post we&#8217;ll look at bootstrapping the cluster and what options you have for controlling it, when you want to start with an empty cluster.<\/p>\n\n\n\n<p>What we got in the last post was mostly a default configuration. Lets start from scratch by deleting the existing cluster:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; highlight: [1,4,6,8]; title: ; notranslate\" title=\"\">\nminicube@micro-minicube:~&gt; kubectl get cluster -A\nNAMESPACE   NAME              AGE   INSTANCES   READY   STATUS                     PRIMARY\ndefault     cluster-example   26h   3           3       Cluster in healthy state   cluster-example-1\nminicube@micro-minicube:~&gt; kubectl delete cluster cluster-example\ncluster.postgresql.cnpg.io &quot;cluster-example&quot; deleted\nminicube@micro-minicube:~&gt; kubectl get cluster -A\nNo resources found\nminicube@micro-minicube:~&gt; kubectl get pods\nNo resources found in default namespace.\nminicube@micro-minicube:~&gt;\n<\/pre><\/div>\n\n\n<p>Instead of using the minimal configuration from the last post, we&#8217;ll now use this one to describe our cluster:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; highlight: [1]; title: ; notranslate\" title=\"\">\nminicube@micro-minicube:~&gt; cat pg.yaml\napiVersion: postgresql.cnpg.io\/v1\nkind: Cluster\nmetadata:\n  name: my-pg-cluster\nspec:\n  instances: 3\n\n  bootstrap:\n    initdb:\n      database: db1\n      owner: db1\n      dataChecksums: true\n      walSegmentSize: 32\n  storage:\n    size: 1Gi\n<\/pre><\/div>\n\n\n<p>This is what changed (all under the &#8220;initdb&#8221; section):<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>The name of the cluster<\/li>\n\n\n\n<li>We want a new database &#8220;db1&#8221; to be created and this database should be owned by a new user called &#8220;db1&#8221;<\/li>\n\n\n\n<li>We want data checksum to be enabled<\/li>\n\n\n\n<li>Finally we want to change the WAL segment size from the default of 16MB to 32MB<\/li>\n<\/ul>\n\n\n\n<p>Once we apply this, we of course get the same picture as before for the pods and the services:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; highlight: [1,3]; title: ; notranslate\" title=\"\">\nminicube@micro-minicube:~&gt; kubectl apply -f pg.yaml\ncluster.postgresql.cnpg.io\/my-pg-cluster created\nminicube@micro-minicube:~&gt; kubectl get pods\nNAME              READY   STATUS    RESTARTS   AGE\nmy-pg-cluster-1   1\/1     Running   0          119s\nmy-pg-cluster-2   1\/1     Running   0          97s\nmy-pg-cluster-3   1\/1     Running   0          78s\n<\/pre><\/div>\n\n\n<p>Lets take one of these pods, start a shell and check what was created:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; highlight: [1,3,7]; title: ; notranslate\" title=\"\">\nminicube@micro-minicube:~&gt; kubectl exec my-pg-cluster-2 -i -t -- \/bin\/bash\nDefaulted container &quot;postgres&quot; out of: postgres, bootstrap-controller (init)\npostgres@my-pg-cluster-2:\/$ psql\npsql (16.2 (Debian 16.2-1.pgdg110+2))\nType &quot;help&quot; for help.\n\npostgres=# \\l\n                                                  List of databases\n   Name    |  Owner   | Encoding | Locale Provider | Collate | Ctype | ICU Locale | ICU Rules |   Access privileges\n-----------+----------+----------+-----------------+---------+-------+------------+-----------+-----------------------\n db1       | db1      | UTF8     | libc            | C       | C     |            |           |\n postgres  | postgres | UTF8     | libc            | C       | C     |            |           |\n template0 | postgres | UTF8     | libc            | C       | C     |            |           | =c\/postgres          +\n           |          |          |                 |         |       |            |           | postgres=CTc\/postgres\n template1 | postgres | UTF8     | libc            | C       | C     |            |           | =c\/postgres          +\n           |          |          |                 |         |       |            |           | postgres=CTc\/postgres\n(4 rows)\n\npostgres=#\n<\/pre><\/div>\n\n\n<p>We got the database and the database is owned by the new user. What we also can see is, the we got &#8220;C&#8221; for the &#8220;Collate&#8221; and &#8220;Ctype&#8221;. This is probably not what you want, so you also need to change this in the initdb section of the cluster definition:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; highlight: [1]; title: ; notranslate\" title=\"\">\nminicube@micro-minicube:~&amp;gt; cat pg.yaml\napiVersion: postgresql.cnpg.io\/v1\nkind: Cluster\nmetadata:\n  name: my-pg-cluster\nspec:\n  instances: 3\n\n  bootstrap:\n    initdb:\n      database: db1\n      owner: db1\n      dataChecksums: true\n      walSegmentSize: 32\n      localeCollate: &#039;en_US.utf8&#039;\n      localeCType: &#039;en_US.utf8&#039;\n  storage:\n    size: 1Gi\n<\/pre><\/div>\n\n\n<p>Destroy, re-create and check again:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; highlight: [1,3,5,10,12,16]; title: ; notranslate\" title=\"\">\nminicube@micro-minicube:~&gt; kubectl delete -f pg.yaml\ncluster.postgresql.cnpg.io &quot;my-pg-cluster&quot; deleted\nminicube@micro-minicube:~&gt; kubectl apply -f pg.yaml\ncluster.postgresql.cnpg.io\/my-pg-cluster created\nminicube@micro-minicube:~&gt; kubectl get pods\nNAME              READY   STATUS    RESTARTS   AGE\nmy-pg-cluster-1   1\/1     Running   0          55m\nmy-pg-cluster-2   1\/1     Running   0          54m\nmy-pg-cluster-3   1\/1     Running   0          54m\nminicube@micro-minicube:~&gt; kubectl exec my-pg-cluster-1 -i -t -- \/bin\/bash\nDefaulted container &quot;postgres&quot; out of: postgres, bootstrap-controller (init)\npostgres@my-pg-cluster-1:\/$ psql\npsql (16.2 (Debian 16.2-1.pgdg110+2))\nType &quot;help&quot; for help.\n\npostgres=# \\l\n                                                      List of databases\n   Name    |  Owner   | Encoding | Locale Provider |  Collate   |   Ctype    | ICU Locale | ICU Rules |   Access privileges   \n-----------+----------+----------+-----------------+------------+------------+------------+-----------+-----------------------\n db1       | db1      | UTF8     | libc            | en_US.utf8 | en_US.utf8 |            |           | \n postgres  | postgres | UTF8     | libc            | en_US.utf8 | en_US.utf8 |            |           | \n template0 | postgres | UTF8     | libc            | en_US.utf8 | en_US.utf8 |            |           | =c\/postgres          +\n           |          |          |                 |            |            |            |           | postgres=CTc\/postgres\n template1 | postgres | UTF8     | libc            | en_US.utf8 | en_US.utf8 |            |           | =c\/postgres          +\n           |          |          |                 |            |            |            |           | postgres=CTc\/postgres\n(4 rows)\n\npostgres=# \n\n<\/pre><\/div>\n\n\n<p>Now we are fine and the size of the WAL segments is as well as we wanted to have it:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: sql; highlight: [1]; title: ; notranslate\" title=\"\">\npostgres=# show wal_segment_size;\n wal_segment_size \n------------------\n 32MB\n(1 row)\n<\/pre><\/div>\n\n\n<p>Data checksum are enabled:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: sql; highlight: [1]; title: ; notranslate\" title=\"\">\npostgres=# \\! pg_controldata | grep checksum\nData page checksum version:           1\n<\/pre><\/div>\n\n\n<p>We could have changed the encoding, but as the default anyway is &#8220;UTF8&#8221;, there is no reason to touch this usually.<\/p>\n\n\n\n<p>Another option you have, is to execute SQL commands or whole scripts (via <a href=\"https:\/\/kubernetes.io\/docs\/concepts\/configuration\/configmap\/\">ConfigMaps<\/a>). A simple example is this one:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; highlight: [1,23,25,27,29,33]; title: ; notranslate\" title=\"\">\nminicube@micro-minicube:~&amp;gt; cat pg.yaml \napiVersion: postgresql.cnpg.io\/v1\nkind: Cluster\nmetadata:\n  name: my-pg-cluster\nspec:\n  instances: 3\n\n  bootstrap:\n    initdb:\n      database: db1\n      owner: db1\n      dataChecksums: true\n      walSegmentSize: 32\n      localeCollate: &#039;en_US.utf8&#039;\n      localeCType: &#039;en_US.utf8&#039;\n      postInitSQL:\n      - create user db2\n      - create database db2 with owner = db2\n  storage:\n    size: 1Gi\n\nminicube@micro-minicube:~&amp;gt; kubectl delete -f pg.yaml \ncluster.postgresql.cnpg.io &quot;my-pg-cluster&quot; deleted\nminicube@micro-minicube:~&amp;gt; kubectl apply -f pg.yaml\ncluster.postgresql.cnpg.io\/my-pg-cluster created\nminicube@micro-minicube:~&amp;gt; kubectl exec my-pg-cluster-1 -i -t -- \/bin\/bash\nDefaulted container &quot;postgres&quot; out of: postgres, bootstrap-controller (init)\npostgres@my-pg-cluster-1:\/$ psql\npsql (16.2 (Debian 16.2-1.pgdg110+2))\nType &quot;help&quot; for help.\n\npostgres=# \\l\n                                                      List of databases\n   Name    |  Owner   | Encoding | Locale Provider |  Collate   |   Ctype    | ICU Locale | ICU Rules |   Access privileges   \n-----------+----------+----------+-----------------+------------+------------+------------+-----------+-----------------------\n db1       | db1      | UTF8     | libc            | en_US.utf8 | en_US.utf8 |            |           | \n db2       | db2      | UTF8     | libc            | en_US.utf8 | en_US.utf8 |            |           | \n postgres  | postgres | UTF8     | libc            | en_US.utf8 | en_US.utf8 |            |           | \n template0 | postgres | UTF8     | libc            | en_US.utf8 | en_US.utf8 |            |           | =c\/postgres          +\n           |          |          |                 |            |            |            |           | postgres=CTc\/postgres\n template1 | postgres | UTF8     | libc            | en_US.utf8 | en_US.utf8 |            |           | =c\/postgres          +\n           |          |          |                 |            |            |            |           | postgres=CTc\/postgres\n(5 rows)\n\npostgres=# \n<\/pre><\/div>\n\n\n<p>All this is <a href=\"https:\/\/cloudnative-pg.io\/documentation\/1.23\/bootstrap\/\">documented<\/a>, of course. In the next post we&#8217;ll look at how we can configure PostgreSQL, because bootstrapping is one task, but configuring PostgreSQL for your needs is another task you definitely should look at.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the last post we&#8217;ve created a very simple three node PostgreSQL cluster using CloudNativePG and this was really easy to do. While this is great to get started quickly, you usually want to have more control on how PostgreSQL is initialized and configured. In this post we&#8217;ll look at bootstrapping the cluster and what [&hellip;]<\/p>\n","protected":false},"author":29,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[955,229,198,1320],"tags":[77],"type_dbi":[],"class_list":["post-33433","post","type-post","status-publish","format-standard","hentry","category-cloud","category-database-administration-monitoring","category-database-management","category-devops","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>CloudnativePG - Bootstrapping an empty 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\/cloudnativepg-bootstrapping-an-empty-cluster\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"CloudnativePG - Bootstrapping an empty cluster\" \/>\n<meta property=\"og:description\" content=\"In the last post we&#8217;ve created a very simple three node PostgreSQL cluster using CloudNativePG and this was really easy to do. While this is great to get started quickly, you usually want to have more control on how PostgreSQL is initialized and configured. In this post we&#8217;ll look at bootstrapping the cluster and what [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/cloudnativepg-bootstrapping-an-empty-cluster\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2024-06-08T12:28:01+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-06-08T12:28:04+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=\"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\/cloudnativepg-bootstrapping-an-empty-cluster\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/cloudnativepg-bootstrapping-an-empty-cluster\/\"},\"author\":{\"name\":\"Daniel Westermann\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d08e9bd996a89bd75c0286cbabf3c66\"},\"headline\":\"CloudnativePG &#8211; Bootstrapping an empty cluster\",\"datePublished\":\"2024-06-08T12:28:01+00:00\",\"dateModified\":\"2024-06-08T12:28:04+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/cloudnativepg-bootstrapping-an-empty-cluster\/\"},\"wordCount\":368,\"commentCount\":0,\"keywords\":[\"PostgreSQL\"],\"articleSection\":[\"Cloud\",\"Database Administration &amp; Monitoring\",\"Database management\",\"DevOps\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/cloudnativepg-bootstrapping-an-empty-cluster\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/cloudnativepg-bootstrapping-an-empty-cluster\/\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/cloudnativepg-bootstrapping-an-empty-cluster\/\",\"name\":\"CloudnativePG - Bootstrapping an empty cluster - dbi Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#website\"},\"datePublished\":\"2024-06-08T12:28:01+00:00\",\"dateModified\":\"2024-06-08T12:28:04+00:00\",\"author\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d08e9bd996a89bd75c0286cbabf3c66\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/cloudnativepg-bootstrapping-an-empty-cluster\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/cloudnativepg-bootstrapping-an-empty-cluster\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/cloudnativepg-bootstrapping-an-empty-cluster\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/www.dbi-services.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"CloudnativePG &#8211; Bootstrapping an empty 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":"CloudnativePG - Bootstrapping an empty 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\/cloudnativepg-bootstrapping-an-empty-cluster\/","og_locale":"en_US","og_type":"article","og_title":"CloudnativePG - Bootstrapping an empty cluster","og_description":"In the last post we&#8217;ve created a very simple three node PostgreSQL cluster using CloudNativePG and this was really easy to do. While this is great to get started quickly, you usually want to have more control on how PostgreSQL is initialized and configured. In this post we&#8217;ll look at bootstrapping the cluster and what [&hellip;]","og_url":"https:\/\/www.dbi-services.com\/blog\/cloudnativepg-bootstrapping-an-empty-cluster\/","og_site_name":"dbi Blog","article_published_time":"2024-06-08T12:28:01+00:00","article_modified_time":"2024-06-08T12:28:04+00:00","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\/cloudnativepg-bootstrapping-an-empty-cluster\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/cloudnativepg-bootstrapping-an-empty-cluster\/"},"author":{"name":"Daniel Westermann","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d08e9bd996a89bd75c0286cbabf3c66"},"headline":"CloudnativePG &#8211; Bootstrapping an empty cluster","datePublished":"2024-06-08T12:28:01+00:00","dateModified":"2024-06-08T12:28:04+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/cloudnativepg-bootstrapping-an-empty-cluster\/"},"wordCount":368,"commentCount":0,"keywords":["PostgreSQL"],"articleSection":["Cloud","Database Administration &amp; Monitoring","Database management","DevOps"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbi-services.com\/blog\/cloudnativepg-bootstrapping-an-empty-cluster\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/cloudnativepg-bootstrapping-an-empty-cluster\/","url":"https:\/\/www.dbi-services.com\/blog\/cloudnativepg-bootstrapping-an-empty-cluster\/","name":"CloudnativePG - Bootstrapping an empty cluster - dbi Blog","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"datePublished":"2024-06-08T12:28:01+00:00","dateModified":"2024-06-08T12:28:04+00:00","author":{"@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d08e9bd996a89bd75c0286cbabf3c66"},"breadcrumb":{"@id":"https:\/\/www.dbi-services.com\/blog\/cloudnativepg-bootstrapping-an-empty-cluster\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/cloudnativepg-bootstrapping-an-empty-cluster\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/cloudnativepg-bootstrapping-an-empty-cluster\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dbi-services.com\/blog\/"},{"@type":"ListItem","position":2,"name":"CloudnativePG &#8211; Bootstrapping an empty 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\/33433","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=33433"}],"version-history":[{"count":8,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/33433\/revisions"}],"predecessor-version":[{"id":33442,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/33433\/revisions\/33442"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=33433"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=33433"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=33433"},{"taxonomy":"type","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/type_dbi?post=33433"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}