{"id":13314,"date":"2020-01-18T06:00:11","date_gmt":"2020-01-18T05:00:11","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/deploying-your-own-postgresql-image-on-nutanix-era-2-deploying-a-new-postgresql-vm\/"},"modified":"2020-01-18T06:00:11","modified_gmt":"2020-01-18T05:00:11","slug":"deploying-your-own-postgresql-image-on-nutanix-era-2-deploying-a-new-postgresql-vm","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/deploying-your-own-postgresql-image-on-nutanix-era-2-deploying-a-new-postgresql-vm\/","title":{"rendered":"Deploying your own PostgreSQL image on Nutanix Era &#8211; 2 &#8211; Deploying a new PostgreSQL VM"},"content":{"rendered":"<p>In the <a href=\"https:\/\/www.dbi-services.com\/blog\/deploying-your-own-postgresql-image-on-nutanix-era\/\" target=\"_blank\" rel=\"noopener noreferrer\">last post<\/a> I described how you can create your own PostgreSQL image in Nutanix Era. In Nutanix wording this is a &#8220;Software profile&#8221;. This profile can now be used to deploy PostgreSQL VMs with just a few clicks or by using the API. In this post we&#8217;ll look at how this can be done and if it is really as easy as Nutanix promises. We&#8217;ll be doing it by using the graphical console first and then by using the API. Lets go.<\/p>\n<p><!--more--><\/p>\n<p>For deploying new databases we obviously need to go to the database section of Era:<br \/>\n<a href=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/Selection_054_1.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/Selection_054_1.jpg\" alt=\"\" width=\"1500\" height=\"570\" class=\"aligncenter size-full wp-image-36662\" \/><\/a><\/p>\n<p>For now we are going to deploy a single instance:<br \/>\n<a href=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/Selection_056_1-1.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/Selection_056_1-1.jpg\" alt=\"\" width=\"1500\" height=\"358\" class=\"aligncenter size-full wp-image-36663\" \/><\/a><br \/>\n<a href=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/Selection_057-1.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/Selection_057-1.jpg\" alt=\"\" width=\"800\" height=\"692\" class=\"aligncenter size-full wp-image-36665\" \/><\/a><\/p>\n<p>Our new software profile is available and this is what we use. Additionally a public ssh key should be provided for accessing the node:<br \/>\n<a href=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/Selection_058-1-1.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/Selection_058-1-1.png\" alt=\"\" width=\"796\" height=\"580\" class=\"aligncenter size-full wp-image-36666\" \/><\/a><\/p>\n<p>Provide the details for the new instance:<br \/>\n<a href=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/Selection_059-1-1.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/Selection_059-1-1.png\" alt=\"\" width=\"796\" height=\"519\" class=\"aligncenter size-full wp-image-36668\" \/><\/a><\/p>\n<p>Time machine allows you to go back in time and creates automatic storage snapshots according to the schedule you define here:<br \/>\n<a href=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/Selection_060-1-1.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/Selection_060-1-1.png\" alt=\"\" width=\"799\" height=\"550\" class=\"aligncenter size-full wp-image-36669\" \/><\/a><br \/>\nSLAs define retention policies for the snapshots. I will not cover that her.<\/p>\n<p>Kick it off and wait for the task to finish:<br \/>\n<a href=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/Selection_061_1.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/Selection_061_1.jpg\" alt=\"\" width=\"1500\" height=\"490\" class=\"aligncenter size-full wp-image-36673\" \/><\/a><\/p>\n<p>A few minutes later it is done:<br \/>\n<a href=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/Selection_062_1.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/Selection_062_1.jpg\" alt=\"\" width=\"1500\" height=\"665\" class=\"aligncenter size-full wp-image-36679\" \/><\/a><\/p>\n<p>Our new database is ready:<br \/>\n<a href=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/Selection_063_1.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/Selection_063_1.jpg\" alt=\"\" width=\"1500\" height=\"269\" class=\"aligncenter size-full wp-image-36682\" \/><\/a><br \/>\n<a href=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/Selection_064_1.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/Selection_064_1.jpg\" alt=\"\" width=\"1500\" height=\"606\" class=\"aligncenter size-full wp-image-36683\" \/><\/a><\/p>\n<p>From a deployment point of view this is super simple: A few clicks and a new PostgreSQL server is ready to use in minutes. The API call to do the same on the command line would be this:<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">\ncurl -k -X POST \\\n\thttps:\/\/10.38.11.9\/era\/v0.8\/databases\/provision \\\n\t-H 'Content-Type: application\/json' \\\n\t-H 'Authorization: Basic YWRtaW46bngyVGVjaDAwNyE=' \\\n\t-d \\\n\t'{\"databaseType\":\"postgres_database\",\"databaseName\":\"db2\",\"databaseDescription\":\"db2\",\"clusterId\":\"ccdab636-2a11-477b-a358-2b8db0382421\",\"softwareProfileId\":\"aa099964-e17c-4264-b047-00881dc5e2f8\",\"softwareProfileVersionId\":\"7ae7a44c-d7c5-46bc-bf0f-f9fe7665f537\",\"computeProfileId\":\"fb1d20bb-38e4-4964-852f-6209990402c6\",\"networkProfileId\":\"8ed5214c-4e2a-4ce5-a899-a07103bc60cc\",\"dbParameterProfileId\":\"3679ab5b-7688-41c4-bcf3-9fb4491544ea\",\"newDbServerTimeZone\":\"Europe\/Zurich\",\"timeMachineInfo\":{\"name\":\"db2_TM\",\"description\":\"\",\"slaId\":\"4d9dcd6d-b6f8-47f0-8015-9e691c1d3cf4\",\"schedule\":{\"snapshotTimeOfDay\":{\"hours\":1,\"minutes\":0,\"seconds\":0},\"continuousSchedule\":{\"enabled\":true,\"logBackupInterval\":30,\"snapshotsPerDay\":1},\"weeklySchedule\":{\"enabled\":true,\"dayOfWeek\":\"FRIDAY\"},\"monthlySchedule\":{\"enabled\":true,\"dayOfMonth\":\"17\"},\"quartelySchedule\":{\"enabled\":true,\"startMonth\":\"JANUARY\",\"dayOfMonth\":\"17\"},\"yearlySchedule\":{\"enabled\":false,\"dayOfMonth\":31,\"month\":\"DECEMBER\"}},\"tags\":[],\"autoTuneLogDrive\":true},\"provisionInfo\":[{\"name\":\"application_type\",\"value\":\"postgres_database\"},{\"name\":\"nodes\",\"value\":\"1\"},{\"name\":\"listener_port\",\"value\":\"5432\"},{\"name\":\"proxy_read_port\",\"value\":\"5001\"},{\"name\":\"proxy_write_port\",\"value\":\"5000\"},{\"name\":\"database_size\",\"value\":10},{\"name\":\"working_dir\",\"value\":\"\/tmp\"},{\"name\":\"auto_tune_staging_drive\",\"value\":true},{\"name\":\"enable_synchronous_mode\",\"value\":false},{\"name\":\"dbserver_name\",\"value\":\"postgres-2\"},{\"name\":\"dbserver_description\",\"value\":\"postgres-2\"},{\"name\":\"ssh_public_key\",\"value\":\"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDgJb4co+aaRuyAJv8F6fsz2YgO0ZHldX6qS22c813iDeUGWP\/1bGhF598uODlgK5nx29sW2WTlcmorZuCgHC2BJfzhL1xsL5Ca94uAEg48MbA+1+Woe49mF6bPDJWLXqC0YUpCDBZI9VHnrij4QhX2r3G87W0WNnNww1POwIJN3xpVq\/DnDWye+9ZL3s+eGR8d5f71iKnBo0BkcvY5gliOtM\/DuLT7Cs7KkjPgY+S6l5Cztvcj6hGO96zwlOVN3kjB18RH\/4q6B7YkhSxgTDMXCdoOf9F6BIhAjZga4lodHGbkMEBW+BJOnYnFTl+jVB\/aY1dALECnh4V+rr0Pd8EL daw@ltdaw\"},{\"name\":\"db_password\",\"value\":\"postgres\"}]}'\n<\/pre>\n<p>As said, provisioning is easy. Now lets see how the instance got created. Using the IP Address that was assigned, the postgres user and the public ssh key we provided we can connect to the VM:<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">\nssh postgres@10.38.11.40\nThe authenticity of host '10.38.11.40 (10.38.11.40)' can't be established.\nECDSA key fingerprint is SHA256:rN4QzdL2y55Lv8oALnW6pBQzBKOInP+X4obiJrqvK8o.\nAre you sure you want to continue connecting (yes\/no)? yes\nWarning: Permanently added '10.38.11.40' (ECDSA) to the list of known hosts.\nLast login: Fri Jan 17 18:48:26 2020 from 10.38.11.9\n<\/pre>\n<p>The first thing I would try is to connect to PostgreSQL:<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">\n-bash-4.2$ psql postgres\npsql (11.6 dbi services build)\nType \"help\" for help.\n\npostgres=# select version();\n                                                          version\n----------------------------------------------------------------------------------------------------------------------------\n PostgreSQL 11.6 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39), 64-bit\n(1 row)\n\npostgres=#\n<\/pre>\n<p>Ok, that works. What I did before I created the Software profile in the last post: I installed our <a href=\"https:\/\/www.dbi-services.com\/offering\/products\/dmk-management-kit\/\" target=\"_blank\" rel=\"noopener noreferrer\">DMK<\/a> and that gets started automatically as the required stuff is added to &#8220;.bash_profile&#8221; (you can see that in the last post because PS1 is not the default). But here I did not get our environment because Era has overwritten &#8220;.bash_profile&#8221;:<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">\n-bash-4.2$ cat .bash_profile\nexport PATH=\/usr\/lib64\/qt-3.3\/bin:\/usr\/local\/bin:\/usr\/bin:\/u01\/app\/postgres\/product\/11\/db_6\/bin:\/u01\/app\/postgres\/product\/11\/db_6\/bin\nexport PGDATA=\/pg_data_544474d1_822c_4912_8db4_7c1c7f45df54\nexport PGDATABASE=postgres\nexport PGUSER=postgres\nexport PGPORT=5432\nexport ANSIBLE_LIBRARY=\/opt\/era_base\/era_engine\/drivers\/nutanix_era\/era_drivers\/AnsibleModules\/bin\n<\/pre>\n<p>Would be great if the original &#8220;.bash_profile&#8221; would still be there so custom adjustment are not lost. <\/p>\n<p>Looking at mountpoinzs:<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">\n-bash-4.2$ df -h\nFilesystem                                                                                                                          Size  Used Avail Use% Mounted on\ndevtmpfs                                                                                                                            7.8G     0  7.8G   0% \/dev\ntmpfs                                                                                                                               7.8G  8.0K  7.8G   1% \/dev\/shm\ntmpfs                                                                                                                               7.8G  9.7M  7.8G   1% \/run\ntmpfs                                                                                                                               7.8G     0  7.8G   0% \/sys\/fs\/cgroup\n\/dev\/mapper\/centos_centos7postgres12-root                                                                                            26G  2.4G   24G   9% \/\n\/dev\/sda1                                                                                                                          1014M  149M  866M  15% \/boot\n\/dev\/sdb                                                                                                                             27G   74M   26G   1% \/u01\/app\/postgres\/product\/11\/db_6\ntmpfs                                                                                                                               1.6G     0  1.6G   0% \/run\/user\/1000\n\/dev\/mapper\/VG_PG_DATA_544474d1_822c_4912_8db4_7c1c7f45df54-LV_PG_DATA_544474d1_822c_4912_8db4_7c1c7f45df54                          50G  108M   47G   1% \/pg_data_544474d1_822c_4912_8db4_7c1c7f45df54\n\/dev\/mapper\/VG_PG_DATA_TBLSPC_544474d1_822c_4912_8db4_7c1c7f45df54-LV_PG_DATA_TBLSPC_544474d1_822c_4912_8db4_7c1c7f45df54           9.8G   44M  9.2G   1% \/pg_dbidb1_544474d1_822c_4912_8db4_7c1c7f45df54\n\/dev\/mapper\/ntnx_era_agent_vg_1700f784395111eab53f506b8d241a39-ntnx_era_agent_lv_era_software_1700f784395111eab53f506b8d241a39      1.5G  534M  821M  40% \/opt\/era_base\/era_engine\n\/dev\/mapper\/ntnx_era_agent_vg_1700f784395111eab53f506b8d241a39-ntnx_era_agent_lv_era_logs_1700f784395111eab53f506b8d241a39          3.9G   18M  3.6G   1% \/opt\/era_base\/logs\n\/dev\/mapper\/ntnx_era_agent_vg_1700f784395111eab53f506b8d241a39-ntnx_era_agent_lv_era_config_1700f784395111eab53f506b8d241a39         47M  1.1M   42M   3% \/opt\/era_base\/cfg\n\/dev\/mapper\/ntnx_era_agent_vg_5c3a7120261b4354a3b38ee168726298-ntnx_era_agent_lv_db_stagging_logs_5c3a7120261b4354a3b38ee168726298   99G   93M   94G   1% \/opt\/era_base\/db_logs\n<\/pre>\n<p>The PostgreSQL binaries got their own mountpoint. PGDATA is on its own mountpoint and it seems we have a tablespace in &#8220;\/pg_dbidb1_544474d1_822c_4912_8db4_7c1c7f45df54&#8221;:<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">\n-bash-4.2$ psql -c \"\\db\" postgres\n                            List of tablespaces\n     Name      |  Owner   |                    Location\n---------------+----------+-------------------------------------------------\n pg_default    | postgres |\n pg_global     | postgres |\n tblspc_dbidb1 | postgres | \/pg_dbidb1_544474d1_822c_4912_8db4_7c1c7f45df54\n(3 rows)\n\n-bash-4.2$ psql -c \"\\l+\" postgres\n                                                                     List of databases\n   Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges   |  Size   |  Tablespace   |                Description\n-----------+----------+----------+-------------+-------------+-----------------------+---------+---------------+--------------------------------------------\n dbidb1    | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |                       | 7717 kB | tblspc_dbidb1 |\n postgres  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |                       | 7717 kB | pg_default    | default administrative connection database\n template0 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c\/postgres          +| 7577 kB | pg_default    | unmodifiable empty database\n           |          |          |             |             | postgres=CTc\/postgres |         |               |\n template1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c\/postgres          +| 7577 kB | pg_default    | default template for new databases\n           |          |          |             |             | postgres=CTc\/postgres |         |               |\n(4 rows)\n<\/pre>\n<p>This confirms that our database &#8220;dbidb1&#8221; was placed into a separate tablespace. There is another mountpoint which seems to be there for the archived WAL files, and we can confirm that as well:<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">\n-bash-4.2$ psql\npsql (11.6 dbi services build)\nType \"help\" for help.\n\npostgres=# show archive_command ;\n                      archive_command\n-----------------------------------------------------------\n  sh \/opt\/era_base\/cfg\/postgres\/archive_command.sh %p  %f\n(1 row)\n\npostgres=# \\! cat \/opt\/era_base\/cfg\/postgres\/archive_command.sh\ntest ! -f \/opt\/era_base\/db_logs\/dbidb1\/$2 &amp;&amp;  cp -p $1 \/opt\/era_base\/db_logs\/dbidb1\/\/$2\npostgres=#\n<\/pre>\n<p>So archiving is enabled and this is what I expected. The costing parameters seem to be the default:<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">\npostgres=# select name,setting from pg_settings where name like '%cost%';\n             name             | setting\n------------------------------+---------\n autovacuum_vacuum_cost_delay | 20\n autovacuum_vacuum_cost_limit | -1\n cpu_index_tuple_cost         | 0.005\n cpu_operator_cost            | 0.0025\n cpu_tuple_cost               | 0.01\n jit_above_cost               | 100000\n jit_inline_above_cost        | 500000\n jit_optimize_above_cost      | 500000\n parallel_setup_cost          | 1000\n parallel_tuple_cost          | 0.1\n random_page_cost             | 4\n seq_page_cost                | 1\n vacuum_cost_delay            | 0\n vacuum_cost_limit            | 200\n vacuum_cost_page_dirty       | 20\n vacuum_cost_page_hit         | 1\n vacuum_cost_page_miss        | 10\n(17 rows)\n<\/pre>\n<p>Memory parameters seem to be the default as well:<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">\npostgres=# show shared_buffers ;\n shared_buffers\n----------------\n 128MB\n(1 row)\n\npostgres=# show work_mem;\n work_mem\n----------\n 4MB\n(1 row)\n\npostgres=# show maintenance_work_mem ;\n maintenance_work_mem\n----------------------\n 64MB\n(1 row)\n\npostgres=# show effective_cache_size ;\n effective_cache_size\n----------------------\n 4GB\n(1 row)\n<\/pre>\n<p>There are &#8220;Parameter profiles&#8221; you can use and create but currently there are not that many parameters that can be adjusted:<br \/>\n<a href=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/Selection_065_1-2.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/Selection_065_1-2.jpg\" alt=\"\" width=\"1500\" height=\"514\" class=\"aligncenter size-full wp-image-36687\" \/><\/a><\/p>\n<p>That&#8217;s it for now. Deploying new PostgreSQL instances is really easy. I am currently not sure why there needs to be a tablespace but maybe that becomes clear in a future post when we&#8217;ll look at backup and restore. From a PostgreSQL configuration perspective you for sure need to do some adjustments when the databases become bigger and load increases.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the last post I described how you can create your own PostgreSQL image in Nutanix Era. In Nutanix wording this is a &#8220;Software profile&#8221;. This profile can now be used to deploy PostgreSQL VMs with just a few clicks or by using the API. In this post we&#8217;ll look at how this can be [&hellip;]<\/p>\n","protected":false},"author":29,"featured_media":13315,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[229],"tags":[1801,1797,77],"type_dbi":[],"class_list":["post-13314","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-database-administration-monitoring","tag-era","tag-nutanix","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>Deploying your own PostgreSQL image on Nutanix Era - 2 - Deploying a new PostgreSQL VM - 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\/deploying-your-own-postgresql-image-on-nutanix-era-2-deploying-a-new-postgresql-vm\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Deploying your own PostgreSQL image on Nutanix Era - 2 - Deploying a new PostgreSQL VM\" \/>\n<meta property=\"og:description\" content=\"In the last post I described how you can create your own PostgreSQL image in Nutanix Era. In Nutanix wording this is a &#8220;Software profile&#8221;. This profile can now be used to deploy PostgreSQL VMs with just a few clicks or by using the API. In this post we&#8217;ll look at how this can be [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/deploying-your-own-postgresql-image-on-nutanix-era-2-deploying-a-new-postgresql-vm\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2020-01-18T05:00:11+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/Selection_054_1.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1500\" \/>\n\t<meta property=\"og:image:height\" content=\"570\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\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=\"8 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\/deploying-your-own-postgresql-image-on-nutanix-era-2-deploying-a-new-postgresql-vm\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/deploying-your-own-postgresql-image-on-nutanix-era-2-deploying-a-new-postgresql-vm\/\"},\"author\":{\"name\":\"Daniel Westermann\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d08e9bd996a89bd75c0286cbabf3c66\"},\"headline\":\"Deploying your own PostgreSQL image on Nutanix Era &#8211; 2 &#8211; Deploying a new PostgreSQL VM\",\"datePublished\":\"2020-01-18T05:00:11+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/deploying-your-own-postgresql-image-on-nutanix-era-2-deploying-a-new-postgresql-vm\/\"},\"wordCount\":554,\"commentCount\":0,\"image\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/deploying-your-own-postgresql-image-on-nutanix-era-2-deploying-a-new-postgresql-vm\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/Selection_054_1.jpg\",\"keywords\":[\"Era\",\"Nutanix\",\"PostgreSQL\"],\"articleSection\":[\"Database Administration &amp; Monitoring\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/deploying-your-own-postgresql-image-on-nutanix-era-2-deploying-a-new-postgresql-vm\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/deploying-your-own-postgresql-image-on-nutanix-era-2-deploying-a-new-postgresql-vm\/\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/deploying-your-own-postgresql-image-on-nutanix-era-2-deploying-a-new-postgresql-vm\/\",\"name\":\"Deploying your own PostgreSQL image on Nutanix Era - 2 - Deploying a new PostgreSQL VM - dbi Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/deploying-your-own-postgresql-image-on-nutanix-era-2-deploying-a-new-postgresql-vm\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/deploying-your-own-postgresql-image-on-nutanix-era-2-deploying-a-new-postgresql-vm\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/Selection_054_1.jpg\",\"datePublished\":\"2020-01-18T05:00:11+00:00\",\"author\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d08e9bd996a89bd75c0286cbabf3c66\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/deploying-your-own-postgresql-image-on-nutanix-era-2-deploying-a-new-postgresql-vm\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/deploying-your-own-postgresql-image-on-nutanix-era-2-deploying-a-new-postgresql-vm\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/deploying-your-own-postgresql-image-on-nutanix-era-2-deploying-a-new-postgresql-vm\/#primaryimage\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/Selection_054_1.jpg\",\"contentUrl\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/Selection_054_1.jpg\",\"width\":1500,\"height\":570},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/deploying-your-own-postgresql-image-on-nutanix-era-2-deploying-a-new-postgresql-vm\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/www.dbi-services.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Deploying your own PostgreSQL image on Nutanix Era &#8211; 2 &#8211; Deploying a new PostgreSQL VM\"}]},{\"@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":"Deploying your own PostgreSQL image on Nutanix Era - 2 - Deploying a new PostgreSQL VM - 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\/deploying-your-own-postgresql-image-on-nutanix-era-2-deploying-a-new-postgresql-vm\/","og_locale":"en_US","og_type":"article","og_title":"Deploying your own PostgreSQL image on Nutanix Era - 2 - Deploying a new PostgreSQL VM","og_description":"In the last post I described how you can create your own PostgreSQL image in Nutanix Era. In Nutanix wording this is a &#8220;Software profile&#8221;. This profile can now be used to deploy PostgreSQL VMs with just a few clicks or by using the API. In this post we&#8217;ll look at how this can be [&hellip;]","og_url":"https:\/\/www.dbi-services.com\/blog\/deploying-your-own-postgresql-image-on-nutanix-era-2-deploying-a-new-postgresql-vm\/","og_site_name":"dbi Blog","article_published_time":"2020-01-18T05:00:11+00:00","og_image":[{"width":1500,"height":570,"url":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/Selection_054_1.jpg","type":"image\/jpeg"}],"author":"Daniel Westermann","twitter_card":"summary_large_image","twitter_creator":"@westermanndanie","twitter_misc":{"Written by":"Daniel Westermann","Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dbi-services.com\/blog\/deploying-your-own-postgresql-image-on-nutanix-era-2-deploying-a-new-postgresql-vm\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/deploying-your-own-postgresql-image-on-nutanix-era-2-deploying-a-new-postgresql-vm\/"},"author":{"name":"Daniel Westermann","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d08e9bd996a89bd75c0286cbabf3c66"},"headline":"Deploying your own PostgreSQL image on Nutanix Era &#8211; 2 &#8211; Deploying a new PostgreSQL VM","datePublished":"2020-01-18T05:00:11+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/deploying-your-own-postgresql-image-on-nutanix-era-2-deploying-a-new-postgresql-vm\/"},"wordCount":554,"commentCount":0,"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/deploying-your-own-postgresql-image-on-nutanix-era-2-deploying-a-new-postgresql-vm\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/Selection_054_1.jpg","keywords":["Era","Nutanix","PostgreSQL"],"articleSection":["Database Administration &amp; Monitoring"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbi-services.com\/blog\/deploying-your-own-postgresql-image-on-nutanix-era-2-deploying-a-new-postgresql-vm\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/deploying-your-own-postgresql-image-on-nutanix-era-2-deploying-a-new-postgresql-vm\/","url":"https:\/\/www.dbi-services.com\/blog\/deploying-your-own-postgresql-image-on-nutanix-era-2-deploying-a-new-postgresql-vm\/","name":"Deploying your own PostgreSQL image on Nutanix Era - 2 - Deploying a new PostgreSQL VM - dbi Blog","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/deploying-your-own-postgresql-image-on-nutanix-era-2-deploying-a-new-postgresql-vm\/#primaryimage"},"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/deploying-your-own-postgresql-image-on-nutanix-era-2-deploying-a-new-postgresql-vm\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/Selection_054_1.jpg","datePublished":"2020-01-18T05:00:11+00:00","author":{"@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d08e9bd996a89bd75c0286cbabf3c66"},"breadcrumb":{"@id":"https:\/\/www.dbi-services.com\/blog\/deploying-your-own-postgresql-image-on-nutanix-era-2-deploying-a-new-postgresql-vm\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/deploying-your-own-postgresql-image-on-nutanix-era-2-deploying-a-new-postgresql-vm\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dbi-services.com\/blog\/deploying-your-own-postgresql-image-on-nutanix-era-2-deploying-a-new-postgresql-vm\/#primaryimage","url":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/Selection_054_1.jpg","contentUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/Selection_054_1.jpg","width":1500,"height":570},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/deploying-your-own-postgresql-image-on-nutanix-era-2-deploying-a-new-postgresql-vm\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dbi-services.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Deploying your own PostgreSQL image on Nutanix Era &#8211; 2 &#8211; Deploying a new PostgreSQL VM"}]},{"@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\/13314","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=13314"}],"version-history":[{"count":0,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/13314\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media\/13315"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=13314"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=13314"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=13314"},{"taxonomy":"type","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/type_dbi?post=13314"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}