{"id":915,"date":"2021-01-24T12:54:20","date_gmt":"2021-01-24T11:54:20","guid":{"rendered":"https:\/\/explainit.pl\/wordpress\/?p=915"},"modified":"2021-01-24T12:57:00","modified_gmt":"2021-01-24T11:57:00","slug":"podstawy-vacuum-w-postgresql","status":"publish","type":"post","link":"https:\/\/explainit.pl\/wordpress\/2021\/01\/24\/podstawy-vacuum-w-postgresql\/","title":{"rendered":"Podstawy: Vacuum w PostgreSQL"},"content":{"rendered":"\n<p>Poniewa\u017c powr\u00f3t do podstaw nikomu jeszcze nie zaszkodzi\u0142, to proponujemy dzi\u015b ma\u0142e repetytorium z zakresu MVCC i operacji Vacuum. Pami\u0119tamy, \u017ce PostgreSQL jest oczywi\u015bcie systemem transakcyjnym, wspieraj\u0105cym tradycyjne w\u0142asno\u015bci ACID dla transakcji realizowanych przez aplikacje u\u017cytkownik\u00f3w. W celu prawid\u0142owej realizacji izolacji transakcji, PostgreSQL stosuje technik\u0119 MVCC (Multiversion Concurrency Control), w ramach kt\u00f3rej ka\u017cda modyfikacja rekordu przyczynia si\u0119 do powstania jego nowego obrazu, podczas gdy dotychczasowy obraz rekordu jest pozostawiany w tabeli na potrzeby innych transakcji w toku. W podobny spos\u00f3b, z usuni\u0119cie rekordu wi\u0105\u017ce si\u0119 faktycznym pozostawieniem jego starego obrazu dla innych, odizolowanych transakcji. Nieprzyjemnym skutkiem implementacji MVCC w PostgreSQL jest pozostawianie starych obraz\u00f3w rekord\u00f3w w bazie danych nawet ju\u017c po zako\u0144czeniu innych, potencjalnie zainteresowanych transakcji (wzgl\u0119dy wydajno\u015bciowe). Te stare obrazy nazywamy wtedy &#8222;martwymi rekordami&#8221; (dead tuples), poniewa\u017c s\u0105 one ca\u0142kowicie zb\u0119dne. Aby martwe rekordy nie powodowa\u0142y nadmiernego marnowania przestrzeni dyskowej i wydajno\u015bci zapyta\u0144, powinny by\u0107 okresowo &#8222;sprz\u0105tane&#8221; poprzez wykonywanie operacji Vacuum. Manualnie lub automatycznie, przez systemowy proces Autovacuum.<\/p>\n\n\n\n<p>Poni\u017cszy rysunek pokazuje rzeczywisty przebieg tych operacji na poziomie dyskowym.<\/p>\n\n\n\n<p> <img decoding=\"async\" loading=\"lazy\" width=\"1755\" height=\"819\" class=\"wp-image-916\" style=\"width: 100%;\" src=\"https:\/\/explainit.pl\/wordpress\/wp-content\/uploads\/2021\/01\/mvcc_diagram.png\" alt=\"\" srcset=\"https:\/\/explainit.pl\/wordpress\/wp-content\/uploads\/2021\/01\/mvcc_diagram.png 1755w, https:\/\/explainit.pl\/wordpress\/wp-content\/uploads\/2021\/01\/mvcc_diagram-300x140.png 300w, https:\/\/explainit.pl\/wordpress\/wp-content\/uploads\/2021\/01\/mvcc_diagram-1024x478.png 1024w, https:\/\/explainit.pl\/wordpress\/wp-content\/uploads\/2021\/01\/mvcc_diagram-768x358.png 768w, https:\/\/explainit.pl\/wordpress\/wp-content\/uploads\/2021\/01\/mvcc_diagram-1536x717.png 1536w\" sizes=\"(max-width: 1755px) 100vw, 1755px\" \/><\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>W kroku (1) u\u017cytkownik wstawia sze\u015b\u0107 nowych rekord\u00f3w do tabeli \u2013 rekordy te s\u0105 zapisywane do kolejnych blok\u00f3w pliku tabeli tak, aby ka\u017cdy blok wype\u0142ni\u0107 maksymalnie (lub do poziomu ograniczanego parametrem FILLFACTOR), ale jednocze\u015bnie nie &#8222;\u0142ama\u0107&#8221; rekordu pomi\u0119dzy dwa bloki. W naszym przyk\u0142adzie blok 0 zosta\u0142 wype\u0142niony ca\u0142kowicie, a w bloku 1 pozostaje jeszcze sporo wolnego miejsca. Nast\u0119pnie, w kroku (2), u\u017cytkownik dokonuje modyfikacji rekordu ROW_2. Zgodnie z implementacj\u0105 mechanizm\u00f3w MVCC, oryginalny rekord ROW_2 nie ulegnie modyfikacji, lecz zamiast tego, zostanie on zdublowany i to na dublecie zostanie zrealizowana modyfikacja zlecona przez u\u017cytkownika. PostgreSQL spr\u00f3buje umie\u015bci\u0107 dublet rekordu ROW_2 w tym samym bloku, w kt\u00f3rym znajduje si\u0119 orygina\u0142, ale je\u017celi ilo\u015b\u0107 wolnego miejsca b\u0119dzie niewystarczaj\u0105ca (to nasz przypadek), wtedy z konieczno\u015bci zapisze go w innym bloku. Mamy teraz do czynienia z dwiema kopiami rekordu ROW_2 \u2013 star\u0105 i aktualn\u0105. Gdy po pewnym czasie stary obraz rekordu ROW_2 nie b\u0119dzie ju\u017c potrzebny \u017cadnej innej transakcji w systemie, stanie si\u0119 on martwym rekordem. Z podobnym zjawiskiem mamy do czynienia w kroku (3), gdzie u\u017cytkownik usuwa rekord ROW_4. Rekord ten stanie si\u0119 martwy, ale wci\u0105\u017c b\u0119dzie znajdowa\u0107 si\u0119 na dysku. Zauwa\u017cmy, \u017ce w tym momencie, tabela formalnie zawiera pi\u0119\u0107 rekord\u00f3w, ale w jej blokach znajduje si\u0119 rekord\u00f3w siedem \u2013 w\u015br\u00f3d nich dwa martwe, zajmuj\u0105ce przestrze\u0144 dyskow\u0105 i pogarszaj\u0105ce wydajno\u015b\u0107 operacji typu Seq Scan. W celu pozbycia si\u0119 martwych rekord\u00f3w, administrator lub proces Autovacuum wykonuje w kroku (4) operacj\u0119 Vacuum, kt\u00f3ra przetwarza wszystkie bloki pliku danych tabeli i fizycznie wymazuje wszystkie martwe rekordy (na podstawie identyfikator\u00f3w transakcji). Operacja Vacuum dokonuje te\u017c reorganizacji rekord\u00f3w w obr\u0119bie blok\u00f3w tak, aby defragmentowa\u0107 powsta\u0142e wolne miejsce. Nie dokonuje jednak globalnej defragmentacji wolnej przestrzeni. Na to pozwala nam opcjonalna operacja Vacuum Full (krok (5)), kt\u00f3ra opr\u00f3cz eliminacji martwych rekord\u00f3w, optymalizuje te\u017c fizyczn\u0105 organizacj\u0119 rekord\u00f3w w pliku danych (przepisuje rekordy do nowego pliku, stary usuwa). Ze wzgl\u0119du na czasoch\u0142onno\u015b\u0107 i inwazyjno\u015b\u0107 (blokada wy\u0142\u0105czna na ca\u0142ej tabeli), operacja Vacuum Full stosowana jest do\u015b\u0107 rzadko.<\/p>\n\n\n\n<p>Aby przekona\u0107 si\u0119, czy naszym tabelom nie dolega problem nadmiernej liczby martwych rekord\u00f3w, wynikaj\u0105cy na przyk\u0142ad z niew\u0142a\u015bciwej konfiguracji procesu Autovacuum, mo\u017cemy monitorowa\u0107 ich liczb\u0119, pos\u0142uguj\u0105c si\u0119 jednym z poni\u017cszych zapyta\u0144:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">select relname, pg_stat_get_live_tuples(c.oid), pg_stat_get_dead_tuples(c.oid) from pg_class c;<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">select relname, n_live_tup, n_dead_tup from pg_stat_user_tables;<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Poniewa\u017c powr\u00f3t do podstaw nikomu jeszcze nie zaszkodzi\u0142, to proponujemy dzi\u015b ma\u0142e repetytorium z zakresu MVCC i operacji Vacuum. Pami\u0119tamy, \u017ce PostgreSQL jest oczywi\u015bcie systemem transakcyjnym, wspieraj\u0105cym tradycyjne w\u0142asno\u015bci ACID dla transakcji realizowanych przez aplikacje u\u017cytkownik\u00f3w. W celu prawid\u0142owej realizacji izolacji transakcji, PostgreSQL stosuje technik\u0119 MVCC (Multiversion Concurrency Control), w ramach kt\u00f3rej ka\u017cda modyfikacja rekordu <a href=\"https:\/\/explainit.pl\/wordpress\/2021\/01\/24\/podstawy-vacuum-w-postgresql\/\" rel=\"nofollow\"><span class=\"sr-only\">Read more about Podstawy: Vacuum w PostgreSQL<\/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,41],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v20.2.1 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Podstawy: Vacuum w PostgreSQL - Explain IT<\/title>\n<meta name=\"description\" content=\"Podstawy: Vacuum w PostgreSQL\" \/>\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\/01\/24\/podstawy-vacuum-w-postgresql\/\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Podstawy: Vacuum w PostgreSQL - Explain IT\" \/>\n<meta property=\"og:description\" content=\"Podstawy: Vacuum w PostgreSQL\" \/>\n<meta property=\"og:url\" content=\"https:\/\/explainit.pl\/wordpress\/2021\/01\/24\/podstawy-vacuum-w-postgresql\/\" \/>\n<meta property=\"og:site_name\" content=\"Explain IT\" \/>\n<meta property=\"article:published_time\" content=\"2021-01-24T11:54:20+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-01-24T11:57:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/explainit.pl\/wordpress\/wp-content\/uploads\/2021\/01\/mvcc_diagram.png\" \/>\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=\"3 minuty\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/explainit.pl\/wordpress\/2021\/01\/24\/podstawy-vacuum-w-postgresql\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/explainit.pl\/wordpress\/2021\/01\/24\/podstawy-vacuum-w-postgresql\/\"},\"author\":{\"name\":\"Maciej Zakrzewicz\",\"@id\":\"https:\/\/explainit.pl\/wordpress\/#\/schema\/person\/740773131bc169a2dc9c0e5e07476219\"},\"headline\":\"Podstawy: Vacuum w PostgreSQL\",\"datePublished\":\"2021-01-24T11:54:20+00:00\",\"dateModified\":\"2021-01-24T11:57:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/explainit.pl\/wordpress\/2021\/01\/24\/podstawy-vacuum-w-postgresql\/\"},\"wordCount\":598,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/explainit.pl\/wordpress\/#organization\"},\"keywords\":[\"PostgreSQL\",\"vacuum\"],\"articleSection\":[\"PostgreSQL\"],\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/explainit.pl\/wordpress\/2021\/01\/24\/podstawy-vacuum-w-postgresql\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/explainit.pl\/wordpress\/2021\/01\/24\/podstawy-vacuum-w-postgresql\/\",\"url\":\"https:\/\/explainit.pl\/wordpress\/2021\/01\/24\/podstawy-vacuum-w-postgresql\/\",\"name\":\"Podstawy: Vacuum w PostgreSQL - Explain IT\",\"isPartOf\":{\"@id\":\"https:\/\/explainit.pl\/wordpress\/#website\"},\"datePublished\":\"2021-01-24T11:54:20+00:00\",\"dateModified\":\"2021-01-24T11:57:00+00:00\",\"description\":\"Podstawy: Vacuum w PostgreSQL\",\"breadcrumb\":{\"@id\":\"https:\/\/explainit.pl\/wordpress\/2021\/01\/24\/podstawy-vacuum-w-postgresql\/#breadcrumb\"},\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/explainit.pl\/wordpress\/2021\/01\/24\/podstawy-vacuum-w-postgresql\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/explainit.pl\/wordpress\/2021\/01\/24\/podstawy-vacuum-w-postgresql\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Strona g\u0142\u00f3wna\",\"item\":\"https:\/\/explainit.pl\/wordpress\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Podstawy: Vacuum w PostgreSQL\"}]},{\"@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":"Podstawy: Vacuum w PostgreSQL - Explain IT","description":"Podstawy: Vacuum w PostgreSQL","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\/01\/24\/podstawy-vacuum-w-postgresql\/","og_locale":"pl_PL","og_type":"article","og_title":"Podstawy: Vacuum w PostgreSQL - Explain IT","og_description":"Podstawy: Vacuum w PostgreSQL","og_url":"https:\/\/explainit.pl\/wordpress\/2021\/01\/24\/podstawy-vacuum-w-postgresql\/","og_site_name":"Explain IT","article_published_time":"2021-01-24T11:54:20+00:00","article_modified_time":"2021-01-24T11:57:00+00:00","og_image":[{"url":"https:\/\/explainit.pl\/wordpress\/wp-content\/uploads\/2021\/01\/mvcc_diagram.png"}],"author":"Maciej Zakrzewicz","twitter_card":"summary_large_image","twitter_misc":{"Napisane przez":"Maciej Zakrzewicz","Szacowany czas czytania":"3 minuty"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/explainit.pl\/wordpress\/2021\/01\/24\/podstawy-vacuum-w-postgresql\/#article","isPartOf":{"@id":"https:\/\/explainit.pl\/wordpress\/2021\/01\/24\/podstawy-vacuum-w-postgresql\/"},"author":{"name":"Maciej Zakrzewicz","@id":"https:\/\/explainit.pl\/wordpress\/#\/schema\/person\/740773131bc169a2dc9c0e5e07476219"},"headline":"Podstawy: Vacuum w PostgreSQL","datePublished":"2021-01-24T11:54:20+00:00","dateModified":"2021-01-24T11:57:00+00:00","mainEntityOfPage":{"@id":"https:\/\/explainit.pl\/wordpress\/2021\/01\/24\/podstawy-vacuum-w-postgresql\/"},"wordCount":598,"commentCount":0,"publisher":{"@id":"https:\/\/explainit.pl\/wordpress\/#organization"},"keywords":["PostgreSQL","vacuum"],"articleSection":["PostgreSQL"],"inLanguage":"pl-PL","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/explainit.pl\/wordpress\/2021\/01\/24\/podstawy-vacuum-w-postgresql\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/explainit.pl\/wordpress\/2021\/01\/24\/podstawy-vacuum-w-postgresql\/","url":"https:\/\/explainit.pl\/wordpress\/2021\/01\/24\/podstawy-vacuum-w-postgresql\/","name":"Podstawy: Vacuum w PostgreSQL - Explain IT","isPartOf":{"@id":"https:\/\/explainit.pl\/wordpress\/#website"},"datePublished":"2021-01-24T11:54:20+00:00","dateModified":"2021-01-24T11:57:00+00:00","description":"Podstawy: Vacuum w PostgreSQL","breadcrumb":{"@id":"https:\/\/explainit.pl\/wordpress\/2021\/01\/24\/podstawy-vacuum-w-postgresql\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/explainit.pl\/wordpress\/2021\/01\/24\/podstawy-vacuum-w-postgresql\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/explainit.pl\/wordpress\/2021\/01\/24\/podstawy-vacuum-w-postgresql\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Strona g\u0142\u00f3wna","item":"https:\/\/explainit.pl\/wordpress\/"},{"@type":"ListItem","position":2,"name":"Podstawy: Vacuum w PostgreSQL"}]},{"@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\/915"}],"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=915"}],"version-history":[{"count":2,"href":"https:\/\/explainit.pl\/wordpress\/wp-json\/wp\/v2\/posts\/915\/revisions"}],"predecessor-version":[{"id":918,"href":"https:\/\/explainit.pl\/wordpress\/wp-json\/wp\/v2\/posts\/915\/revisions\/918"}],"wp:attachment":[{"href":"https:\/\/explainit.pl\/wordpress\/wp-json\/wp\/v2\/media?parent=915"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/explainit.pl\/wordpress\/wp-json\/wp\/v2\/categories?post=915"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/explainit.pl\/wordpress\/wp-json\/wp\/v2\/tags?post=915"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}