{"id":16696,"date":"2021-09-23T07:48:07","date_gmt":"2021-09-23T05:48:07","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/some-basics-about-timezones-in-postgresql\/"},"modified":"2021-09-23T07:48:07","modified_gmt":"2021-09-23T05:48:07","slug":"some-basics-about-timezones-in-postgresql","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/some-basics-about-timezones-in-postgresql\/","title":{"rendered":"Some basics about time zones in PostgreSQL"},"content":{"rendered":"<p>As soon as you have an application which works across time zones you will have to deal with that properly in the database. I&#8217;ve seen many applications that didn&#8217;t care of that at the beginning, and much work had to be done to change the implementation afterwards. The one and only recommendation is: Do it properly from the beginning and you don&#8217;t have to think much about it in the future. PostgreSQL comes with all you need.<\/p>\n<p><!--more--><\/p>\n<p>Let&#8217;s start from the beginning: How does PostgreSQL store the local time and time zone information? If I ask for the current date and time on my installation I get this:<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">\npostgres=# select current_timestamp;\n       current_timestamp       \n-------------------------------\n 2021-09-23 08:19:58.921732+02\n(1 row)\n<\/pre>\n<p>You can&#8217;t know it, but this is my current local time in Switzerland. What you see at the end of the output is the offset to <a href=\"https:\/\/www.timeanddate.com\/worldclock\/timezone\/utc\" target=\"_blank\" rel=\"noopener\">UTC<\/a>, in my case plus 2 hours. Internally, PostgreSQL stores everything as UTC and the output gets converted to whatever you want to see. If I want to know the current local time for Lisbon, I can do it like this:<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">\npostgres=# select current_timestamp at time zone 'Europe\/Lisbon';\n          timezone          \n----------------------------\n 2021-09-23 07:23:26.222616\n(1 row)\n<\/pre>\n<p>&#8230; or I can do it like this:<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">\npostgres=# set timezone = 'Europe\/Helsinki';\nSET\npostgres=# select current_timestamp;\n       current_timestamp       \n-------------------------------\n 2021-09-23 09:25:07.545244+03\n(1 row)\n<\/pre>\n<p>You can use all the time zones listed in <a href=\"https:\/\/www.postgresql.org\/docs\/current\/view-pg-timezone-names.html\" target=\"_blank\" rel=\"noopener\">pg_timezone_names<\/a>:<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">\npostgres=# select * from pg_timezone_names limit 10;\n        name         | abbrev | utc_offset | is_dst \n---------------------+--------+------------+--------\n GMT0                | GMT    | 00:00:00   | f\n HST                 | HST    | -10:00:00  | f\n MST                 | MST    | -07:00:00  | f\n WET                 | WEST   | 01:00:00   | t\n Turkey              | +03    | 03:00:00   | f\n Cuba                | CDT    | -04:00:00  | t\n CST6CDT             | CDT    | -05:00:00  | t\n Canada\/Central      | CDT    | -05:00:00  | t\n Canada\/Newfoundland | NDT    | -02:30:00  | t\n Canada\/Eastern      | EDT    | -04:00:00  | t\n(10 rows)\n<\/pre>\n<p>Knowing all this, one point should be clear already: Use <a href=\"https:\/\/www.postgresql.org\/docs\/current\/datatype-datetime.html\" target=\"_blank\" rel=\"noopener\">timestamp with time zone<\/a> if you want to be on the save side. In contrast to Oracle, the &#8220;date&#8221; data type does not contain any time information:<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">\npostgres=# select '2021-09-22 11:11:11'::date;\n    date    \n------------\n 2021-09-22\n(1 row)\n<\/pre>\n<p>The &#8220;timestamp&#8221; data type does not contain any time zone information:<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">\npostgres=# select '2021-09-22 11:11:11+02'::timestamp;\n      timestamp      \n---------------------\n 2021-09-22 11:11:11\n(1 row)\n<\/pre>\n<p>Don&#8217;t use &#8220;date&#8221; and &#8220;timestamp&#8221; if you need to work across time zones, they just are not made for that. There is a clear statement about that in the <a href=\"https:\/\/wiki.postgresql.org\/wiki\/Don%27t_Do_This\" target=\"_blank\" rel=\"noopener\">PostgreSQL Wiki<\/a>. Make your life easy: Use timestamptz.<\/p>\n<p>Note that there are also the &#8220;time&#8221; and &#8220;timetz&#8221; data types:<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">\npostgres=# select '11:11:11'::time;\n   time   \n----------\n 11:11:11\n(1 row)\n\npostgres=# select '11:11:11'::timetz;\n   timetz    \n-------------\n 11:11:11+00\n(1 row)\n<\/pre>\n<p>The same applies here: Don&#8217;t use them. Maybe you have a use case for time, but timetz should not be used at all (check the Wiki entry linked above once more). <\/p>\n<p>My PostgreSQL instance is apparently running with a time zone setting of &#8216;Europe\/Zurich&#8217; (or any other time zone which has an offset of plus 2 hours from UTC):<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">\npostgres=# select current_timestamp;\n       current_timestamp       \n-------------------------------\n 2021-09-23 09:02:02.631441+02\n(1 row)\n<\/pre>\n<p>How can I change that? Quite easy:<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">\npostgres=# select name, setting  from pg_settings where setting like '%Zurich%';\n     name     |    setting    \n--------------+---------------\n log_timezone | Europe\/Zurich\n TimeZone     | Europe\/Zurich\n(2 rows)\n<\/pre>\n<p>There is one parameter for the timestamps when it comes to logging, and another one which specifies the time zone the server uses as it&#8217;s default configuration:<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">\npostgres=# set TimeZone='Mexico\/General';\nSET\npostgres=# select current_timestamp;\n       current_timestamp       \n-------------------------------\n 2021-09-23 02:05:27.149078-05\n(1 row)\n<\/pre>\n<p>The remaining question is: How is the default server setting selected? It did not explicitly set the &#8220;TimeZone&#8221; parameter but still I got the correct value for my current time zone. This is were the operating system comes into the game. My local time zone settings on the OS are:<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">\npostgres@debian11pg:\/home\/postgres\/ [pgdev] timedatectl \n               Local time: Thu 2021-09-23 08:55:31 CEST\n           Universal time: Thu 2021-09-23 06:55:31 UTC\n                 RTC time: Thu 2021-09-23 06:55:32\n                Time zone: Europe\/Zurich (CEST, +0200)\nSystem clock synchronized: yes\n              NTP service: active\n          RTC in local TZ: no\n<\/pre>\n<p>The principle for the operating system (<a href=\"https:\/\/www.debian.org\/\" target=\"blank\" rel=\"noopener\">Debian<\/a> 11 in my case) is more or less the same as with PostgreSQL. You can set, whatever you have available:<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">\npostgres@debian11pg:\/home\/postgres\/ [pgdev] timedatectl list-timezones | head -5\nAfrica\/Abidjan\nAfrica\/Accra\nAfrica\/Algiers\nAfrica\/Bissau\nAfrica\/Cairo\n<\/pre>\n<p>The setting which is currently in use is defined by a <a href=\"https:\/\/en.wikipedia.org\/wiki\/Symbolic_link\" target=\"_blank\" rel=\"noopener\">symlink<\/a>:<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">\npostgres@debian11pg:\/home\/postgres\/ [pgdev] ls -la \/etc\/localtime \nlrwxrwxrwx 1 root root 33 Jul  9 08:40 \/etc\/localtime -&gt; \/usr\/share\/zoneinfo\/Europe\/Zurich\n<\/pre>\n<p>You can either change the symlink manually to whatever you see in that directory:<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">\npostgres@debian11pg:\/home\/postgres\/ [pgdev] ls -l \/usr\/share\/zoneinfo\/ | head -5\ntotal 328\ndrwxr-xr-x  2 root root   4096 Jul  9 08:40 Africa\ndrwxr-xr-x  6 root root  20480 Jul  9 08:40 America\ndrwxr-xr-x  2 root root   4096 Jul  9 08:40 Antarctica\ndrwxr-xr-x  2 root root   4096 Jul  9 08:40 Arctic\n<\/pre>\n<p>.. or you can (and should) use <a href=\"https:\/\/www.man7.org\/linux\/man-pages\/man1\/timedatectl.1.html\" target=\"_blank\" rel=\"noopener\">timedatectl<\/a> for that:<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">\npostgres@debian11pg:\/home\/postgres\/ [pgdev] sudo timedatectl set-timezone 'Asia\/Dubai'\npostgres@debian11pg:\/home\/postgres\/ [pgdev] timedatectl\n               Local time: Thu 2021-09-23 11:22:36 +04\n           Universal time: Thu 2021-09-23 07:22:36 UTC\n                 RTC time: Thu 2021-09-23 07:22:37\n                Time zone: Asia\/Dubai (+04, +0400)\nSystem clock synchronized: yes\n              NTP service: active\n          RTC in local TZ: no\npostgres@debian11pg:\/home\/postgres\/ [pgdev] date\nThu 23 Sep 2021 11:22:38 AM +04\n<\/pre>\n<p>Now we changed the configuration of the operating system. Let&#8217;s initialize a fresh PostgreSQL cluster and check the default once more:<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">\npostgres@debian11pg:\/home\/postgres\/ [pgdev] mkdir \/var\/tmp\/dummy\npostgres@debian11pg:\/home\/postgres\/ [pgdev] initdb -D \/var\/tmp\/dummy\npostgres@debian11pg:\/home\/postgres\/ [pgdev] export PGPORT=8888\npostgres@debian11pg:\/home\/postgres\/ [pgdev] pg_ctl -D \/var\/tmp\/dummy start\npostgres@debian11pg:\/home\/postgres\/ [pgdev] psql -p 8888 -c \"select current_timestamp\"\n       current_timestamp       \n-------------------------------\n 2021-09-23 11:24:01.759933+04\n(1 row)\n<\/pre>\n<p>Here we go: The default you get, depends on the configuration of your operating system. You can still change that if you are not happy with the default:<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">\npostgres@debian11pg:\/home\/postgres\/ [pgdev] psql -p 8888 -c \"alter system set TimeZone='Europe\/Zurich'\"\npostgres@debian11pg:\/home\/postgres\/ [pgdev] pg_ctl -D \/var\/tmp\/dummy restart\npostgres@debian11pg:\/home\/postgres\/ [pgdev] psql -p 8888 -c \"select current_timestamp\"\n       current_timestamp       \n-------------------------------\n 2021-09-23 09:28:56.233463+02\n(1 row)\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>As soon as you have an application which works across time zones you will have to deal with that properly in the database. I&#8217;ve seen many applications that didn&#8217;t care of that at the beginning, and much work had to be done to change the implementation afterwards. The one and only recommendation is: Do it [&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-16696","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.2) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Some basics about time zones in PostgreSQL - 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\/some-basics-about-timezones-in-postgresql\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Some basics about time zones in PostgreSQL\" \/>\n<meta property=\"og:description\" content=\"As soon as you have an application which works across time zones you will have to deal with that properly in the database. I&#8217;ve seen many applications that didn&#8217;t care of that at the beginning, and much work had to be done to change the implementation afterwards. The one and only recommendation is: Do it [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/some-basics-about-timezones-in-postgresql\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2021-09-23T05:48:07+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\/some-basics-about-timezones-in-postgresql\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/some-basics-about-timezones-in-postgresql\/\"},\"author\":{\"name\":\"Daniel Westermann\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d08e9bd996a89bd75c0286cbabf3c66\"},\"headline\":\"Some basics about time zones in PostgreSQL\",\"datePublished\":\"2021-09-23T05:48:07+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/some-basics-about-timezones-in-postgresql\/\"},\"wordCount\":558,\"commentCount\":0,\"keywords\":[\"PostgreSQL\"],\"articleSection\":[\"Database Administration &amp; Monitoring\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/some-basics-about-timezones-in-postgresql\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/some-basics-about-timezones-in-postgresql\/\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/some-basics-about-timezones-in-postgresql\/\",\"name\":\"Some basics about time zones in PostgreSQL - dbi Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#website\"},\"datePublished\":\"2021-09-23T05:48:07+00:00\",\"author\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d08e9bd996a89bd75c0286cbabf3c66\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/some-basics-about-timezones-in-postgresql\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/some-basics-about-timezones-in-postgresql\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/some-basics-about-timezones-in-postgresql\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/www.dbi-services.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Some basics about time zones in PostgreSQL\"}]},{\"@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":"Some basics about time zones in PostgreSQL - 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\/some-basics-about-timezones-in-postgresql\/","og_locale":"en_US","og_type":"article","og_title":"Some basics about time zones in PostgreSQL","og_description":"As soon as you have an application which works across time zones you will have to deal with that properly in the database. I&#8217;ve seen many applications that didn&#8217;t care of that at the beginning, and much work had to be done to change the implementation afterwards. The one and only recommendation is: Do it [&hellip;]","og_url":"https:\/\/www.dbi-services.com\/blog\/some-basics-about-timezones-in-postgresql\/","og_site_name":"dbi Blog","article_published_time":"2021-09-23T05:48:07+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\/some-basics-about-timezones-in-postgresql\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/some-basics-about-timezones-in-postgresql\/"},"author":{"name":"Daniel Westermann","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d08e9bd996a89bd75c0286cbabf3c66"},"headline":"Some basics about time zones in PostgreSQL","datePublished":"2021-09-23T05:48:07+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/some-basics-about-timezones-in-postgresql\/"},"wordCount":558,"commentCount":0,"keywords":["PostgreSQL"],"articleSection":["Database Administration &amp; Monitoring"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbi-services.com\/blog\/some-basics-about-timezones-in-postgresql\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/some-basics-about-timezones-in-postgresql\/","url":"https:\/\/www.dbi-services.com\/blog\/some-basics-about-timezones-in-postgresql\/","name":"Some basics about time zones in PostgreSQL - dbi Blog","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"datePublished":"2021-09-23T05:48:07+00:00","author":{"@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d08e9bd996a89bd75c0286cbabf3c66"},"breadcrumb":{"@id":"https:\/\/www.dbi-services.com\/blog\/some-basics-about-timezones-in-postgresql\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/some-basics-about-timezones-in-postgresql\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/some-basics-about-timezones-in-postgresql\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dbi-services.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Some basics about time zones in PostgreSQL"}]},{"@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\/16696","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=16696"}],"version-history":[{"count":0,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/16696\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=16696"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=16696"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=16696"},{"taxonomy":"type","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/type_dbi?post=16696"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}