{"id":1223,"date":"2021-12-13T20:29:00","date_gmt":"2021-12-13T19:29:00","guid":{"rendered":"https:\/\/explainit.pl\/wordpress\/?p=1223"},"modified":"2021-12-31T20:30:22","modified_gmt":"2021-12-31T19:30:22","slug":"nowe-w-postgresql-14-statystyki-dla-wyrazen","status":"publish","type":"post","link":"https:\/\/explainit.pl\/wordpress\/2021\/12\/13\/nowe-w-postgresql-14-statystyki-dla-wyrazen\/","title":{"rendered":"Nowe w PostgreSQL 14: statystyki dla wyra\u017ce\u0144"},"content":{"rendered":"\n<p>Wraz z wprowadzeniem wersji 14 PostgreSQL pojawi\u0142a si\u0119 mo\u017cliwo\u015b\u0107 &#8211; na kt\u00f3r\u0105 d\u0142ugo czekali\u015bmy &#8211; definiowania statystyk rozszerzonych dla wyra\u017ce\u0144. Jest to mechanizm znany np. z Oracle Database, wspomagaj\u0105cy szacowanie selektywno\u015bci predykat\u00f3w opartych o funkcje\/wyra\u017cenia. Wiemy, jak wa\u017cne jest trafne szacowanie selektywno\u015bci predykat\u00f3w wyst\u0119puj\u0105cych w zapytaniach &#8211; od tego przecie\u017c zale\u017cy precyzja oszacowania koszt\u00f3w plan\u00f3w wykonania zapytania i tym samym wyb\u00f3r planu optymalnego. W domy\u015blnej konfiguracji, PostgreSQL gromadzi statystyki dla ka\u017cdej kolumny ka\u017cdej tabeli (statystyki jednokolumnowe) i na ich podstawie podejmuje si\u0119 przewidywania liczby (procentu) rekord\u00f3w, kt\u00f3re spe\u0142ni\u0105 podane przez programist\u0119 warunki selekcji. Takie rozwi\u0105zania dobrze sprawdza si\u0119 w sytuacji, gdy warunki selekcji s\u0105 bezpo\u015brednio oparte o jedn\u0105 kolumn\u0119 tabeli lub o kilka kolumn nieskorelowanych ze sob\u0105. Problemy pojawiaj\u0105 si\u0119 wtedy, kiedy pomi\u0119dzy kolumnami tabeli wyst\u0119puj\u0105 zale\u017cno\u015bci funkcyjne lub kiedy warunek selekcji opiera si\u0119 na wyra\u017ceniu wyliczanym na podstawie \u017ar\u00f3d\u0142owej kolumny. We wcze\u015bniejszych wersjach PostgreSQL, z problemem kolumn skorelowanych radzili\u015bmy sobie definiuj\u0105c wielokolumnowe statystyki rozszerzone (create statistics), natomiast na potrzeby trafnego szacowania selektywno\u015bci wyra\u017ce\u0144 zawsze konieczne by\u0142o tworzenie indeks\u00f3w funkcyjnych. Nawet, je\u017celi nie mia\u0142y one s\u0142u\u017cy\u0107 poprawie wydajno\u015bci zapytania, stanowi\u0142y niezb\u0119dne \u017ar\u00f3d\u0142o statystyk opisuj\u0105cych rozk\u0142ad warto\u015bci wyra\u017cenia. Gdy ich brakowa\u0142o, Query Planner przyjmowa\u0142, \u017ce niezale\u017cnie od rodzaju u\u017cytego wyra\u017cenia, jego selektywno\u015b\u0107 w predykatach r\u00f3wno\u015bciowych wynosi\u0142a zawsze 0.5%.<\/p>\n\n\n\n<p>Za pomoc\u0105 prostego przyk\u0142adu zilustrujemy skuteczno\u015b\u0107 statystyk rozszerzonych dla wyra\u017ce\u0144. Dane jest zapytanie, kt\u00f3re \u0142\u0105czy dwie tabele oraz dokonuje selekcji rekord\u00f3w &#8211; w\u0142a\u015bnie w oparciu o wyra\u017cenie. Tabela CARS posiada 100 tysi\u0119cy rekord\u00f3w, w tym oko\u0142o 53 tysi\u0105ce audi, tabela RESERVATIONS posiada cztery rekordy. Analiza planu wykonania tego zapytania pokazuje nietrafno\u015b\u0107 oszacowania selektywno\u015bci wyra\u017cenia UPPER(MAKE)=&#8217;AUDI&#8217;. Query Planner &#8222;spodziewa\u0142 si\u0119&#8221; zaledwie 500 rekord\u00f3w (czyli po prostu 0.5% z 100.000), podczas gdy w rzeczywistym wykonaniu by\u0142o ich 53.656. W tej sytuacji, w lepszym szacowaniu pom\u00f3g\u0142by indeks na UPPER(MAKE), ale niestety w\u0142a\u015bnie z powodu wysokoprocentowej selektywno\u015bci jego utworzenie by\u0142o niestety bezzasadne. Zauwa\u017cmy jednocze\u015bnie, \u017ce prawdopodobnie z powodu znacznego niedoszacowania liczby rekord\u00f3w, kt\u00f3re spe\u0142ni\u0105 warunek UPPER(MAKE)=&#8217;AUDI&#8217;, Query Planner postanowi\u0142 zrealizowa\u0107 po\u0142\u0105czenie tabel za pomoc\u0105 algorytmu Nested Loops. Tak &#8222;zoptymalizowane&#8221; zapytanie wykona\u0142o si\u0119 w czasie 428 ms.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>explain analyze select * from reservations r join cars c on (r.c_id=c.c_id) where upper(make)='AUDI';<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\" style=\"font-size:12px\"><code>QUERY PLAN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n------------------------------------------------------------------------------------------------------------------\n&nbsp;Nested Loop&nbsp; (cost=0.00..5378.05 rows=1 width=285) (actual time=15.830..428.009 rows=2 loops=1)\n&nbsp;&nbsp; Join Filter: (r.c_id = c.c_id)\n&nbsp;&nbsp; Rows Removed by Join Filter: 214622\n&nbsp;&nbsp; -&gt;&nbsp; Seq Scan on cars c&nbsp; (cost=0.00..5347.00 rows=500 width=273) (actual time=0.031..235.348 rows=53656 loops=1)\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Filter: (upper((make)::text) = 'AUDI'::text)\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Rows Removed by Filter: 46344\n&nbsp;&nbsp; -&gt;&nbsp; Materialize&nbsp; (cost=0.00..1.06 rows=4 width=12) (actual time=0.000..0.001 rows=4 loops=53656)\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&gt;&nbsp; Seq Scan on reservations r&nbsp; (cost=0.00..1.04 rows=4 width=12) (actual time=0.008..0.010 rows=4 loops=1)\n&nbsp;Planning Time: 0.186 ms\n&nbsp;Execution Time: 428.055 ms\n<\/code><\/pre>\n\n\n<p>Teraz skorzystajmy ze wspomnianej nowej mo\u017cliwo\u015bci, jak\u0105 daje PostgreSQL 14 &#8211; zdefiniujmy statystyki rozszerzone dla wyra\u017cenia UPPER(MAKE):<\/p>\n\n\n<pre class=\"wp-block-code\"><code>create statistics cars_make_model_stts on upper(make) from cars; \nanalyze cars;<\/code><\/pre>\n\n\n<p>Ponowna analiza planu wykonania zapytania pokazuje trafne, tym razem, oszacowanie liczby rekord\u00f3w, spe\u0142niaj\u0105cych warunek UPPER(MAKE)=&#8217;AUDI&#8217; &#8211; na poziomie 53603 wobec 53656 faktycznych (drobny b\u0142\u0105d pr\u00f3bkowania statystyk). Zarazem Query Planner postanowi\u0142 wybra\u0107 algorytm Hash Join do realizacji po\u0142\u0105czenia table &#8211; s\u0142uszny w obliczu wzgl\u0119dnie du\u017cej liczby rekord\u00f3w pochodz\u0105cych z tabeli CARS. W rezultacie, czas wykonania zapytania skr\u00f3ci\u0142 si\u0119 do 279 ms, czyli o 1\/3 szybciej.<\/p>\n\n\n<pre class=\"wp-block-code\" style=\"font-size:12px\"><code>explain analyze select * from reservations r join cars c on (r.c_id=c.c_id) where upper(make)='AUDI';\nQUERY PLAN\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\n---------------------------------------------------------------------------------------------------------------------\n\u00a0Hash Join\u00a0 (cost=1.09..5549.12 rows=2 width=285) (actual time=8.573..279.335 rows=2 loops=1)\n\u00a0\u00a0Hash Cond: (c.c_id = r.c_id)\n\u00a0\u00a0->\u00a0 Seq Scan on cars c\u00a0 (cost=0.00..5347.00 rows=53603 width=273) (actual time=0.029..254.158 rows=53656 loops=1)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Filter: (upper((make)::text) = 'AUDI'::text)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Rows Removed by Filter: 46344\n\u00a0\u00a0\u00a0->\u00a0 Hash\u00a0 (cost=1.04..1.04 rows=4 width=12) (actual time=0.014..0.016 rows=4 loops=1)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Buckets: 1024\u00a0 Batches: 1\u00a0 Memory Usage: 9kB\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0->\u00a0 Seq Scan on reservations r\u00a0 (cost=0.00..1.04 rows=4 width=12) (actual time=0.007..0.009 rows=4 loops=1)\n\u00a0Planning Time: 0.379 ms\n\u00a0Execution Time: 279.382 ms\n<\/code><\/pre>\n\n\n<p>Wnioski ko\u0144cowe wydaj\u0105 si\u0119 by\u0107 oczywiste: warto rozwa\u017ca\u0107 definiowanie statystyk rozszerzonych dla wyra\u017ce\u0144, kt\u00f3re cz\u0119sto powtarzaj\u0105 si\u0119 w warunkach selekcji wykonywanych zapyta\u0144, a na kt\u00f3rych nie zbudowano indeks\u00f3w funkcyjnych. Zdefiniowanie statystyki rozszerzonej jest czynno\u015bci\u0105 jednorazow\u0105. W przysz\u0142o\u015bci statystyka taka b\u0119dzie zbierana automatycznie podczas ka\u017cdej operacji ANALYZE.<\/p>\n<p><!-- \/wp:paragraph --><\/p>","protected":false},"excerpt":{"rendered":"<p>Wraz z wprowadzeniem wersji 14 PostgreSQL pojawi\u0142a si\u0119 mo\u017cliwo\u015b\u0107 &#8211; na kt\u00f3r\u0105 d\u0142ugo czekali\u015bmy &#8211; definiowania statystyk rozszerzonych dla wyra\u017ce\u0144. Jest to mechanizm znany np. z Oracle Database, wspomagaj\u0105cy szacowanie selektywno\u015bci predykat\u00f3w opartych o funkcje\/wyra\u017cenia. Wiemy, jak wa\u017cne jest trafne szacowanie selektywno\u015bci predykat\u00f3w wyst\u0119puj\u0105cych w zapytaniach &#8211; od tego przecie\u017c zale\u017cy precyzja oszacowania koszt\u00f3w plan\u00f3w <a href=\"https:\/\/explainit.pl\/wordpress\/2021\/12\/13\/nowe-w-postgresql-14-statystyki-dla-wyrazen\/\" rel=\"nofollow\"><span class=\"sr-only\">Read more about Nowe w PostgreSQL 14: statystyki dla wyra\u017ce\u0144<\/span>[&hellip;]<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[38],"tags":[39,21],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v20.2.1 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Nowe w PostgreSQL 14: statystyki dla wyra\u017ce\u0144 - Explain IT<\/title>\n<meta name=\"description\" content=\"Nowe w PostgreSQL 14: statystyki dla wyra\u017ce\u0144\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/explainit.pl\/wordpress\/2021\/12\/13\/nowe-w-postgresql-14-statystyki-dla-wyrazen\/\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Nowe w PostgreSQL 14: statystyki dla wyra\u017ce\u0144 - Explain IT\" \/>\n<meta property=\"og:description\" content=\"Nowe w PostgreSQL 14: statystyki dla wyra\u017ce\u0144\" \/>\n<meta property=\"og:url\" content=\"https:\/\/explainit.pl\/wordpress\/2021\/12\/13\/nowe-w-postgresql-14-statystyki-dla-wyrazen\/\" \/>\n<meta property=\"og:site_name\" content=\"Explain IT\" \/>\n<meta property=\"article:published_time\" content=\"2021-12-13T19:29:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-12-31T19:30:22+00:00\" \/>\n<meta name=\"author\" content=\"Maciej Zakrzewicz\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Napisane przez\" \/>\n\t<meta name=\"twitter:data1\" content=\"Maciej Zakrzewicz\" \/>\n\t<meta name=\"twitter:label2\" content=\"Szacowany czas czytania\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minuty\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/explainit.pl\/wordpress\/2021\/12\/13\/nowe-w-postgresql-14-statystyki-dla-wyrazen\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/explainit.pl\/wordpress\/2021\/12\/13\/nowe-w-postgresql-14-statystyki-dla-wyrazen\/\"},\"author\":{\"name\":\"Maciej Zakrzewicz\",\"@id\":\"https:\/\/explainit.pl\/wordpress\/#\/schema\/person\/740773131bc169a2dc9c0e5e07476219\"},\"headline\":\"Nowe w PostgreSQL 14: statystyki dla wyra\u017ce\u0144\",\"datePublished\":\"2021-12-13T19:29:00+00:00\",\"dateModified\":\"2021-12-31T19:30:22+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/explainit.pl\/wordpress\/2021\/12\/13\/nowe-w-postgresql-14-statystyki-dla-wyrazen\/\"},\"wordCount\":584,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/explainit.pl\/wordpress\/#organization\"},\"keywords\":[\"PostgreSQL\",\"wydajno\u015b\u0107\"],\"articleSection\":[\"PostgreSQL\"],\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/explainit.pl\/wordpress\/2021\/12\/13\/nowe-w-postgresql-14-statystyki-dla-wyrazen\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/explainit.pl\/wordpress\/2021\/12\/13\/nowe-w-postgresql-14-statystyki-dla-wyrazen\/\",\"url\":\"https:\/\/explainit.pl\/wordpress\/2021\/12\/13\/nowe-w-postgresql-14-statystyki-dla-wyrazen\/\",\"name\":\"Nowe w PostgreSQL 14: statystyki dla wyra\u017ce\u0144 - Explain IT\",\"isPartOf\":{\"@id\":\"https:\/\/explainit.pl\/wordpress\/#website\"},\"datePublished\":\"2021-12-13T19:29:00+00:00\",\"dateModified\":\"2021-12-31T19:30:22+00:00\",\"description\":\"Nowe w PostgreSQL 14: statystyki dla wyra\u017ce\u0144\",\"breadcrumb\":{\"@id\":\"https:\/\/explainit.pl\/wordpress\/2021\/12\/13\/nowe-w-postgresql-14-statystyki-dla-wyrazen\/#breadcrumb\"},\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/explainit.pl\/wordpress\/2021\/12\/13\/nowe-w-postgresql-14-statystyki-dla-wyrazen\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/explainit.pl\/wordpress\/2021\/12\/13\/nowe-w-postgresql-14-statystyki-dla-wyrazen\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Strona g\u0142\u00f3wna\",\"item\":\"https:\/\/explainit.pl\/wordpress\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Nowe w PostgreSQL 14: statystyki dla wyra\u017ce\u0144\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/explainit.pl\/wordpress\/#website\",\"url\":\"https:\/\/explainit.pl\/wordpress\/\",\"name\":\"Explain IT\",\"description\":\"Autorska pracownia doradztwa i szkole\u0144 IT - Maciej Zakrzewicz - szkolenia, ekspertyzy, wdro\u017cenia. Technologie Oracle, PostgreSQL, MySQL.\",\"publisher\":{\"@id\":\"https:\/\/explainit.pl\/wordpress\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/explainit.pl\/wordpress\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"pl-PL\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/explainit.pl\/wordpress\/#organization\",\"name\":\"Explain IT\",\"url\":\"https:\/\/explainit.pl\/wordpress\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/explainit.pl\/wordpress\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/explainit.pl\/wordpress\/wp-content\/uploads\/2016\/08\/explainITmini.png\",\"contentUrl\":\"https:\/\/explainit.pl\/wordpress\/wp-content\/uploads\/2016\/08\/explainITmini.png\",\"width\":196,\"height\":64,\"caption\":\"Explain IT\"},\"image\":{\"@id\":\"https:\/\/explainit.pl\/wordpress\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/explainit.pl\/wordpress\/#\/schema\/person\/740773131bc169a2dc9c0e5e07476219\",\"name\":\"Maciej Zakrzewicz\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/explainit.pl\/wordpress\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/9c98d020128b142a480aa35a22300a69?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/9c98d020128b142a480aa35a22300a69?s=96&d=mm&r=g\",\"caption\":\"Maciej Zakrzewicz\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Nowe w PostgreSQL 14: statystyki dla wyra\u017ce\u0144 - Explain IT","description":"Nowe w PostgreSQL 14: statystyki dla wyra\u017ce\u0144","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:\/\/explainit.pl\/wordpress\/2021\/12\/13\/nowe-w-postgresql-14-statystyki-dla-wyrazen\/","og_locale":"pl_PL","og_type":"article","og_title":"Nowe w PostgreSQL 14: statystyki dla wyra\u017ce\u0144 - Explain IT","og_description":"Nowe w PostgreSQL 14: statystyki dla wyra\u017ce\u0144","og_url":"https:\/\/explainit.pl\/wordpress\/2021\/12\/13\/nowe-w-postgresql-14-statystyki-dla-wyrazen\/","og_site_name":"Explain IT","article_published_time":"2021-12-13T19:29:00+00:00","article_modified_time":"2021-12-31T19:30:22+00:00","author":"Maciej Zakrzewicz","twitter_card":"summary_large_image","twitter_misc":{"Napisane przez":"Maciej Zakrzewicz","Szacowany czas czytania":"4 minuty"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/explainit.pl\/wordpress\/2021\/12\/13\/nowe-w-postgresql-14-statystyki-dla-wyrazen\/#article","isPartOf":{"@id":"https:\/\/explainit.pl\/wordpress\/2021\/12\/13\/nowe-w-postgresql-14-statystyki-dla-wyrazen\/"},"author":{"name":"Maciej Zakrzewicz","@id":"https:\/\/explainit.pl\/wordpress\/#\/schema\/person\/740773131bc169a2dc9c0e5e07476219"},"headline":"Nowe w PostgreSQL 14: statystyki dla wyra\u017ce\u0144","datePublished":"2021-12-13T19:29:00+00:00","dateModified":"2021-12-31T19:30:22+00:00","mainEntityOfPage":{"@id":"https:\/\/explainit.pl\/wordpress\/2021\/12\/13\/nowe-w-postgresql-14-statystyki-dla-wyrazen\/"},"wordCount":584,"commentCount":0,"publisher":{"@id":"https:\/\/explainit.pl\/wordpress\/#organization"},"keywords":["PostgreSQL","wydajno\u015b\u0107"],"articleSection":["PostgreSQL"],"inLanguage":"pl-PL","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/explainit.pl\/wordpress\/2021\/12\/13\/nowe-w-postgresql-14-statystyki-dla-wyrazen\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/explainit.pl\/wordpress\/2021\/12\/13\/nowe-w-postgresql-14-statystyki-dla-wyrazen\/","url":"https:\/\/explainit.pl\/wordpress\/2021\/12\/13\/nowe-w-postgresql-14-statystyki-dla-wyrazen\/","name":"Nowe w PostgreSQL 14: statystyki dla wyra\u017ce\u0144 - Explain IT","isPartOf":{"@id":"https:\/\/explainit.pl\/wordpress\/#website"},"datePublished":"2021-12-13T19:29:00+00:00","dateModified":"2021-12-31T19:30:22+00:00","description":"Nowe w PostgreSQL 14: statystyki dla wyra\u017ce\u0144","breadcrumb":{"@id":"https:\/\/explainit.pl\/wordpress\/2021\/12\/13\/nowe-w-postgresql-14-statystyki-dla-wyrazen\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/explainit.pl\/wordpress\/2021\/12\/13\/nowe-w-postgresql-14-statystyki-dla-wyrazen\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/explainit.pl\/wordpress\/2021\/12\/13\/nowe-w-postgresql-14-statystyki-dla-wyrazen\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Strona g\u0142\u00f3wna","item":"https:\/\/explainit.pl\/wordpress\/"},{"@type":"ListItem","position":2,"name":"Nowe w PostgreSQL 14: statystyki dla wyra\u017ce\u0144"}]},{"@type":"WebSite","@id":"https:\/\/explainit.pl\/wordpress\/#website","url":"https:\/\/explainit.pl\/wordpress\/","name":"Explain IT","description":"Autorska pracownia doradztwa i szkole\u0144 IT - Maciej Zakrzewicz - szkolenia, ekspertyzy, wdro\u017cenia. Technologie Oracle, PostgreSQL, MySQL.","publisher":{"@id":"https:\/\/explainit.pl\/wordpress\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/explainit.pl\/wordpress\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"pl-PL"},{"@type":"Organization","@id":"https:\/\/explainit.pl\/wordpress\/#organization","name":"Explain IT","url":"https:\/\/explainit.pl\/wordpress\/","logo":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/explainit.pl\/wordpress\/#\/schema\/logo\/image\/","url":"https:\/\/explainit.pl\/wordpress\/wp-content\/uploads\/2016\/08\/explainITmini.png","contentUrl":"https:\/\/explainit.pl\/wordpress\/wp-content\/uploads\/2016\/08\/explainITmini.png","width":196,"height":64,"caption":"Explain IT"},"image":{"@id":"https:\/\/explainit.pl\/wordpress\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/explainit.pl\/wordpress\/#\/schema\/person\/740773131bc169a2dc9c0e5e07476219","name":"Maciej Zakrzewicz","image":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/explainit.pl\/wordpress\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/9c98d020128b142a480aa35a22300a69?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/9c98d020128b142a480aa35a22300a69?s=96&d=mm&r=g","caption":"Maciej Zakrzewicz"}}]}},"_links":{"self":[{"href":"https:\/\/explainit.pl\/wordpress\/wp-json\/wp\/v2\/posts\/1223"}],"collection":[{"href":"https:\/\/explainit.pl\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/explainit.pl\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/explainit.pl\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/explainit.pl\/wordpress\/wp-json\/wp\/v2\/comments?post=1223"}],"version-history":[{"count":5,"href":"https:\/\/explainit.pl\/wordpress\/wp-json\/wp\/v2\/posts\/1223\/revisions"}],"predecessor-version":[{"id":1228,"href":"https:\/\/explainit.pl\/wordpress\/wp-json\/wp\/v2\/posts\/1223\/revisions\/1228"}],"wp:attachment":[{"href":"https:\/\/explainit.pl\/wordpress\/wp-json\/wp\/v2\/media?parent=1223"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/explainit.pl\/wordpress\/wp-json\/wp\/v2\/categories?post=1223"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/explainit.pl\/wordpress\/wp-json\/wp\/v2\/tags?post=1223"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}