{"id":7021,"date":"2016-02-03T16:50:32","date_gmt":"2016-02-03T15:50:32","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/edb-postgres-advanced-server-9-5-new-features-profiles\/"},"modified":"2016-02-03T16:50:32","modified_gmt":"2016-02-03T15:50:32","slug":"edb-postgres-advanced-server-9-5-new-features-profiles","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/edb-postgres-advanced-server-9-5-new-features-profiles\/","title":{"rendered":"EDB Postgres Advanced Server 9.5 new features &#8211; Profiles"},"content":{"rendered":"<p>The just released version of EDB Postgres Advanced Server 9.5 introduces profiles very much the same as in Oracle. Lets have a look at it. <\/p>\n<p>As in Oracle there is a default profile:<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">\n(enterprisedb@[local]:5445) [postgres] &gt; x\nExpanded display is on.\n(enterprisedb@[local]:5445) [postgres] &gt; select * from edb_profile;\n-[ RECORD 1 ]-----------+--------\nprfname                 | default\nprffailedloginattempts  | -2\nprfpasswordlocktime     | -2\nprfpasswordlifetime     | -2\nprfpasswordgracetime    | -2\nprfpasswordreusetime    | -2\nprfpasswordreusemax     | -2\nprfpasswordverifyfuncdb | NULL\nprfpasswordverifyfunc   | NULL\n<\/pre>\n<p>You can also query the dba_profiles view exactly as in Oracle:<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">\n(enterprisedb@[local]:5445) [postgres] &gt; x\nExpanded display is off.\n(enterprisedb@[local]:5445) [postgres] &gt; select * from dba_profiles;\n profile |      resource_name       | resource_type |   limit   | common \n---------+--------------------------+---------------+-----------+--------\n DEFAULT | FAILED_LOGIN_ATTEMPTS    | PASSWORD      | UNLIMITED | NO\n DEFAULT | PASSWORD_GRACE_TIME      | PASSWORD      | UNLIMITED | NO\n DEFAULT | PASSWORD_LIFE_TIME       | PASSWORD      | UNLIMITED | NO\n DEFAULT | PASSWORD_LOCK_TIME       | PASSWORD      | UNLIMITED | NO\n DEFAULT | PASSWORD_REUSE_MAX       | PASSWORD      | UNLIMITED | NO\n DEFAULT | PASSWORD_REUSE_TIME      | PASSWORD      | UNLIMITED | NO\n DEFAULT | PASSWORD_VERIFY_FUNCTION | PASSWORD      | NULL      | NO\n(7 rows)\n<\/pre>\n<p>In fact the dba_profiles view is just a view on top of edb_profile. You can verify this by:<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">\n(enterprisedb@[local]:5445) [postgres] &gt;  d+ dba_profiles                                                        \n                           View \"sys.dba_profiles\"\n    Column     |          Type          | Modifiers | Storage  | Description \n---------------+------------------------+-----------+----------+-------------\n profile       | character varying(128) |           | extended | \n resource_name | character varying(32)  |           | extended | \n resource_type | character varying(8)   |           | extended | \n limit         | character varying(128) |           | extended | \n common        | character varying(3)   |           | extended | \nView definition:\n SELECT\n        CASE\n...\n<\/pre>\n<p>When there are profiles the &#8220;create user\/role&#8221; syntax should have been extended, too:<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">\n(enterprisedb@[local]:5445) [postgres] &gt; h create user\nCommand:     CREATE USER\nDescription: define a new database role\nSyntax:\nCREATE USER name [ [ WITH ] option [ ... ] ]\n\nwhere option can be:\n\n      SUPERUSER | NOSUPERUSER\n    | CREATEDB | NOCREATEDB\n    | CREATEROLE | NOCREATEROLE\n    | CREATEUSER | NOCREATEUSER\n    | INHERIT | NOINHERIT\n    | LOGIN | NOLOGIN\n    | REPLICATION | NOREPLICATION\n    | CONNECTION LIMIT connlimit\n    | [ ENCRYPTED | UNENCRYPTED ] PASSWORD 'password'\n    | VALID UNTIL 'timestamp'\n    | PROFILE profile_name      &lt;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n    | ACCOUNT { LOCK | UNLOCK }\n    | LOCK TIME &#039;timestamp&#039;\n    | PASSWORD EXPIRE [ AT &#039;timestamp&#039; ]\n    | IN ROLE role_name [, ...]\n    | IN GROUP role_name [, ...]\n    | ROLE role_name [, ...]\n    | ADMIN role_name [, ...]\n    | USER role_name [, ...]\n    | SYSID uid\n<\/pre>\n<p>I would expect that every new user gets the default profile if we do not specify one:<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">\n(enterprisedb@[local]:5445) [postgres] &gt; create user u1 login password 'u1';\nCREATE ROLE\n(enterprisedb@[local]:5445) [postgres] &gt; du+ u1\n                     List of roles\n Role name |   Attributes    | Member of | Description \n-----------+-----------------+-----------+-------------\n u1        | Profile default | {}        | \n<\/pre>\n<p>As expected. So lets play with a new profile:<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">\n(enterprisedb@[local]:5445) [postgres] &gt; create profile my_profile;\nCREATE PROFILE\nTime: 18.296 ms\n(enterprisedb@[local]:5445) [postgres] &gt; alter profile my_profile limit FAILED_LOGIN_ATTEMPTS 1;\nALTER PROFILE\nTime: 1.799 ms\n(enterprisedb@[local]:5445) [postgres] &gt; alter profile my_profile limit PASSWORD_LOCK_TIME 1;   \nALTER PROFILE\nTime: 0.979 ms\n(enterprisedb@[local]:5445) [postgres] &gt; alter profile my_profile limit PASSWORD_LIFE_TIME 1;\n<\/pre>\n<p>Pretty much the same as in Oracle. For a full list and a description of the limits check the <a href=\"http:\/\/www.enterprisedb.com\/docs\/en\/9.5\/eeguide\/Postgres_Plus_Enterprise_Edition_Guide.1.027.html\" target=\"_blank\" rel=\"noopener\">documentation<\/a>. <\/p>\n<p>Lets attach the new profile to our user:<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">\n(enterprisedb@[local]:5445) [postgres] &gt; alter user u1 profile my_profile ;\nALTER ROLE\nTime: 1.931 ms\n(enterprisedb@[local]:5445) [postgres] &gt; du u1\n               List of roles\n Role name |     Attributes     | Member of \n-----------+--------------------+-----------\n u1        | Profile my_profile | {}\n<\/pre>\n<p>An important point to understand is that profiles are not per database but per instance. Once a profile is created it is available in all databases:<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">\n(enterprisedb@[local]:5445) [postgres] &gt; c edb\nYou are now connected to database \"edb\" as user \"enterprisedb\".\n(enterprisedb@[local]:5445) [edb] &gt; select distinct profile from dba_profiles;\n  profile   \n------------\n DEFAULT\n MY_PROFILE\n(2 rows)\n\nTime: 63.333 ms\n(enterprisedb@[local]:5445) [edb] &gt; c postgres                               \nYou are now connected to database \"postgres\" as user \"enterprisedb\".\n(enterprisedb@[local]:5445) [postgres] &gt; select distinct profile from dba_profiles;\n  profile   \n------------\n DEFAULT\n MY_PROFILE\n(2 rows)\n\nTime: 2.130 ms\n\n(enterprisedb@[local]:5445) [postgres] &gt; create database db1;\nCREATE DATABASE\nTime: 1226.746 ms\n(enterprisedb@[local]:5445) [postgres] &gt; c db1\nYou are now connected to database \"db1\" as user \"enterprisedb\".\n(enterprisedb@[local]:5445) [db1] &gt; select distinct profile from dba_profiles;\n  profile   \n------------\n DEFAULT\n MY_PROFILE\n(2 rows)\n<\/pre>\n<p>When profiles are global what about a password verify function you may attach to the profile? Functions are per database, aren&#8217;t they? Lets create a simple function:<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">\ncreate or replace function my_func ( password in varchar(30) ) return boolean\nis\nbegin\n  if ( length (password) &lt; 5 )\n  then\n    raise_application_error ( -20001, &#039;to short&#039;);\n  end if;\n  return true;\nend my_func;\n\/\n<\/pre>\n<p>And then assign this function to the profile:<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">\n(enterprisedb@[local]:5445) [postgres] &gt; df\n                             List of functions\n Schema |  Name   | Result data type |    Argument data types     |  Type  \n--------+---------+------------------+----------------------------+--------\n public | my_func | boolean          | password character varying | normal\n(1 row)\n\n(enterprisedb@[local]:5445) [postgres] &gt; alter profile my_profile limit password_verify_function my_func;\nERROR:  function my_func does not exist\nTime: 0.479 ms\n<\/pre>\n<p>Hm. The function clearly exists. The issue here is that there are some specific requirements for the password verify function:<\/p>\n<ul>\n<li>It needs to be owned by a super user<\/li>\n<li>It needs to be in the sys schema<\/li>\n<li>It needs to have the following signature: function_name (varchar2, varchar2, varchar2) return boolean <\/li>\n<\/ul>\n<p>Knowing this let&#8217;s try again with this function:<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">\nCREATE OR REPLACE FUNCTION sys.my_func (username varchar2, password varchar2, old_password varchar2)  \nRETURN boolean IMMUTABLE  \nIS  \nBEGIN  \n  if ( length (password) &lt; 5 )  \n  then  \n    raise_application_error ( -20001, &#039;too short&#039;);  \n  end if;  \n  return true;  \nEND my_func;  \n<\/pre>\n<p>To be sure lets set the owner of this function to a super user<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">\n(enterprisedb@[local]:5445) [postgres] &gt; alter function my_func (varchar2,varchar2,varchar2) owner to enterprisedb;\nALTER FUNCTION\nTime: 0.311 ms\n<\/pre>\n<p>Do we succeed now?<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">\n(enterprisedb@[local]:5445) [postgres] &gt; alter profile my_profile limit password_verify_function my_func;\nALTER PROFILE\nTime: 21.048 ms\n<\/pre>\n<p>Yes, much better. Lets do a simple test:<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">\n(enterprisedb@[local]:5445) [postgres] &gt; alter user u1 password 'u1';\nERROR:  EDB-20001: too short\nCONTEXT:  edb-spl function my_func(character varying,character varying,character varying) line 5 at procedure\/function invocation statement\nTime: 67.705 ms\n<\/pre>\n<p>Ok, now it really works. But what does happen if I am connected to another database where the password verify function does not exist?<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">\n(enterprisedb@[local]:5445) [postgres] &gt; c edb\nYou are now connected to database \"edb\" as user \"enterprisedb\".\n(enterprisedb@[local]:5445) [edb] &gt; create user u2 password 'u2' profile my_profile;\nERROR:  password verify function is stored in database postgres\nHINT:  You must connect to this database in order to assign a password.\nTime: 0.644 ms\n(enterprisedb@[local]:5445) [edb] &gt; \n<\/pre>\n<p>Ok, at least the server is telling me where I need to connect to. <\/p>\n<p>This does not lock like a big new feature but it is another little piece that makes migrations from Oracle less problematic especially if there are requirements for password policies.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>The just released version of EDB Postgres Advanced Server 9.5 introduces profiles very much the same as in Oracle. Lets have a look at it. As in Oracle there is a default profile: (enterprisedb@[local]:5445) [postgres] &gt; x Expanded display is on. (enterprisedb@[local]:5445) [postgres] &gt; select * from edb_profile; -[ RECORD 1 ]&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8211; prfname | default [&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":[713,77,25],"type_dbi":[],"class_list":["post-7021","post","type-post","status-publish","format-standard","hentry","category-database-administration-monitoring","tag-enterprisedb","tag-postgresql","tag-security"],"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>EDB Postgres Advanced Server 9.5 new features - Profiles - 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\/edb-postgres-advanced-server-9-5-new-features-profiles\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"EDB Postgres Advanced Server 9.5 new features - Profiles\" \/>\n<meta property=\"og:description\" content=\"The just released version of EDB Postgres Advanced Server 9.5 introduces profiles very much the same as in Oracle. Lets have a look at it. As in Oracle there is a default profile: (enterprisedb@[local]:5445) [postgres] &gt; x Expanded display is on. (enterprisedb@[local]:5445) [postgres] &gt; select * from edb_profile; -[ RECORD 1 ]-----------+-------- prfname | default [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/edb-postgres-advanced-server-9-5-new-features-profiles\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2016-02-03T15:50:32+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\/edb-postgres-advanced-server-9-5-new-features-profiles\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/edb-postgres-advanced-server-9-5-new-features-profiles\/\"},\"author\":{\"name\":\"Daniel Westermann\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d08e9bd996a89bd75c0286cbabf3c66\"},\"headline\":\"EDB Postgres Advanced Server 9.5 new features &#8211; Profiles\",\"datePublished\":\"2016-02-03T15:50:32+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/edb-postgres-advanced-server-9-5-new-features-profiles\/\"},\"wordCount\":356,\"commentCount\":0,\"keywords\":[\"enterprisedb\",\"PostgreSQL\",\"Security\"],\"articleSection\":[\"Database Administration &amp; Monitoring\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/edb-postgres-advanced-server-9-5-new-features-profiles\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/edb-postgres-advanced-server-9-5-new-features-profiles\/\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/edb-postgres-advanced-server-9-5-new-features-profiles\/\",\"name\":\"EDB Postgres Advanced Server 9.5 new features - Profiles - dbi Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#website\"},\"datePublished\":\"2016-02-03T15:50:32+00:00\",\"author\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d08e9bd996a89bd75c0286cbabf3c66\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/edb-postgres-advanced-server-9-5-new-features-profiles\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/edb-postgres-advanced-server-9-5-new-features-profiles\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/edb-postgres-advanced-server-9-5-new-features-profiles\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/www.dbi-services.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"EDB Postgres Advanced Server 9.5 new features &#8211; Profiles\"}]},{\"@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":"EDB Postgres Advanced Server 9.5 new features - Profiles - 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\/edb-postgres-advanced-server-9-5-new-features-profiles\/","og_locale":"en_US","og_type":"article","og_title":"EDB Postgres Advanced Server 9.5 new features - Profiles","og_description":"The just released version of EDB Postgres Advanced Server 9.5 introduces profiles very much the same as in Oracle. Lets have a look at it. As in Oracle there is a default profile: (enterprisedb@[local]:5445) [postgres] &gt; x Expanded display is on. (enterprisedb@[local]:5445) [postgres] &gt; select * from edb_profile; -[ RECORD 1 ]-----------+-------- prfname | default [&hellip;]","og_url":"https:\/\/www.dbi-services.com\/blog\/edb-postgres-advanced-server-9-5-new-features-profiles\/","og_site_name":"dbi Blog","article_published_time":"2016-02-03T15:50:32+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\/edb-postgres-advanced-server-9-5-new-features-profiles\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/edb-postgres-advanced-server-9-5-new-features-profiles\/"},"author":{"name":"Daniel Westermann","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d08e9bd996a89bd75c0286cbabf3c66"},"headline":"EDB Postgres Advanced Server 9.5 new features &#8211; Profiles","datePublished":"2016-02-03T15:50:32+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/edb-postgres-advanced-server-9-5-new-features-profiles\/"},"wordCount":356,"commentCount":0,"keywords":["enterprisedb","PostgreSQL","Security"],"articleSection":["Database Administration &amp; Monitoring"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbi-services.com\/blog\/edb-postgres-advanced-server-9-5-new-features-profiles\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/edb-postgres-advanced-server-9-5-new-features-profiles\/","url":"https:\/\/www.dbi-services.com\/blog\/edb-postgres-advanced-server-9-5-new-features-profiles\/","name":"EDB Postgres Advanced Server 9.5 new features - Profiles - dbi Blog","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"datePublished":"2016-02-03T15:50:32+00:00","author":{"@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d08e9bd996a89bd75c0286cbabf3c66"},"breadcrumb":{"@id":"https:\/\/www.dbi-services.com\/blog\/edb-postgres-advanced-server-9-5-new-features-profiles\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/edb-postgres-advanced-server-9-5-new-features-profiles\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/edb-postgres-advanced-server-9-5-new-features-profiles\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dbi-services.com\/blog\/"},{"@type":"ListItem","position":2,"name":"EDB Postgres Advanced Server 9.5 new features &#8211; Profiles"}]},{"@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\/7021","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=7021"}],"version-history":[{"count":0,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/7021\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=7021"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=7021"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=7021"},{"taxonomy":"type","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/type_dbi?post=7021"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}