{"id":10556,"date":"2017-10-20T14:21:13","date_gmt":"2017-10-20T12:21:13","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/postgresql-index-suggestion-with-powa\/"},"modified":"2023-06-08T16:36:48","modified_gmt":"2023-06-08T14:36:48","slug":"postgresql-index-suggestion-with-powa","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/postgresql-index-suggestion-with-powa\/","title":{"rendered":"PostgreSQL Index Suggestion With Powa"},"content":{"rendered":"<p><strong>By Mouhamadou Diaw<\/strong><\/p>\n<p>A few time ago my colleague Daniel did a <a href=\"https:\/\/www.dbi-services.com\/blog\/monitoring-tools-for-postgresql-powa\/\" target=\"_blank\" rel=\"noopener\">blog<\/a> about <span style=\"color: #ea6d14\">POWA<\/span>. In a nice article he shown how this tool can be used to monitor our PostgreSQL.<br \/>\nIn this present article I am going to show how this powerful tool can help by suggesting indexes which can optimize our queries.<br \/>\nI am using postgeSQL 9.6<br \/>\n<code><br \/>\n[root@pgservertools extension]# yum install postgresql96-server.x86_64<br \/>\n[root@pgservertools extension]# yum install postgresql96-contrib.x86_64<br \/>\n<\/code><br \/>\nAnd Then I initialize a cluster<br \/>\n<code><br \/>\n[root@pgservertools extension]# \/usr\/pgsql-9.6\/bin\/postgresql96-setup initdb<br \/>\nInitializing database ... OK<br \/>\n<\/code><br \/>\nPOWA require following extensions:<br \/>\n<span style=\"color: #ea6d14\">pg_qualstats<\/span>: gathers statistics on predicates found in WHERE statements and JOIN clauses<br \/>\n<span style=\"color: #ea6d14\">pg_stat_kcache<\/span> : gathers statistics about real reads and writes done by the filesystem layer<br \/>\n<span style=\"color: #ea6d14\">hypopg<\/span> : extension adding hypothetical indexes in PostgreSQL. This extension can be used to see if PostgreSQL will use the index or no<br \/>\n<span style=\"color: #ea6d14\">btree_gist<\/span> : provides GiST index operator classes that implement B-tree equivalent behavior for various data types<br \/>\n<span style=\"color: #ea6d14\">powa_web<\/span> : will provide access to powa via a navigator<\/p>\n<p>Just we will note that following packages are installed to resolve some dependencies during the installation of these extensions.<br \/>\n<code><br \/>\nyum install python-backports-ssl_match_hostname.noarch<br \/>\nrpm -ivh python-tornado-2.2.1-8.el7.noarch.rpm<br \/>\nrpm -ivh python-tornado-2.2.1-8.el7.noarch.rpm<br \/>\n<\/code><br \/>\nAnd then extensions are installed using yum<br \/>\n<code><br \/>\nyum install powa_96.x86_64 pg_qualstats96.x86_64 pg_stat_kcache96.x86_64 hypopg_96.x86_64 powa_96-web.x86_64<br \/>\n<\/code><br \/>\nAfter the installation the postgresql.conf is modified to load the extensions<br \/>\n<code><br \/>\n[root@pgservertools data]# grep shared_preload_libraries postgresql.conf | grep -v ^#<br \/>\nshared_preload_libraries = 'pg_stat_statements,powa,pg_stat_kcache,pg_qualstats'       # (change requires restart)<br \/>\n[root@pgservertools data]#<br \/>\n<\/code><br \/>\nAnd then restart the PostgreSQL<br \/>\n<code><br \/>\n[root@pgservertools data]# systemctl restart postgresql-9.6.service<br \/>\n<\/code><br \/>\nFor POWA configuration, the first step is to create a user for powa<br \/>\n<code><br \/>\npostgres=# CREATE ROLE powa SUPERUSER LOGIN PASSWORD 'root';<br \/>\nCREATE ROLE<br \/>\n<\/code><br \/>\nand the repository database we will use.<br \/>\n<code><br \/>\npostgres=# create database powa;<br \/>\nCREATE DATABASE<br \/>\n<\/code><br \/>\nThe extensions must be created in the repository database and in all databases we want to monitor<br \/>\n<code><br \/>\npostgres=#\\c powa<br \/>\npowa=# CREATE EXTENSION pg_stat_statements;<br \/>\nCREATE EXTENSION<br \/>\npowa=# CREATE EXTENSION btree_gist;<br \/>\nCREATE EXTENSION<br \/>\npowa=# CREATE EXTENSION powa;<br \/>\nCREATE EXTENSION<br \/>\npowa=# CREATE EXTENSION pg_qualstats;<br \/>\nCREATE EXTENSION<br \/>\npowa=# CREATE EXTENSION pg_stat_kcache;<br \/>\nCREATE EXTENSION<br \/>\npowa=# CREATE EXTENSION hypopg;<br \/>\nCREATE EXTENSION<br \/>\n<\/code><br \/>\nWe can verify that extensions are loaded in the database using<br \/>\n<code><br \/>\npowa=# \\dx<br \/>\nList of installed extensions<br \/>\nName        | Version |   Schema   |                        Description<br \/>\n--------------------+---------+------------+-----------------------------------------------------------<br \/>\nbtree_gist         | 1.2     | public     | support for indexing common datatypes in GiST<br \/>\nhypopg             | 1.1.0   | public     | Hypothetical indexes for PostgreSQL<br \/>\npg_qualstats       | 1.0.2   | public     | An extension collecting statistics about quals<br \/>\npg_stat_kcache     | 2.0.3   | public     | Kernel statistics gathering<br \/>\npg_stat_statements | 1.4     | public     | track execution statistics of all SQL statements executed<br \/>\nplpgsql            | 1.0     | pg_catalog | PL\/pgSQL procedural language<br \/>\npowa               | 3.1.1   | public     | PostgreSQL Workload Analyser-core<br \/>\n(7 rows)<br \/>\npowa=#<br \/>\n<\/code><\/p>\n<p>Now let\u2019s create a database named mydb for our tests and let\u2019s create all extensions inside the database.<br \/>\n<code><br \/>\n[postgres@pgservertools ~]$ psql<br \/>\npsql (9.6.5)<br \/>\nType \"help\" for help.<br \/>\npostgres=# create database mydb;<br \/>\nCREATE DATABASE<br \/>\npostgres=#<br \/>\n<\/code><br \/>\nLet&#8217;s again verify extensions into the database mydb<br \/>\n<code><br \/>\nmydb=# \\dx<br \/>\nList of installed extensions<br \/>\nName        | Version |   Schema   |                        Description<br \/>\n--------------------+---------+------------+-----------------------------------------------------------<br \/>\nbtree_gist         | 1.2     | public     | support for indexing common datatypes in GiST<br \/>\nhypopg             | 1.1.0   | public     | Hypothetical indexes for PostgreSQL<br \/>\npg_qualstats       | 1.0.2   | public     | An extension collecting statistics about quals<br \/>\npg_stat_kcache     | 2.0.3   | public     | Kernel statistics gathering<br \/>\npg_stat_statements | 1.4     | public     | track execution statistics of all SQL statements executed<br \/>\nplpgsql            | 1.0     | pg_catalog | PL\/pgSQL procedural language<br \/>\npowa               | 3.1.1   | public     | PostgreSQL Workload Analyser-core<br \/>\n(7 rows)<br \/>\nmydb=#<br \/>\n<\/code><br \/>\nIn mydb database we create a table mytab and insert in it some rows<br \/>\n<code><br \/>\nmydb=# \\d mytab<br \/>\nTable \"public.mytab\"<br \/>\nColumn |  Type   | Modifiers<br \/>\n--------+---------+-----------<br \/>\nid     | integer |<br \/>\nval    | text    |<br \/>\n.<br \/>\nmydb=# select count(*) from mytab;<br \/>\ncount<br \/>\n-----------<br \/>\n100000000<br \/>\n(1 row)<br \/>\n<\/code><br \/>\nThe last step is to configure the powa-web configuration file. Below is our file<br \/>\n<code><br \/>\n[root@pgservertools etc]# pwd<br \/>\n\/etc<br \/>\n[root@pgservertools etc]# cat powa-web.conf<br \/>\nservers={<br \/>\n'main': {<br \/>\n'host': 'localhost',<br \/>\n'port': '5432',<br \/>\n'database': 'powa',<br \/>\n'query': {'client_encoding': 'utf8'}<br \/>\n}<br \/>\n}<br \/>\ncookie_secret=\"secret\"<br \/>\n[root@pgservertools etc]#<br \/>\n<\/code><br \/>\nAnd then powa-beb can be started by following command<br \/>\n<code><br \/>\n[root@pgservertools etc]# powa-web &amp;<br \/>\n[1] 5600<br \/>\n[root@pgservertools etc]# [I 171006 13:54:42 powa-web:12] Starting powa-web on http:\/\/0.0.0.0:8888<br \/>\n<\/code><br \/>\nWe can now log with the user powa we created at <span style=\"color: #ea6d14\"> http:\/\/localhost:8888\/ <\/span><br \/>\n<a href=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/powa1-2.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-19101\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/powa1-2.png\" alt=\"powa1\" width=\"300\" height=\"113\" \/><\/a><\/p>\n<p>And then we can choose mydb database to monitor it<br \/>\n<a href=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/powa2-2.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-19103\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/powa2-2.png\" alt=\"powa2\" width=\"300\" height=\"201\" \/><\/a><\/p>\n<p>Now let\u2019s run some queries. As my load is very low I set my pg_qualstats.sample_rate=1 in the postgresql.conf file (thanks to Julien Rouhaud)<br \/>\n<code><br \/>\n[postgres@pgservertools data]$ grep pg_qualstats.sample_rate postgresql.conf<br \/>\npg_qualstats.sample_rate = 1<br \/>\n<\/code><br \/>\n<code><br \/>\nmydb=# select * from mytab where id in (75,25,2014,589);<br \/>\nid  |    val<br \/>\n------+-----------<br \/>\n25 | line 25<br \/>\n75 | line 75<br \/>\n589 | line 589<br \/>\n2014 | line 2014<br \/>\n(4 rows)<\/code><\/p>\n<p><code><br \/>\n<\/code><\/p>\n<p><code>Time: 9472.525 ms<br \/>\nmydb=#<br \/>\n<\/code><br \/>\nUsing the tab Index suggestions, we click on Optimize the database. We can see that an index creation is recommended with the potential gain.<br \/>\n<a href=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/powa3-2.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-19104\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/powa3-2.png\" alt=\"powa3\" width=\"300\" height=\"109\" \/><\/a><br \/>\n<a href=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/powa4-2.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-19105\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/powa4-2.png\" alt=\"powa4\" width=\"300\" height=\"87\" \/><\/a><br \/>\n<a href=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/powa5-2.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-19106\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/powa5-2.png\" alt=\"powa5\" width=\"300\" height=\"85\" \/><\/a><br \/>\nWe will just note that PostgreSQL uses the extension hypopg to see if the index will be used or no. Let\u2019s see how this extension works. Hypothetical indexes are useful to know if specific indexes can increase performance of a query. They do not cost CPU as they don\u2019t exist.<br \/>\nLet\u2019s create a virtual index in mydb database<br \/>\n<code><br \/>\nmydb=# select * from hypopg_create_index('create index on mytab (id)');<br \/>\nindexrelid |       indexname<br \/>\n------------+-----------------------<br \/>\n55799 | btree_mytab_id<br \/>\n(1 row)<br \/>\nmydb=#<br \/>\n<\/code><br \/>\nWe can verify the existence of the virtual index by<br \/>\n<code><br \/>\nmydb=# SELECT * FROM hypopg_list_indexes();<br \/>\nindexrelid |       indexname       | nspname | relname | amname<br \/>\n------------+-----------------------+---------+---------+--------<br \/>\n55799 | btree_mytab_id | public  | mytab   | btree<br \/>\n(1 row)<br \/>\n<\/code><br \/>\nUsing explain, we can see that PostgreSQL will use the index.<br \/>\n<code><br \/>\nmydb=# explain select * from mytab where id in (75,25,2014,589);<br \/>\nQUERY PLAN<br \/>\n-------------------------------------------------------------------------------------<br \/>\n<strong>Index Scan <\/strong>using btree_mytab_id on mytab  (cost=0.07..20.34 rows=4 width=17)<br \/>\nIndex Cond: (id = ANY ('{75,25,2014,589}'::integer[]))<br \/>\n(2 rows)<br \/>\n<\/code><br \/>\nJust not that explain analyze will not use the virtual index<br \/>\n<strong>Conclusion<\/strong><br \/>\nIn this article we see how POWA can help for optimizing our PostgreSQL database.<br \/>\n<em><br \/>\nReferences: https:\/\/pgxn.org\/dist\/hypopg\/; http:\/\/powa.readthedocs.io\/en\/latest\/<br \/>\n<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>By Mouhamadou Diaw A few time ago my colleague Daniel did a blog about POWA. In a nice article he shown how this tool can be used to monitor our PostgreSQL. In this present article I am going to show how this powerful tool can help by suggesting indexes which can optimize our queries. I [&hellip;]<\/p>\n","protected":false},"author":27,"featured_media":10557,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[229],"tags":[91,1192,77],"type_dbi":[],"class_list":["post-10556","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-database-administration-monitoring","tag-index","tag-optimization","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>PostgreSQL Index Suggestion With Powa - dbi Blog<\/title>\n<meta name=\"description\" content=\"PostgreSQL, Powa, Index, Optimization\" \/>\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\/postgresql-index-suggestion-with-powa\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"PostgreSQL Index Suggestion With Powa\" \/>\n<meta property=\"og:description\" content=\"PostgreSQL, Powa, Index, Optimization\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/postgresql-index-suggestion-with-powa\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2017-10-20T12:21:13+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-06-08T14:36:48+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/powa1-2.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1856\" \/>\n\t<meta property=\"og:image:height\" content=\"701\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Oracle Team\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Oracle Team\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 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\/postgresql-index-suggestion-with-powa\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/postgresql-index-suggestion-with-powa\/\"},\"author\":{\"name\":\"Oracle Team\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee\"},\"headline\":\"PostgreSQL Index Suggestion With Powa\",\"datePublished\":\"2017-10-20T12:21:13+00:00\",\"dateModified\":\"2023-06-08T14:36:48+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/postgresql-index-suggestion-with-powa\/\"},\"wordCount\":501,\"commentCount\":0,\"image\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/postgresql-index-suggestion-with-powa\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/powa1-2.png\",\"keywords\":[\"index\",\"Optimization\",\"PostgreSQL\"],\"articleSection\":[\"Database Administration &amp; Monitoring\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/postgresql-index-suggestion-with-powa\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/postgresql-index-suggestion-with-powa\/\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/postgresql-index-suggestion-with-powa\/\",\"name\":\"PostgreSQL Index Suggestion With Powa - dbi Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/postgresql-index-suggestion-with-powa\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/postgresql-index-suggestion-with-powa\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/powa1-2.png\",\"datePublished\":\"2017-10-20T12:21:13+00:00\",\"dateModified\":\"2023-06-08T14:36:48+00:00\",\"author\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee\"},\"description\":\"PostgreSQL, Powa, Index, Optimization\",\"breadcrumb\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/postgresql-index-suggestion-with-powa\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/postgresql-index-suggestion-with-powa\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/postgresql-index-suggestion-with-powa\/#primaryimage\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/powa1-2.png\",\"contentUrl\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/powa1-2.png\",\"width\":1856,\"height\":701},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/postgresql-index-suggestion-with-powa\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/www.dbi-services.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"PostgreSQL Index Suggestion With Powa\"}]},{\"@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\/66ab87129f2d357f09971bc7936a77ee\",\"name\":\"Oracle Team\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/f711f7cd2c9b09bf2627133755b569fb5be0694810cfd33033bdd095fedba86d?s=96&d=mm&r=g\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/f711f7cd2c9b09bf2627133755b569fb5be0694810cfd33033bdd095fedba86d?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/f711f7cd2c9b09bf2627133755b569fb5be0694810cfd33033bdd095fedba86d?s=96&d=mm&r=g\",\"caption\":\"Oracle Team\"},\"url\":\"https:\/\/www.dbi-services.com\/blog\/author\/oracle-team\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"PostgreSQL Index Suggestion With Powa - dbi Blog","description":"PostgreSQL, Powa, Index, Optimization","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\/postgresql-index-suggestion-with-powa\/","og_locale":"en_US","og_type":"article","og_title":"PostgreSQL Index Suggestion With Powa","og_description":"PostgreSQL, Powa, Index, Optimization","og_url":"https:\/\/www.dbi-services.com\/blog\/postgresql-index-suggestion-with-powa\/","og_site_name":"dbi Blog","article_published_time":"2017-10-20T12:21:13+00:00","article_modified_time":"2023-06-08T14:36:48+00:00","og_image":[{"width":1856,"height":701,"url":"http:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/powa1-2.png","type":"image\/png"}],"author":"Oracle Team","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Oracle Team","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dbi-services.com\/blog\/postgresql-index-suggestion-with-powa\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/postgresql-index-suggestion-with-powa\/"},"author":{"name":"Oracle Team","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee"},"headline":"PostgreSQL Index Suggestion With Powa","datePublished":"2017-10-20T12:21:13+00:00","dateModified":"2023-06-08T14:36:48+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/postgresql-index-suggestion-with-powa\/"},"wordCount":501,"commentCount":0,"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/postgresql-index-suggestion-with-powa\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/powa1-2.png","keywords":["index","Optimization","PostgreSQL"],"articleSection":["Database Administration &amp; Monitoring"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbi-services.com\/blog\/postgresql-index-suggestion-with-powa\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/postgresql-index-suggestion-with-powa\/","url":"https:\/\/www.dbi-services.com\/blog\/postgresql-index-suggestion-with-powa\/","name":"PostgreSQL Index Suggestion With Powa - dbi Blog","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/postgresql-index-suggestion-with-powa\/#primaryimage"},"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/postgresql-index-suggestion-with-powa\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/powa1-2.png","datePublished":"2017-10-20T12:21:13+00:00","dateModified":"2023-06-08T14:36:48+00:00","author":{"@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee"},"description":"PostgreSQL, Powa, Index, Optimization","breadcrumb":{"@id":"https:\/\/www.dbi-services.com\/blog\/postgresql-index-suggestion-with-powa\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/postgresql-index-suggestion-with-powa\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dbi-services.com\/blog\/postgresql-index-suggestion-with-powa\/#primaryimage","url":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/powa1-2.png","contentUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/powa1-2.png","width":1856,"height":701},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/postgresql-index-suggestion-with-powa\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dbi-services.com\/blog\/"},{"@type":"ListItem","position":2,"name":"PostgreSQL Index Suggestion With Powa"}]},{"@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\/66ab87129f2d357f09971bc7936a77ee","name":"Oracle Team","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/f711f7cd2c9b09bf2627133755b569fb5be0694810cfd33033bdd095fedba86d?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/f711f7cd2c9b09bf2627133755b569fb5be0694810cfd33033bdd095fedba86d?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/f711f7cd2c9b09bf2627133755b569fb5be0694810cfd33033bdd095fedba86d?s=96&d=mm&r=g","caption":"Oracle Team"},"url":"https:\/\/www.dbi-services.com\/blog\/author\/oracle-team\/"}]}},"_links":{"self":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/10556","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\/27"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/comments?post=10556"}],"version-history":[{"count":1,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/10556\/revisions"}],"predecessor-version":[{"id":25703,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/10556\/revisions\/25703"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media\/10557"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=10556"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=10556"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=10556"},{"taxonomy":"type","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/type_dbi?post=10556"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}