{"id":33524,"date":"2024-06-10T09:02:54","date_gmt":"2024-06-10T07:02:54","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/?p=33524"},"modified":"2024-06-10T09:02:57","modified_gmt":"2024-06-10T07:02:57","slug":"cloudnativepg-postgresql-extensions","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/cloudnativepg-postgresql-extensions\/","title":{"rendered":"CloudNativePG &#8211; PostgreSQL extensions"},"content":{"rendered":"\n<p>Now that we know how we can <a href=\"https:\/\/www.dbi-services.com\/blog\/cloudnativepg-configuring-the-postgresql-instance\/\" target=\"_blank\" rel=\"noreferrer noopener\">configure the PostgreSQL instance and access control<\/a>, we&#8217;re going to look at what you can do when it comes to PostgreSQL extensions with CloudNativePG. As we have a running cluster, let&#8217;s see what we have available:<\/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 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=$ select name, installed_version from pg_available_extensions order by 1;\n        name        | installed_version \n--------------------+-------------------\n adminpack          | \n amcheck            | \n autoinc            | \n bloom              | \n btree_gin          | \n btree_gist         | \n citext             | \n cube               | \n dblink             | \n dict_int           | \n dict_xsyn          | \n earthdistance      | \n file_fdw           | \n fuzzystrmatch      | \n hstore             | \n insert_username    | \n intagg             | \n intarray           | \n isn                | \n lo                 | \n ltree              | \n moddatetime        | \n old_snapshot       | \n pageinspect        | \n pg_buffercache     | \n pg_freespacemap    | \n pg_prewarm         | \n pg_stat_statements | \n pg_surgery         | \n pg_trgm            | \n pg_visibility      | \n pg_walinspect      | \n pgaudit            | \n pgcrypto           | \n pgrowlocks         | \n pgstattuple        | \n plpgsql            | 1.0\n postgres_fdw       | \n refint             | \n seg                | \n sslinfo            | \n tablefunc          | \n tcn                | \n tsm_system_rows    | \n tsm_system_time    | \n unaccent           | \n uuid-ossp          | \n vector             | \n xml2               | \n(49 rows)\n<\/pre><\/div>\n\n\n<p>This are the <a href=\"https:\/\/www.postgresql.org\/docs\/current\/contrib.html\">PostgreSQL standard extensions<\/a> plus <a href=\"https:\/\/www.pgaudit.org\/\" target=\"_blank\" rel=\"noreferrer noopener\">pg_audit<\/a> and <a href=\"https:\/\/github.com\/pgvector\/pgvector\">pg_vector<\/a> but nothing more by default. To use them, you can just add them to the desired database as usual:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: sql; highlight: [1,3]; title: ; notranslate\" title=\"\">\npostgres=# create extension bloom;\nCREATE EXTENSION\npostgres=# \\dx\n                           List of installed extensions\n  Name   | Version |   Schema   |                   Description                    \n---------+---------+------------+--------------------------------------------------\n bloom   | 1.0     | public     | bloom access method - signature file based index\n plpgsql | 1.0     | pg_catalog | PL\/pgSQL procedural language\n(2 rows)\n<\/pre><\/div>\n\n\n<p>In the <a href=\"https:\/\/www.dbi-services.com\/blog\/cloudnativepg-configuring-the-postgresql-instance\/\">previous post<\/a> we&#8217;ve seen that you must not use the &#8220;alter system&#8221; command in such a setup. How can this work then for extensions which require to load an additional library like e.g. <a href=\"https:\/\/www.postgresql.org\/docs\/current\/pgstatstatements.html\">pg_stat_statements<\/a> or <a href=\"https:\/\/www.postgresql.org\/docs\/current\/pgprewarm.html\">pg_prewarm<\/a>? Those libraries need to be added to <a href=\"https:\/\/www.postgresql.org\/docs\/current\/runtime-config-client.html#GUC-SHARED-PRELOAD-LIBRARIES\">shared_preload_libraries<\/a> and you can do this only by editing the configuration files or by using &#8220;alter system&#8221;. Both are not supported by CloudNativePG. <\/p>\n\n\n\n<p>Having a look at shared_preload_libraries right now, we see that it&#8217;s empty:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: sql; highlight: [1]; title: ; notranslate\" title=\"\">\npostgres=# show shared_preload_libraries ;\n shared_preload_libraries \n--------------------------\n \n(1 row)\n\npostgres=# \n<\/pre><\/div>\n\n\n<p>Same story here: shared_preload_libraries is managed in the cluster configuration file, but you need to be careful: If you mistype a library or do anything which PostgreSQL cannot understand, you effectively bring down the cluster as PostgreSQL will not be able to start. Any self-healing capabilities of CloudNativePG will not help in this case. <\/p>\n\n\n\n<p>Some extensions, currently four of them, are &#8220;<a href=\"https:\/\/cloudnative-pg.io\/documentation\/1.23\/postgresql_conf\/\">managed<\/a>&#8221; by CloudNativePG. What that means is, that the operator will manage the extension as soon as there is a parameter which requires it. You can easily test this by e.g. adding one of the <a href=\"https:\/\/www.postgresql.org\/docs\/current\/pgstatstatements.html#PGSTATSTATEMENTS-CONFIG-PARAMS\">pg_stat_statements<\/a> parameter to the cluster configuration file:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; highlight: [1,3]; title: ; notranslate\" title=\"\">\nminicube@micro-minicube:~&gt; grep statement pg.yaml \n      pg_stat_statements.max: &quot;2500&quot;\nminicube@micro-minicube:~&gt; kubectl apply -f pg.yaml\ncluster.postgresql.cnpg.io\/my-pg-cluster configured\n<\/pre><\/div>\n\n\n<p>You need to be aware that this will trigger a restart of the pods:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; highlight: [1,6,11]; title: ; notranslate\" title=\"\">\nminicube@micro-minicube:~&gt; kubectl get pods\nNAME              READY   STATUS    RESTARTS   AGE\nmy-pg-cluster-1   1\/1     Running   0          4m35s\nmy-pg-cluster-2   0\/1     Running   0          4s\nmy-pg-cluster-3   1\/1     Running   0          4m22s\nminicube@micro-minicube:~&gt; kubectl get pods\nNAME              READY   STATUS    RESTARTS   AGE\nmy-pg-cluster-1   1\/1     Running   0          4m41s\nmy-pg-cluster-2   0\/1     Running   0          10s\nmy-pg-cluster-3   1\/1     Running   0          4m28s\nminicube@micro-minicube:~&gt; kubectl get pods\nNAME              READY   STATUS        RESTARTS   AGE\nmy-pg-cluster-1   1\/1     Running       0          4m43s\nmy-pg-cluster-2   1\/1     Running       0          12s\nmy-pg-cluster-3   0\/1     Terminating   0          4m30s\n<\/pre><\/div>\n\n\n<p>Once this completed, the extension is there:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; highlight: [1,3,7,37]; title: ; notranslate\" title=\"\">\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=$ \\d pg_stat_statements\n                      View &quot;public.pg_stat_statements&quot;\n         Column         |       Type       | Collation | Nullable | Default \n------------------------+------------------+-----------+----------+---------\n userid                 | oid              |           |          | \n dbid                   | oid              |           |          | \n toplevel               | boolean          |           |          | \n queryid                | bigint           |           |          | \n query                  | text             |           |          | \n plans                  | bigint           |           |          | \n total_plan_time        | double precision |           |          | \n min_plan_time          | double precision |           |          | \n max_plan_time          | double precision |           |          | \n mean_plan_time         | double precision |           |          | \n stddev_plan_time       | double precision |           |          | \n calls                  | bigint           |           |          | \n total_exec_time        | double precision |           |          | \n min_exec_time          | double precision |           |          | \n max_exec_time          | double precision |           |          | \n mean_exec_time         | double precision |           |          | \n stddev_exec_time       | double precision |           |          | \n rows                   | bigint           |           |          | \n shared_blks_hit        | bigint           |           |          | \n shared_blks_read       | bigint           |           |          | \n shared_blks_dirtied    | bigint           |           |          | \n shared_blks_written    | bigint           |           |          | \n local_blks_hit         | bigint           |           |          | \n local_blks_read        | bigint           |           |          | \n...\n\npostgres=$ show shared_preload_libraries ;\n shared_preload_libraries \n--------------------------\n pg_stat_statements\n(1 row)\n\n<\/pre><\/div>\n\n\n<p>Another popular extension for PostgreSQL is <a href=\"https:\/\/postgis.net\/\" target=\"_blank\" rel=\"noreferrer noopener\">PostGIS<\/a>. If you want to have this, you need to change the <a href=\"https:\/\/github.com\/cloudnative-pg\/postgis-containers\" target=\"_blank\" rel=\"noreferrer noopener\">container image<\/a> which is used by the operator to build your PostgreSQL cluster. As this is well described in the documentation we&#8217;ll not look into this into more details.<\/p>\n\n\n\n<p>For any other extension, you would need to create your own image which comes with it, the requirements for building such a container are documented <a href=\"https:\/\/cloudnative-pg.io\/documentation\/1.23\/container_images\/\" target=\"_blank\" rel=\"noreferrer noopener\">here<\/a>.<\/p>\n\n\n\n<p>In the next post we&#8217;ll look at the CloudNativePG kubectl plugin.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Now that we know how we can configure the PostgreSQL instance and access control, we&#8217;re going to look at what you can do when it comes to PostgreSQL extensions with CloudNativePG. As we have a running cluster, let&#8217;s see what we have available: This are the PostgreSQL standard extensions plus pg_audit and pg_vector but nothing [&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-33524","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.4) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>CloudNativePG - PostgreSQL extensions - 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-postgresql-extensions\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"CloudNativePG - PostgreSQL extensions\" \/>\n<meta property=\"og:description\" content=\"Now that we know how we can configure the PostgreSQL instance and access control, we&#8217;re going to look at what you can do when it comes to PostgreSQL extensions with CloudNativePG. As we have a running cluster, let&#8217;s see what we have available: This are the PostgreSQL standard extensions plus pg_audit and pg_vector but nothing [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/cloudnativepg-postgresql-extensions\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2024-06-10T07:02:54+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-06-10T07:02:57+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-postgresql-extensions\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/cloudnativepg-postgresql-extensions\\\/\"},\"author\":{\"name\":\"Daniel Westermann\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/person\\\/8d08e9bd996a89bd75c0286cbabf3c66\"},\"headline\":\"CloudNativePG &#8211; PostgreSQL extensions\",\"datePublished\":\"2024-06-10T07:02:54+00:00\",\"dateModified\":\"2024-06-10T07:02:57+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/cloudnativepg-postgresql-extensions\\\/\"},\"wordCount\":385,\"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-postgresql-extensions\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/cloudnativepg-postgresql-extensions\\\/\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/cloudnativepg-postgresql-extensions\\\/\",\"name\":\"CloudNativePG - PostgreSQL extensions - dbi Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#website\"},\"datePublished\":\"2024-06-10T07:02:54+00:00\",\"dateModified\":\"2024-06-10T07:02:57+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/person\\\/8d08e9bd996a89bd75c0286cbabf3c66\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/cloudnativepg-postgresql-extensions\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/cloudnativepg-postgresql-extensions\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/cloudnativepg-postgresql-extensions\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"CloudNativePG &#8211; PostgreSQL extensions\"}]},{\"@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 - PostgreSQL extensions - 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-postgresql-extensions\/","og_locale":"en_US","og_type":"article","og_title":"CloudNativePG - PostgreSQL extensions","og_description":"Now that we know how we can configure the PostgreSQL instance and access control, we&#8217;re going to look at what you can do when it comes to PostgreSQL extensions with CloudNativePG. As we have a running cluster, let&#8217;s see what we have available: This are the PostgreSQL standard extensions plus pg_audit and pg_vector but nothing [&hellip;]","og_url":"https:\/\/www.dbi-services.com\/blog\/cloudnativepg-postgresql-extensions\/","og_site_name":"dbi Blog","article_published_time":"2024-06-10T07:02:54+00:00","article_modified_time":"2024-06-10T07:02:57+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-postgresql-extensions\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/cloudnativepg-postgresql-extensions\/"},"author":{"name":"Daniel Westermann","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d08e9bd996a89bd75c0286cbabf3c66"},"headline":"CloudNativePG &#8211; PostgreSQL extensions","datePublished":"2024-06-10T07:02:54+00:00","dateModified":"2024-06-10T07:02:57+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/cloudnativepg-postgresql-extensions\/"},"wordCount":385,"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-postgresql-extensions\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/cloudnativepg-postgresql-extensions\/","url":"https:\/\/www.dbi-services.com\/blog\/cloudnativepg-postgresql-extensions\/","name":"CloudNativePG - PostgreSQL extensions - dbi Blog","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"datePublished":"2024-06-10T07:02:54+00:00","dateModified":"2024-06-10T07:02:57+00:00","author":{"@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d08e9bd996a89bd75c0286cbabf3c66"},"breadcrumb":{"@id":"https:\/\/www.dbi-services.com\/blog\/cloudnativepg-postgresql-extensions\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/cloudnativepg-postgresql-extensions\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/cloudnativepg-postgresql-extensions\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dbi-services.com\/blog\/"},{"@type":"ListItem","position":2,"name":"CloudNativePG &#8211; PostgreSQL extensions"}]},{"@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\/33524","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=33524"}],"version-history":[{"count":11,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/33524\/revisions"}],"predecessor-version":[{"id":33541,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/33524\/revisions\/33541"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=33524"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=33524"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=33524"},{"taxonomy":"type","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/type_dbi?post=33524"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}