{"id":72265,"date":"2020-03-03T08:42:17","date_gmt":"2020-03-03T05:42:17","guid":{"rendered":"https:\/\/prohoster.info\/blog\/postgresql-antipatterns-menyaem-dannye-v-obhod-triggera"},"modified":"2020-03-03T16:13:51","modified_gmt":"2020-03-03T13:13:51","slug":"postgresql-antipatterns-menyaem-dannye-v-obhod-triggera","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/postgresql-antipatterns-menyaem-dannye-v-obhod-triggera","title":{"rendered":"PostgreSQL Antipatterns: ndryshimi i t\u00eb dh\u00ebnave p\u00ebrmes nj\u00eb trigeri","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>P\u00ebr nj\u00eb moment t\u00eb caktuar, shum\u00eb ndodhen p\u00ebrball\u00eb nevoj\u00ebs p\u00ebr t\u00eb b\u00ebr\u00eb disa korrigjime masive n\u00eb regjistrimet e tabel\u00ebs. Un\u00eb tashm\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/post\/481610\/\">kam folur p\u00ebr m\u00ebnyr\u00ebn m\u00eb t\u00eb mir\u00eb p\u00ebr ta b\u00ebr\u00eb k\u00ebt\u00eb<\/a><\/noindex>, si dhe p\u00ebr at\u00eb se si nuk duhet ta b\u00ebni. Sot do t\u00eb flas p\u00ebr aspektin e dyt\u00eb t\u00eb p\u00ebrdit\u00ebsimit masiv \u2014 <b>p\u00ebr aktivizimin e triggereve<\/b>.<\/p>\n<p>P\u00ebr shembull, n\u00eb tabel\u00ebn ku duhet t\u00eb b\u00ebni disa ndryshime, ka nj\u00eb trigger t\u00eb pad\u00ebshiruesh\u00ebm <code>ON UPDATE<\/code>, q\u00eb transferon t\u00eb gjitha ndryshimet n\u00eb disa agregate. Dhe ju duhet t\u00eb p\u00ebrdit\u00ebsoni gjith\u00e7ka (t\u00eb inicializoni nj\u00eb fush\u00eb t\u00eb re, p\u00ebr shembull) n\u00eb nj\u00eb m\u00ebnyr\u00eb kaq t\u00eb kujdesshme sa q\u00eb ato agregate t\u00eb mos preken.<\/p>\n<h2>Le t'i fikim thjesht triggere!<\/h2>\n<p><\/p>\n<pre><code class=\"sql\">BEGIN;\n  ALTER TABLE ... DISABLE TRIGGER ...;\n  UPDATE ...; -- k\u00ebtu do t\u00eb zgjaste\n  ALTER TABLE ... ENABLE TRIGGER ...;\nCOMMIT;<\/code><\/pre>\n<p>\nKjo \u00ebsht\u00eb e gjitha \u2014 <b>gjith\u00e7ka tashm\u00eb \u00ebsht\u00eb n\u00eb suspens<\/b>.<\/p>\n<p>Sepse <code>ALTER TABLE<\/code> ngarkon <b>bllokimin AccessExclusive<\/b>-bllokimi, n\u00ebn t\u00eb cilin askush q\u00eb po ekzekuton paralelisht, madje edhe nj\u00eb i thjesht\u00eb <code>SELECT<\/code>, nuk do t\u00eb jet\u00eb i aft\u00eb t\u00eb lexoj\u00eb asgj\u00eb nga tabela. Do t\u00eb thot\u00eb se derisa kjo transaksion t\u00eb p\u00ebrfundoj\u00eb, t\u00eb gjith\u00eb ata q\u00eb duan madje \"thjesht t\u00eb lexojn\u00eb\" do t\u00eb presin. Dhe ne e mbajm\u00eb mend se <code>UPDATE<\/code> kemi nj\u00eb shum\u00eb-lloog ...<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h4>Le t'i fikim shpejt, pastaj t'i kthejm\u00eb shpejt!<\/h4>\n<p><\/p>\n<pre><code class=\"sql\">BEGIN;\n  ALTER TABLE ... DISABLE TRIGGER ...;\nCOMMIT;\n\nUPDATE ...;\n\nBEGIN;\n  ALTER TABLE ... ENABLE TRIGGER ...;\nCOMMIT;<\/code><\/pre>\n<p>\nTani situata \u00ebsht\u00eb m\u00eb e mir\u00eb, koha e pritjes \u00ebsht\u00eb duksh\u00ebm m\u00eb e shkurt\u00ebr. Por dy probleme prishet gjith\u00eb bukurin\u00eb:<\/p>\n<ul>\n<li><code>ALTER TABLE<\/code> vet\u00eb pret t\u00eb gjitha operacionet e tjera n\u00eb tabel\u00eb, duke p\u00ebrfshir\u00eb ato t\u00eb gjata <code>SELECT<\/code><\/li>\n<li>Nd\u00ebrsa triggeri \u00ebsht\u00eb i fikur, <b>\"do t\u00eb kaloj\u00eb\" \u00e7do ndryshim<\/b> n\u00eb tabel\u00eb, madje edhe ato q\u00eb nuk jan\u00eb tonat. Dhe atyre agregate me siguri nuk do t'u shkojn\u00eb, edhe pse duhet. Katastrof\u00eb!<\/li>\n<\/ul>\n<p><\/p>\n<h2>Menaxhimi i variablave t\u00eb sesionit<\/h2>\n<p>\nPra, n\u00eb versionin e m\u00ebparsh\u00ebm ne u p\u00ebrball\u00ebm me nj\u00eb moment themelor \u2014 duhet t\u00eb m\u00ebsojm\u00eb triggerin t\u00eb dalloj\u00eb ndryshimet \"tona\" n\u00eb tabel\u00eb nga \"t\u00eb huajat\". T\u00eb \"tonat\" t\u00eb kalojn\u00eb ashtu si jan\u00eb, nd\u00ebrsa ato \"t\u00eb huaja\" \u2014 t\u00eb aktivizohen. P\u00ebr k\u00ebt\u00eb, mund t\u00eb p\u00ebrdorim <noindex><a rel=\"nofollow\" href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/12\/runtime-config-client\">variabla sesioni<\/a><\/noindex>.<\/p>\n<h4>session_replication_role<\/h4>\n<p>\nLexojm\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/12\/sql-altertable\">manuali<\/a><\/noindex>:<\/p>\n<blockquote><p>Mekanizmi i aktivizimit t\u00eb triggereve gjithashtu ndikohet nga variabla konfiguruese <noindex><a rel=\"nofollow\" href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/12\/runtime-config-client#GUC-SESSION-REPLICATION-ROLE\">session_replication_role<\/a><\/noindex>. Trigger\u00ebt e aktivizuar pa udh\u00ebzime t\u00eb tjera (n\u00eb m\u00ebnyr\u00eb t\u00eb paracaktuar) do t\u00eb aktivizohen kur roli i replikimit \u00ebsht\u00eb \"origin\" (n\u00eb parazgjedhje) ose \"local\". Trigger\u00ebt t\u00eb aktivizuar duke specifikuar <code>ENABLE REPLICA<\/code>, do t\u00eb aktivizohen vet\u00ebm n\u00ebse <b>re\u017eimi aktual i sesionit<\/b> \u00ebsht\u00eb \"replica\", dhe trigger\u00ebt t\u00eb aktivizuar duke specifikuar <code>ENABLE ALWAYS<\/code>, do t\u00eb aktivizohen pavar\u00ebsisht nga aktuali regjimi i replikimit.<\/p><\/blockquote>\n<p>Dua t\u00eb theksoj se kjo konfigurim i takon jo t\u00eb gjith\u00ebve, si <code>ALTER TABLE<\/code>, dhe jo n\u00eb lidhje me lidhjen ton\u00eb t\u00eb ve\u00e7ant\u00eb. N\u00eb p\u00ebrfundim, p\u00ebr t\u00eb mos aktivizuar ndonj\u00eb m\u00ebnyr\u00eb njoftimi:<\/p>\n<pre><code class=\"sql\">SET session_replication_role = replica; -- \u00e7aktivizoi njoftimet\nUPDATE ...;\nSET session_replication_role = DEFAULT; -- ktheu n\u00eb gjendjen fillestare<\/code><\/pre>\n<p><\/p>\n<h4>Kushti brenda njoftimit<\/h4>\n<p>\nPor, opsioni i m\u00ebsip\u00ebrm funksionon p\u00ebr t\u00eb gjitha njoftimet nj\u00ebherazi (apo duhet t\u00eb \"ndryshojm\u00eb\" paraprakisht njoftimet q\u00eb nuk duam t\u00eb \u00e7aktivizojm\u00eb). Po n\u00ebse na nevojitet <b>\"\u00e7aktivizimi\" i nj\u00eb njoftimi t\u00eb caktuar<\/b>?<\/p>\n<p>N\u00eb k\u00ebt\u00eb na ndihmon <noindex><a rel=\"nofollow\" href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/12\/runtime-config-custom\">\"variabla\" e p\u00ebrdoruesit t\u00eb sesionit<\/a><\/noindex>:<\/p>\n<blockquote><p>Emrat e parametrave t\u00eb zgjerimeve shkruhen n\u00eb k\u00ebt\u00eb m\u00ebnyr\u00eb: emri i zgjerimit, pika dhe pastaj emri i parametrave, si emrat e plota t\u00eb objekteve n\u00eb SQL. P\u00ebr shembull: plpgsql.variable_conflict.<br \/>\nT\u00eb gjitha parametrat jasht\u00eb sistemit mund t\u00eb vendosen n\u00eb procese q\u00eb nuk ngarkojn\u00eb modulin e zgjerimit p\u00ebrkat\u00ebs, PostgreSQL pranon <b>vlera p\u00ebr \u00e7do em\u00ebr me dy komponente<\/b>.<\/p><\/blockquote>\n<p>S\u00eb pari, p\u00ebrmir\u00ebsojm\u00eb njoftimin, p\u00ebraf\u00ebrsisht k\u00ebshtu:<\/p>\n<pre><code class=\"sql\">BEGIN\n    -- n\u00eb procesin e konvertimit mund t\u00eb b\u00ebjm\u00eb gjith\u00e7ka\n    IF current_setting('mycfg.my_table_convert_process') = 'TRUE' THEN\n        IF TG_OP IN ('INSERT', 'UPDATE') THEN\n            RETURN NEW;\n        ELSE\n            RETURN OLD;\n        END IF;\n    END IF;\n...<\/code><\/pre>\n<p>\nP\u00ebr m\u00eb tep\u00ebr, kjo mund t\u00eb b\u00ebhet \"n\u00eb qershi\", pa bllokime, p\u00ebrmes <code>CREATE OR REPLACE<\/code> p\u00ebr funksionin e njoftimit. Pastaj n\u00eb lidhjen speciale vendosim \"variabl\u00ebn\" ton\u00eb:<\/p>\n<pre><code class=\"sql\">\nSET mycfg.my_table_convert_process = 'TRUE';\nUPDATE ...;\nSET mycfg.my_table_convert_process = ''; -- ktheu n\u00eb gjendjen fillestare\n<\/code><\/pre>\n<p>\nDini m\u00ebnyra t\u00eb tjera? Ndani n\u00eb komentet.<br \/>\n<br \/>Burimi: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/tensor\/blog\/489900\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0420\u0430\u043d\u043e \u0438\u043b\u0438 \u043f\u043e\u0437\u0434\u043d\u043e \u043c\u043d\u043e\u0433\u0438\u0435 \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0441 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c\u044e \u0447\u0442\u043e-\u0442\u043e \u043c\u0430\u0441\u0441\u043e\u0432\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0432 \u0437\u0430\u043f\u0438\u0441\u044f\u0445 \u0442\u0430\u0431\u043b\u0438\u0446\u044b. \u042f \u0443\u0436\u0435 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u043b, \u043a\u0430\u043a \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u043b\u0443\u0447\u0448\u0435, \u0430 \u043a\u0430\u043a \u2014 \u043b\u0443\u0447\u0448\u0435 \u043d\u0435 \u0434\u0435\u043b\u0430\u0442\u044c. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043e \u0432\u0442\u043e\u0440\u043e\u043c \u0430\u0441\u043f\u0435\u043a\u0442\u0435 \u043c\u0430\u0441\u0441\u043e\u0432\u043e\u0433\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u2014 \u043e \u0441\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u043e\u0432. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u0435, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0432\u0430\u043c \u043d\u0430\u0434\u043e \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u043f\u0440\u0430\u0432\u0438\u0442\u044c, \u0432\u0438\u0441\u0438\u0442 \u0437\u043b\u043e\u0431\u043d\u044b\u0439 \u0442\u0440\u0438\u0433\u0433\u0435\u0440 ON UPDATE, \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u044f\u0449\u0438\u0439 \u0432\u0441\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-72265","post","type-post","status-publish","format-standard","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.0.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0420\u0430\u043d\u043e \u0438\u043b\u0438 \u043f\u043e\u0437\u0434\u043d\u043e \u043c\u043d\u043e\u0433\u0438\u0435 \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0441 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c\u044e \u0447\u0442\u043e-\u0442\u043e \u043c\u0430\u0441\u0441\u043e\u0432\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0432 \u0437\u0430\u043f\u0438\u0441\u044f\u0445 \u0442\u0430\u0431\u043b\u0438\u0446\u044b.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/postgresql-antipatterns-menyaem-dannye-v-obhod-triggera\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.0.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"sq_AL\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47PostgreSQL Antipatterns: \u043c\u0435\u043d\u044f\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u043e\u0431\u0445\u043e\u0434 \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u0430 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0420\u0430\u043d\u043e \u0438\u043b\u0438 \u043f\u043e\u0437\u0434\u043d\u043e \u043c\u043d\u043e\u0433\u0438\u0435 \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0441 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c\u044e \u0447\u0442\u043e-\u0442\u043e \u043c\u0430\u0441\u0441\u043e\u0432\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0432 \u0437\u0430\u043f\u0438\u0441\u044f\u0445 \u0442\u0430\u0431\u043b\u0438\u0446\u044b.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/postgresql-antipatterns-menyaem-dannye-v-obhod-triggera\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-03-03T05:42:17+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-03-03T13:13:51+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47PostgreSQL Antipatterns: ndryshimi i t\u00eb dh\u00ebnave p\u00ebrtej njoftimit | ProHoster","description":"P\u00ebr nj\u00eb her\u00eb ose tjet\u00ebr, shum\u00eb p\u00ebrballen me nevoj\u00ebn p\u00ebr t\u00eb b\u00ebr\u00eb di\u00e7ka masivisht n\u00eb regjistrat e tabel\u00ebs.","canonical_url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/postgresql-antipatterns-menyaem-dannye-v-obhod-triggera","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sq_AL","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47PostgreSQL Antipatterns: \u043c\u0435\u043d\u044f\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u043e\u0431\u0445\u043e\u0434 \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u0430 | ProHoster","og:description":"\u0420\u0430\u043d\u043e \u0438\u043b\u0438 \u043f\u043e\u0437\u0434\u043d\u043e \u043c\u043d\u043e\u0433\u0438\u0435 \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0441 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c\u044e \u0447\u0442\u043e-\u0442\u043e \u043c\u0430\u0441\u0441\u043e\u0432\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0432 \u0437\u0430\u043f\u0438\u0441\u044f\u0445 \u0442\u0430\u0431\u043b\u0438\u0446\u044b.","og:url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/postgresql-antipatterns-menyaem-dannye-v-obhod-triggera","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-03-03T05:42:17+00:00","article:modified_time":"2020-03-03T13:13:51+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"72265","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 18:47:24","updated":"2022-09-27 18:26:38","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/72265","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/comments?post=72265"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/72265\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media?parent=72265"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/categories?post=72265"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/tags?post=72265"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}