{"id":79039,"date":"2020-04-23T19:43:26","date_gmt":"2020-04-23T17:43:26","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/ekonomim-kopeechku-na-bolshih-obemah-v-postgresql"},"modified":"2020-04-23T19:43:26","modified_gmt":"2020-04-23T17:43:26","slug":"ekonomim-kopeechku-na-bolshih-obemah-v-postgresql","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/ekonomim-kopeechku-na-bolshih-obemah-v-postgresql","title":{"rendered":"Kursim t\u00eb parave p\u00ebr sasi t\u00eb m\u00ebdha n\u00eb PostgreSQL","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Duke vazhdimin e tem\u00ebs s\u00eb regjistrimit t\u00eb flukseve t\u00eb m\u00ebdha t\u00eb t\u00eb dh\u00ebnave <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/497008\/\">artikulli i m\u00ebparsh\u00ebm mbi ndarjen<\/a><\/noindex>, n\u00eb k\u00ebt\u00eb do t\u00eb shqyrtojm\u00eb m\u00ebnyrat me t\u00eb cilat mund t\u00eb <b>reduktosh \"p\u00ebrmas\u00ebn fizike\" t\u00eb t\u00eb dh\u00ebnave t\u00eb ruajtura<\/b> n\u00eb PostgreSQL, dhe ndikimin e saj n\u00eb performanc\u00ebn e serverit.<\/p>\n<p>Do t\u00eb flasim p\u00ebr <b>caktimet TOAST dhe rregullimin e t\u00eb dh\u00ebnave<\/b>. \"N\u00eb mesatare\", k\u00ebto metoda do t\u00eb lejojn\u00eb kursimin e jo shum\u00eb burimeve, por pa modifikime n\u00eb kodin e aplikacionit.<\/p>\n<p><img decoding=\"async\" alt=\"Kursim t\u00eb parave p\u00ebr sasi t\u00eb m\u00ebdha n\u00eb PostgreSQL\" src=\"\/wp-content\/uploads\/2020\/04\/4d43b9b43edb10c4c8f13159c7dd1eac.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nMegjithat\u00eb, p\u00ebrvoja jon\u00eb ka rezultuar shum\u00eb produktive n\u00eb k\u00ebt\u00eb fush\u00eb, pasi ruajtja e pothuajse \u00e7do monitorimi p\u00ebr natyr\u00ebn e saj \u00ebsht\u00eb <b>n\u00eb shumic\u00eb t\u00eb rasteve append-only<\/b> p\u00ebr sa i p\u00ebrket t\u00eb dh\u00ebnave t\u00eb shkruara. Dhe n\u00ebse je kurioz, si mund ta m\u00ebsosh baz\u00ebn t\u00eb shkruaj\u00eb n\u00eb disk n\u00eb vend t\u00eb <b>200MB\/s<\/b> gjysm\u00eb m\u00eb pak - t\u00eb lutem, vazhdo m\u00eb tej.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Sekretet e vogla t\u00eb t\u00eb dh\u00ebnave t\u00eb m\u00ebdha<\/h2>\n<p>\nSipas profilit t\u00eb pun\u00ebs <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/487380\/\">t\u00eb sh\u00ebrbimit ton\u00eb<\/a><\/noindex>, ai p\u00ebrballonte rregullisht nga log\u00ebt <b>paqet tekstuale<\/b>.<\/p>\n<p>Dhe p\u00ebrsa i p\u00ebrket <noindex><a rel=\"nofollow\" href=\"https:\/\/sbis.ru\/all_services\">kompleksit SBIS<\/a><\/noindex>, t\u00eb cilat DB-t\u00eb tona monitorojn\u00eb, - \u00ebsht\u00eb nj\u00eb produkt me shum\u00eb komponent\u00eb me struktura t\u00eb nd\u00ebrlikuara t\u00eb t\u00eb dh\u00ebnave, k\u00ebshtu q\u00eb <b>p\u00ebr t\u00eb arritur performanc\u00ebn maksimale<\/b> kan\u00eb rezultuar t\u00eb jen\u00eb gjithashtu <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/486072\/\">\"multi-volume\" me logjik\u00eb algjebrike t\u00eb nd\u00ebrlikuar<\/a><\/noindex>. Pra, volumi i \u00e7do ekzemplar t\u00eb ve\u00e7ant\u00eb t\u00eb k\u00ebrkes\u00ebs ose p\u00ebrfundimit t\u00eb planit t\u00eb ekzekutimit n\u00eb logun q\u00eb na vjen \u00ebsht\u00eb \"n\u00eb mesatare\" mjaft i madh.<\/p>\n<p>Le t\u00eb shohim struktur\u00ebn e nj\u00eb nga tabelat, n\u00eb t\u00eb cil\u00ebn ne shkruajm\u00eb \"t\u00eb dh\u00ebna t\u00eb pap\u00ebrpunuara\" - do t\u00eb thot\u00eb pik\u00ebrisht tekstin origjinal nga regjistrimi i logut:<\/p>\n<pre><code class=\"sql\">CREATE TABLE rawdata_orig(\n  pack -- PK\n    uuid NOT NULL\n, recno -- PK\n    smallint NOT NULL\n, dt -- \u00e7el\u00ebsi i seksionit\n    date\n, data -- m\u00eb e r\u00ebnd\u00ebsishmja\n    text\n, PRIMARY KEY(pack, recno)\n);<\/code><\/pre>\n<p>\nNj\u00eb tabel\u00eb tipike e till\u00eb (sigurisht e ndar\u00eb, prandaj kjo \u00ebsht\u00eb - nj\u00eb shabllon seksioni), ku m\u00eb e r\u00ebnd\u00ebsishmja \u00ebsht\u00eb - teksti. Ndonj\u00ebher\u00eb mjafton shum\u00eb voluminoz.<\/p>\n<p>Le t\u00eb kujtojm\u00eb se \"p\u00ebrmasat fizike\" e nj\u00eb regjistrimi n\u00eb PG nuk mund t\u00eb z\u00eb m\u00eb shum\u00eb se nj\u00eb faqe t\u00eb dh\u00ebnash, por \"p\u00ebrmasat logjike\" jan\u00eb nj\u00eb \u00e7\u00ebshtje tjet\u00ebr. P\u00ebr t\u00eb regjistruar nj\u00eb vler\u00eb t\u00eb madhe n\u00eb fush\u00eb (varchar\/text\/bytea) p\u00ebrdoret <noindex><a rel=\"nofollow\" href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/12\/storage-toast\">teknologjia TOAST<\/a><\/noindex>:<\/p>\n<blockquote><p>PostgreSQL p\u00ebrdor nj\u00eb madh\u00ebsi fikse faqeje (rreth 8 KB) dhe nuk lejon q\u00eb tuple t\u00eb z\u00ebn\u00eb disa faqe. Prandaj, ruajtja e vlerave shum\u00eb t\u00eb m\u00ebdha t\u00eb fushave nuk \u00ebsht\u00eb e mundur. P\u00ebr t\u00eb tejkaluar k\u00ebt\u00eb kufizim, vlerat e m\u00ebdha t\u00eb fushave kompresohen dhe\/ose ndahen n\u00eb disa rreshta fizik\u00eb. Kjo ndodh pa u v\u00ebn\u00eb re nga p\u00ebrdoruesi dhe ndikon pak n\u00eb kodin e serverit. Ky metod\u00eb njihet si TOAST &#8230;<\/p><\/blockquote>\n<p>\nRealistikisht, p\u00ebr \u00e7do tabel\u00eb me \"fusha potencialisht t\u00eb m\u00ebdha\" automatikisht <noindex><a rel=\"nofollow\" href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/12\/storage-toast#STORAGE-TOAST-ONDISK\">krijohet nj\u00eb tabel\u00eb marr\u00ebse me \"cop\u00ebzimin\"<\/a><\/noindex> e \u00e7do regjistrimi \"t\u00eb madh\" n\u00eb seksione prej 2KB:<\/p>\n<pre><code class=\"sql\">TOAST(\n  chunk_id\n    integer\n, chunk_seq\n    integer\n, chunk_data\n    bytea\n, PRIMARY KEY(chunk_id, chunk_seq)\n);<\/code><\/pre>\n<p>\nPra, n\u00ebse na duhen t\u00eb regjistrojm\u00eb nj\u00eb rresht me nj\u00eb \"vler\u00eb t\u00eb madhe\" <code>data<\/code>, regjistrimi real do t\u00eb ndodhi <b>jo vet\u00ebm n\u00eb tabel\u00ebn kryesore dhe PK e saj, por edhe n\u00eb TOAST dhe PK e tij<\/b>.<\/p>\n<h4>Ulimi i ndikimit t\u00eb TOAST<\/h4>\n<p>\nPor shumica e regjistrimeve tona megjithat\u00eb nuk jan\u00eb kaq t\u00eb m\u00ebdha, <b>n\u00eb 8KB duhet t\u00eb ndihmohen<\/b> - si t\u00eb kursejm\u00eb p\u00ebr k\u00ebt\u00eb?..<\/p>\n<p>K\u00ebtu na vjen n\u00eb ndihm\u00eb atribute <noindex><a rel=\"nofollow\" href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/12\/storage-toast#STORAGE-TOAST-ONDISK\"><code>STORAGE<\/code><\/a><\/noindex> n\u00eb kolon\u00ebn e tabel\u00ebs:<\/p>\n<blockquote>\n<ul>\n<li><b>EXTENDED<\/b> lejon si kompresimin, ashtu dhe ruajtjen e ve\u00e7ant\u00eb. Kjo \u00ebsht\u00eb <b>opsioni standart<\/b> p\u00ebr shumic\u00ebn e llojeve t\u00eb t\u00eb dh\u00ebnave, t\u00eb p\u00ebrshtatshme me TOAST. Fillimisht ndodh nj\u00eb p\u00ebrpjekje p\u00ebr t\u00eb b\u00ebr\u00eb kompresimin, pastaj - ruajtja jasht\u00eb tabel\u00ebs, n\u00ebse rreshti \u00ebsht\u00eb ende tep\u00ebr i madh.<\/li>\n<li><b>MAIN<\/b> lejon kompresimin, por jo ruajtjen e ve\u00e7ant\u00eb. (N\u00eb fakt, ruajtja e ve\u00e7ant\u00eb, megjithat\u00eb, do t\u00eb realizohet p\u00ebr k\u00ebto kolona, por vet\u00ebm <b>si nj\u00eb mas\u00eb ekstreme<\/b>, kur nuk ka m\u00ebnyr\u00eb tjet\u00ebr p\u00ebr t\u00eb reduktuar rreshtin sa p\u00ebr t\u00eb p\u00ebrfshir\u00eb n\u00eb faqe.)<\/li>\n<\/ul>\n<\/blockquote>\n<p>N\u00eb fakt, kjo \u00ebsht\u00eb pik\u00ebrisht ajo q\u00eb na nevojitet p\u00ebr tekstin - <b>maksimalisht t\u00eb kompresojm\u00eb, dhe n\u00ebse ashtu zgjidhim t\u00eb shkojm\u00eb n\u00eb TOAST.<\/b>Kjo mund t\u00eb b\u00ebhet menj\u00ebher\u00eb \"n\u00eb flak\u00eb\", me nj\u00eb komand\u00eb:<\/p>\n<pre><code class=\"sql\">ALTER TABLE rawdata_orig ALTER COLUMN data SET STORAGE MAIN;<\/code><\/pre>\n<p><\/p>\n<h4>Si ta vler\u00ebsojm\u00eb efektin<\/h4>\n<p>\nDuke qen\u00eb se \u00e7do dit\u00eb fluksi i t\u00eb dh\u00ebnave ndryshon, ne nuk mund t\u00eb krahasojm\u00eb numrat absolut, por n\u00eb t\u00eb relativ\u00ebt, sa m\u00eb <b>t\u00eb vogla pjes\u00eb<\/b> ne regjistruam n\u00eb TOAST - aq m\u00eb mir\u00eb. Por k\u00ebtu ka rrezikun - sa m\u00eb i madh t\u00eb jet\u00eb \"v\u00ebllimi fizik\" i \u00e7do regjistrimi t\u00eb ve\u00e7ant\u00eb, aq \"m\u00eb i gjer\u00eb\" b\u00ebhet indeksi, pasi duhet t\u00eb mbuloj\u00eb m\u00eb shum\u00eb faqe t\u00eb dh\u00ebnash.<\/p>\n<p>Sekcioni <b>para ndryshimeve<\/b>:<\/p>\n<pre><code class=\"plaintext\">heap  = 37GB (39%)\nTOAST = 54GB (57%)\nPK    =  4GB ( 4%)\n<\/code><\/pre>\n<p>\nSekcioni <b>pas ndryshimeve<\/b>:<\/p>\n<pre><code class=\"plaintext\">heap  = 37GB (67%)\nTOAST = 16GB (29%)\nPK    =  2GB ( 4%)<\/code><\/pre>\n<p>\nN\u00eb fakt, ne <b>filluam t\u00eb shkruajm\u00eb n\u00eb TOAST dy her\u00eb m\u00eb rrall\u00eb<\/b>, q\u00eb leht\u00ebsuar jo vet\u00ebm diskun, por edhe CPU-n\u00eb:<\/p>\n<p><img decoding=\"async\" alt=\"Kursim t\u00eb parave p\u00ebr sasi t\u00eb m\u00ebdha n\u00eb PostgreSQL\" src=\"\/wp-content\/uploads\/2020\/04\/547485eff9c6491ffe4d59e5c81f656d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<img decoding=\"async\" alt=\"Kursim t\u00eb parave p\u00ebr sasi t\u00eb m\u00ebdha n\u00eb PostgreSQL\" src=\"\/wp-content\/uploads\/2020\/04\/6bd3b18146c20959693f961e41fff447.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nDua t\u00eb theksoj se kemi filluar t\u00eb \"lexojm\u00eb\" disku m\u00eb pak, jo vet\u00ebm \"shkruajm\u00eb\" - pasi gjat\u00eb futur t\u00eb nj\u00eb regjistrimi n\u00eb nj\u00eb tabel\u00eb, na duhet t\u00eb \"lexojm\u00eb\" gjithashtu pjes\u00eb t\u00eb pem\u00ebs s\u00eb \u00e7do indeksi p\u00ebr t\u00eb p\u00ebrcaktuar pozitat e s\u00eb ardhmes n\u00eb to.<\/p>\n<h2>Kush e ka mir\u00eb t\u00eb jetoj\u00eb n\u00eb PostgreSQL 11<\/h2>\n<p>\nPas update n\u00eb PG11, ne vendos\u00ebm t\u00eb vazhdojm\u00eb me \"tunimin\" TOAST dhe v\u00ebm\u00eb re se nga k\u00ebto versione \u00ebsht\u00eb b\u00ebr\u00eb e mundur t\u00eb p\u00ebrshtaten parametrat. <noindex><a rel=\"nofollow\" href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/11\/storage-toast#STORAGE-TOAST-ONDISK\"><code>toast_tuple_target<\/code><\/a><\/noindex>:<\/p>\n<blockquote><p>Kodi i p\u00ebrpunimit TOAST aktivizohet vet\u00ebm kur vlera e rreshtit, e cila duhet t\u00eb ruhet n\u00eb tabel\u00eb, \u00ebsht\u00eb m\u00eb e madhe se TOAST_TUPLE_THRESHOLD byte (zakonisht \u00ebsht\u00eb 2 KB). Kodi TOAST do t\u00eb kompresoj\u00eb dhe\/ose do t\u00eb nxjerr\u00eb vlerat e fushave jasht\u00eb tabel\u00ebs deri sa vlera e rreshtit t\u00eb b\u00ebhet m\u00eb e vog\u00ebl se TOAST_TUPLE_TARGET byte (nj\u00eb vler\u00eb variable, gjithashtu zakonisht 2 KB) apo deri sa t\u00eb jet\u00eb e pamundur t\u00eb reduktohet volumi.<\/p><\/blockquote>\n<p>Vendos\u00ebm se t\u00eb dh\u00ebnat tona zakonisht jan\u00eb ose \"shum\u00eb t\u00eb shkurtra\" ose \"shum\u00eb t\u00eb gjata\", k\u00ebshtu q\u00eb vendos\u00ebm t\u00eb kufizojm\u00eb vler\u00ebn minimale t\u00eb mundshme:<\/p>\n<pre><code class=\"sql\">ALTER TABLE rawplan_orig SET (toast_tuple_target = 128);<\/code><\/pre>\n<p>\nLe t\u00eb shohim se si ndryshimet e reja ndikuar n\u00eb ngarkimin e diskut pas rimodelimit:<\/p>\n<p><img decoding=\"async\" alt=\"Kursim t\u00eb parave p\u00ebr sasi t\u00eb m\u00ebdha n\u00eb PostgreSQL\" src=\"\/wp-content\/uploads\/2020\/04\/ccaa4879e413a566b362d01582eb8c19.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nJo keq! Mesatarja <b>e radh\u00ebs n\u00eb disk u reduktua<\/b> pothuajse 1.5 her\u00eb, dhe \"shfryt\u00ebzimi\" i diskut \u2014 20%! Por ndoshta ka ndikuar ndonj\u00eb gj\u00eb n\u00eb CPU?<\/p>\n<p><img decoding=\"async\" alt=\"Kursim t\u00eb parave p\u00ebr sasi t\u00eb m\u00ebdha n\u00eb PostgreSQL\" src=\"\/wp-content\/uploads\/2020\/04\/f7026e5809853d35c6fb7a8376b9f369.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nT\u00eb pakt\u00ebn, ndonj\u00ebher\u00eb nuk u p\u00ebrkeq\u00ebsua. Megjithat\u00eb, \u00ebsht\u00eb e v\u00ebshtir\u00eb t\u00eb gjykohet, ndoshta sepse e tilla sasi gjithashtu nuk mund t\u00eb ngrej\u00eb mesataren e ngarkes\u00ebs s\u00eb CPU-s\u00eb lart. <b>5%<\/b>.<\/p>\n<h2>Ndryshimi i vendit t\u00eb termave\u2026 e ndryshon rezultatin!<\/h2>\n<p>\nSi\u00e7 dihet, nj\u00eb qindark\u00eb ruan nj\u00eb lek, dhe me volumet tona t\u00eb ruajtjes rreth <b>10TB\/muaj<\/b> edhe nj\u00eb optimizim i vog\u00ebl mund t\u00eb sjell\u00eb nj\u00eb fitim t\u00eb mir\u00eb. Prandaj, ne e drejtuam v\u00ebmendjen ton\u00eb drejt struktur\u00ebs fizike t\u00eb t\u00eb dh\u00ebnave tona \u2014 si konkretisht <b>\"jan\u00eb vendosur\" fushat brenda regjistrimeve<\/b> e \u00e7do tabele.<\/p>\n<p>P\u00ebr shkak se p\u00ebr <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/postgrespro\/blog\/444536\/\">p\u00ebrputhjen e t\u00eb dh\u00ebnave<\/a><\/noindex> kjo ndikon drejtp\u00ebrdrejt <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.gitlab.com\/ee\/development\/ordering_table_columns.html\">n\u00eb volumin rezultant.<\/a><\/noindex>:<\/p>\n<blockquote><p>Shum\u00eb arkitektura parashikojn\u00eb p\u00ebrputhjen e t\u00eb dh\u00ebnave sipas kufijve t\u00eb fjal\u00ebve makinerike. P\u00ebr shembull, n\u00eb nj\u00eb sistem 32-bit x86, numrat e t\u00ebr\u00eb (tipi integer, z\u00eb 4 byte) do t\u00eb p\u00ebrputhen sipas kufirit t\u00eb fjal\u00ebve 4-byte, ashtu si numrat me pik\u00eb t\u00eb l\u00ebvizshme t\u00eb dyfisht\u00eb (tipi double precision, 8 byte). Nd\u00ebrsa n\u00eb nj\u00eb sistem 64-bit, vlerat e double do t\u00eb p\u00ebrputhen sipas kufirit t\u00eb fjal\u00ebve 8-byte. Kjo \u00ebsht\u00eb nj\u00eb arsye tjet\u00ebr p\u00ebr papajtueshm\u00ebri.<\/p>\n<p>P\u00ebr shkak t\u00eb p\u00ebrputhjes, madh\u00ebsia e rreshtit t\u00eb tabel\u00ebs varet nga rendi i vendosjes s\u00eb fushave. Zakonisht, ky efekt nuk v\u00ebrehet shum\u00eb, por n\u00eb disa raste mund t\u00eb \u00e7oj\u00eb n\u00eb rritje t\u00eb r\u00ebnd\u00ebsishme t\u00eb madh\u00ebsis\u00eb. P\u00ebr shembull, n\u00ebse vendosen fushat e tipave char(1) dhe integer p\u00ebrzier, zakonisht do t\u00eb humbet 3 byte t\u00eb panevojshme nd\u00ebrmjet tyre.<\/p><\/blockquote>\n<p>\nLe t\u00eb fillojm\u00eb me modele sintetike:<\/p>\n<pre><code class=\"sql\">SELECT pg_column_size(ROW(\n  '0000-0000-0000-0000-0000-0000-0000-0000'::uuid\n, 0::smallint\n, '2019-01-01'::date\n));\n-- 48 byte\n\nSELECT pg_column_size(ROW(\n  '2019-01-01'::date\n, '0000-0000-0000-0000-0000-0000-0000'::uuid\n, 0::smallint\n));\n-- 46 byte<\/code><\/pre>\n<p>\nNga ka dy byte t\u00eb tep\u00ebrta n\u00eb rastin e par\u00eb? E gjith\u00eb \u00ebsht\u00eb e thjesht\u00eb \u2014 <b>smallint 2-byte p\u00ebrshtatet sipas kufirit 4-byte<\/b> para fush\u00ebs s\u00eb ardhshme, kurse kur \u00ebsht\u00eb fush\u00eb e fundit \u2014 nuk ka asgj\u00eb p\u00ebr t'u p\u00ebrshtatur dhe as nuk ka nevoj\u00eb.<\/p>\n<p>N\u00eb teori \u2014 gjith\u00e7ka \u00ebsht\u00eb mir\u00eb dhe fushat mund t\u00eb rregullohen si t\u00eb duash. Le t\u00eb kontrollojm\u00eb mbi t\u00eb dh\u00ebna reale duke marr\u00eb si shembull nj\u00eb nga tabelat, ku seksioni ditor z\u00eb 10-15GB.<\/p>\n<p>Struktura origjinale:<\/p>\n<pre><code class=\"sql\">CREATE TABLE public.plan_20190220\n(\n-- Trash\u00ebguar nga tabela plan:  pack uuid NOT NULL,\n-- Trash\u00ebguar nga tabela plan:  recno smallint NOT NULL,\n-- Trash\u00ebguar nga tabela plan:  host uuid,\n-- Trash\u00ebguar nga tabela plan:  ts timestamp with time zone,\n-- Trash\u00ebguar nga tabela plan:  exectime numeric(32,3),\n-- Trash\u00ebguar nga tabela plan:  duration numeric(32,3),\n-- Trash\u00ebguar nga tabela plan:  bufint bigint,\n-- Trash\u00ebguar nga tabela plan:  bufmem bigint,\n-- Trash\u00ebguar nga tabela plan:  bufdsk bigint,\n-- Trash\u00ebguar nga tabela plan:  apn uuid,\n-- Trash\u00ebguar nga tabela plan:  ptr uuid,\n-- Trash\u00ebguar nga tabela plan:  dt date,\n  CONSTRAINT plan_20190220_pkey PRIMARY KEY (pack, recno),\n  CONSTRAINT chck_ptr CHECK (ptr IS NOT NULL),\n  CONSTRAINT plan_20190220_dt_check CHECK (dt = '2019-02-20'::date)\n)\nINHERITS (public.plan)<\/code><\/pre>\n<p>\nSeksioni pas ndryshimit t\u00eb rendit t\u00eb kolonave \u2014 jan\u00eb t\u00eb nj\u00ebjtat fushat, vet\u00ebm se rendi \u00ebsht\u00eb ndryshe. <b>CREATE TABLE public.plan_20190221\n(\n-- Trash\u00ebguar nga tabela plan:  dt date NOT NULL,\n-- Trash\u00ebguar nga tabela plan:  ts timestamp with time zone,\n-- Trash\u00ebguar nga tabela plan:  pack uuid NOT NULL,\n-- Trash\u00ebguar nga tabela plan:  recno smallint NOT NULL,\n-- Trash\u00ebguar nga tabela plan:  host uuid,\n-- Trash\u00ebguar nga tabela plan:  apn uuid,\n-- Trash\u00ebguar nga tabela plan:  ptr uuid,\n-- Trash\u00ebguar nga tabela plan:  bufint bigint,\n-- Trash\u00ebguar nga tabela plan:  bufmem bigint,\n-- Trash\u00ebguar nga tabela plan:  bufdsk bigint,\n-- Trash\u00ebguar nga tabela plan:  exectime numeric(32,3),\n-- Trash\u00ebguar nga tabela plan:  duration numeric(32,3),\n  CONSTRAINT plan_20190221_pkey PRIMARY KEY (pack, recno),\n  CONSTRAINT chck_ptr CHECK (ptr IS NOT NULL),\n  CONSTRAINT plan_20190221_dt_check CHECK (dt = '2019-02-21'::date)\n)\nINHERITS (public.plan)<\/b>:<\/p>\n<pre><code class=\"sql\">CREATE TABLE public.plan_20190221\n(\n-- Trash\u00ebguar nga tabela plan:  dt date NOT NULL,\n-- Trash\u00ebguar nga tabela plan:  ts timestamp me zon\u00ebn e koh\u00ebs,\n-- Trash\u00ebguar nga tabela plan:  pack uuid NOT NULL,\n-- Trash\u00ebguar nga tabela plan:  recno smallint NOT NULL,\n-- Trash\u00ebguar nga tabela plan:  host uuid,\n-- Trash\u00ebguar nga tabela plan:  apn uuid,\n-- Trash\u00ebguar nga tabela plan:  ptr uuid,\n-- Trash\u00ebguar nga tabela plan:  bufint bigint,\n-- Trash\u00ebguar nga tabela plan:  bufmem bigint,\n-- Trash\u00ebguar nga tabela plan:  bufdsk bigint,\n-- Trash\u00ebguar nga tabela plan:  exectime numeric(32,3),\n-- Trash\u00ebguar nga tabela plan:  duration numeric(32,3),\n  CONSTRAINT plan_20190221_pkey PRIMARY KEY (pack, recno),\n  CONSTRAINT chck_ptr CHECK (ptr IS NOT NULL),\n  CONSTRAINT plan_20190221_dt_check CHECK (dt = '2019-02-21'::date)\n)\nINHERITS (public.plan)<\/code><\/pre>\n<p>\nV\u00ebllimi total i seksionit p\u00ebrcaktohet nga numri i \"fakteve\" dhe varet vet\u00ebm nga proceset e jashtme, k\u00ebshtu q\u00eb le t\u00eb ndajm\u00eb madh\u00ebsin\u00eb heap (<code>pg_relation_size<\/code>) me numrin e regjistrave n\u00eb t\u00eb \u2014 pra, t\u00eb marrim <b>madh\u00ebsin\u00eb mesatare t\u00eb regjistrit t\u00eb ruajtur realisht.<\/b>:<\/p>\n<p><img decoding=\"async\" alt=\"Kursim t\u00eb parave p\u00ebr sasi t\u00eb m\u00ebdha n\u00eb PostgreSQL\" src=\"\/wp-content\/uploads\/2020\/04\/06be2d7d70d223e7678f9a478e4c293f.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Minus 6% e volumit<\/b>, shk\u00eblqyesh\u00ebm!<\/p>\n<p>Por, natyrisht, asgj\u00eb nuk \u00ebsht\u00eb aq roz\u00eb \u2014 sepse <b>n\u00eb indekset rregulli i fushave nuk mund ta ndryshojm\u00eb<\/b>, dhe k\u00ebshtu \"n\u00eb p\u00ebrgjith\u00ebsi\" (<code>pg_total_relation_size<\/code>)\u2026<\/p>\n<p><img decoding=\"async\" alt=\"Kursim t\u00eb parave p\u00ebr sasi t\u00eb m\u00ebdha n\u00eb PostgreSQL\" src=\"\/wp-content\/uploads\/2020\/04\/8beff38e5034fc0d40665b75cb3b3625.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n\u2026 megjithat\u00eb k\u00ebtu <b>kurse kemi arritur t\u00eb kursen 1.5%<\/b>, pa ndryshuar asnj\u00eb rresht kodi. Po, k\u00ebshtu \u00ebsht\u00eb!<\/p>\n<p><img decoding=\"async\" alt=\"Kursim t\u00eb parave p\u00ebr sasi t\u00eb m\u00ebdha n\u00eb PostgreSQL\" src=\"\/wp-content\/uploads\/2020\/04\/10f4a2151465a38bf45823a5d360302b.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Dua t\u00eb theksoj se varianti i m\u00ebsip\u00ebrm i pozicionit t\u00eb fushave \u2014 nuk \u00ebsht\u00eb domosdoshm\u00ebrisht optimal. Sepse disa bllok\u00eb fushash nuk dua t'i 'ndaj' p\u00ebr arsyet estetike \u2014 p\u00ebr shembull, \u00e7iftin <code>(pack, recno)<\/code>, i cili \u00ebsht\u00eb PK p\u00ebr k\u00ebt\u00eb tabel\u00eb.<\/p>\n<p>N\u00eb p\u00ebrgjith\u00ebsi, p\u00ebrcaktimi i 'pozitivit' minimal t\u00eb fushave \u00ebsht\u00eb nj\u00eb detyr\u00eb mjaft e thjesht\u00eb e 'k\u00ebrkimit'. Prandaj, ju mund t\u00eb merrni rezultate m\u00eb t\u00eb mira se tonat n\u00eb t\u00eb dh\u00ebnat tuaja \u2014 provoni!<br \/>\n<br \/>Burimi: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/tensor\/blog\/498292\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u044f \u0442\u0435\u043c\u0443 \u0437\u0430\u043f\u0438\u0441\u0438 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445, \u043f\u043e\u0434\u043d\u044f\u0442\u0443\u044e \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435\u0439 \u043f\u0440\u043e \u0441\u0435\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u0432 \u044d\u0442\u043e\u0439 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043c\u043e\u0436\u043d\u043e \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c \u00ab\u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0439\u00bb \u0440\u0430\u0437\u043c\u0435\u0440 \u0445\u0440\u0430\u043d\u0438\u043c\u043e\u0433\u043e \u0432 PostgreSQL, \u0438 \u0438\u0445 \u0432\u043b\u0438\u044f\u043d\u0438\u0435 \u043d\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0441\u0435\u0440\u0432\u0435\u0440\u0430. \u0420\u0435\u0447\u044c \u043f\u043e\u0439\u0434\u0435\u0442 \u043f\u0440\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 TOAST \u0438 \u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445. \u00ab\u0412 \u0441\u0440\u0435\u0434\u043d\u0435\u043c\u00bb \u044d\u0442\u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u044b \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0442 \u0441\u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442\u044c \u043d\u0435 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u043d\u043e\u0433\u043e \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432, \u0437\u0430\u0442\u043e \u2014 \u0432\u043e\u043e\u0431\u0449\u0435 \u0431\u0435\u0437 \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u043a\u043e\u0434\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u041e\u0434\u043d\u0430\u043a\u043e, [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":79040,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-79039","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u044f \u0442\u0435\u043c\u0443 \u0437\u0430\u043f\u0438\u0441\u0438 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445, \u043f\u043e\u0434\u043d\u044f\u0442\u0443\u044e \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435\u0439 \u043f\u0440\u043e \u0441\u0435\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u0432 \u044d\u0442\u043e\u0439 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043c\u043e\u0436\u043d\u043e \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c \u00ab\u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0439\u00bb \u0440\u0430\u0437\u043c\u0435\u0440 \u0445\u0440\u0430\u043d\u0438\u043c\u043e\u0433\u043e \u0432 PostgreSQL, \u0438 \u0438\u0445 \u0432\u043b\u0438\u044f\u043d\u0438\u0435 \u043d\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0441\u0435\u0440\u0432\u0435\u0440\u0430. \u0420\u0435\u0447\u044c \u043f\u043e\u0439\u0434\u0435\u0442 \u043f\u0440\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 TOAST \u0438 \u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445. \u00ab\u0412 \u0441\u0440\u0435\u0434\u043d\u0435\u043c\u00bb \u044d\u0442\u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u044b \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0442 \u0441\u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442\u044c \u043d\u0435 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u043d\u043e\u0433\u043e \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432, \u0437\u0430\u0442\u043e \u2014 \u0432\u043e\u043e\u0431\u0449\u0435 \u0431\u0435\u0437 \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u043a\u043e\u0434\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u041e\u0434\u043d\u0430\u043a\u043e,\" \/>\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\/ekonomim-kopeechku-na-bolshih-obemah-v-postgresql\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\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\udd47\u042d\u043a\u043e\u043d\u043e\u043c\u0438\u043c \u043a\u043e\u043f\u0435\u0435\u0447\u043a\u0443 \u043d\u0430 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043e\u0431\u044a\u0435\u043c\u0430\u0445 \u0432 PostgreSQL | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u044f \u0442\u0435\u043c\u0443 \u0437\u0430\u043f\u0438\u0441\u0438 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445, \u043f\u043e\u0434\u043d\u044f\u0442\u0443\u044e \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435\u0439 \u043f\u0440\u043e \u0441\u0435\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u0432 \u044d\u0442\u043e\u0439 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043c\u043e\u0436\u043d\u043e \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c \u00ab\u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0439\u00bb \u0440\u0430\u0437\u043c\u0435\u0440 \u0445\u0440\u0430\u043d\u0438\u043c\u043e\u0433\u043e \u0432 PostgreSQL, \u0438 \u0438\u0445 \u0432\u043b\u0438\u044f\u043d\u0438\u0435 \u043d\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0441\u0435\u0440\u0432\u0435\u0440\u0430. \u0420\u0435\u0447\u044c \u043f\u043e\u0439\u0434\u0435\u0442 \u043f\u0440\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 TOAST \u0438 \u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445. \u00ab\u0412 \u0441\u0440\u0435\u0434\u043d\u0435\u043c\u00bb \u044d\u0442\u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u044b \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0442 \u0441\u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442\u044c \u043d\u0435 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u043d\u043e\u0433\u043e \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432, \u0437\u0430\u0442\u043e \u2014 \u0432\u043e\u043e\u0431\u0449\u0435 \u0431\u0435\u0437 \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u043a\u043e\u0434\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u041e\u0434\u043d\u0430\u043a\u043e,\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/ekonomim-kopeechku-na-bolshih-obemah-v-postgresql\" \/>\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-04-23T17:43:26+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-04-23T17:43:26+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\udd47Kurseni disa lek\u00eb n\u00eb volume t\u00eb m\u00ebdha n\u00eb PostgreSQL | ProHoster","description":"Duke vazhduar tem\u00ebn e regjistrimit t\u00eb flukseve t\u00eb m\u00ebdha t\u00eb t\u00eb dh\u00ebnave, p\u00ebr t\u00eb cil\u00ebn u diskutua n\u00eb artikullin e m\u00ebparsh\u00ebm mbi sekcionimin, n\u00eb k\u00ebt\u00eb artikull do t\u00eb shqyrtojm\u00eb m\u00ebnyrat p\u00ebr t\u00eb zvog\u00ebluar p\u00ebrmasat 'fizike' t\u00eb t\u00eb dh\u00ebnave t\u00eb ruajtur n\u00eb PostgreSQL dhe ndikimin e tyre n\u00eb performanc\u00ebn e serverit. Do t\u00eb flasim p\u00ebr cil\u00ebsimet TOAST dhe rreshtimin e t\u00eb dh\u00ebnave. 'N\u00eb mesatare', k\u00ebto metoda do t\u00eb lejojn\u00eb kurse shum\u00eb t\u00eb pakta burimesh, por \u2014 plot\u00ebsisht pa modifikimin e kodit t\u00eb aplikacionit. Megjithat\u00eb,","canonical_url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/ekonomim-kopeechku-na-bolshih-obemah-v-postgresql","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\udd47\u042d\u043a\u043e\u043d\u043e\u043c\u0438\u043c \u043a\u043e\u043f\u0435\u0435\u0447\u043a\u0443 \u043d\u0430 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043e\u0431\u044a\u0435\u043c\u0430\u0445 \u0432 PostgreSQL | ProHoster","og:description":"\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u044f \u0442\u0435\u043c\u0443 \u0437\u0430\u043f\u0438\u0441\u0438 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445, \u043f\u043e\u0434\u043d\u044f\u0442\u0443\u044e \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435\u0439 \u043f\u0440\u043e \u0441\u0435\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u0432 \u044d\u0442\u043e\u0439 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043c\u043e\u0436\u043d\u043e \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c \u00ab\u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0439\u00bb \u0440\u0430\u0437\u043c\u0435\u0440 \u0445\u0440\u0430\u043d\u0438\u043c\u043e\u0433\u043e \u0432 PostgreSQL, \u0438 \u0438\u0445 \u0432\u043b\u0438\u044f\u043d\u0438\u0435 \u043d\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0441\u0435\u0440\u0432\u0435\u0440\u0430. \u0420\u0435\u0447\u044c \u043f\u043e\u0439\u0434\u0435\u0442 \u043f\u0440\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 TOAST \u0438 \u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445. \u00ab\u0412 \u0441\u0440\u0435\u0434\u043d\u0435\u043c\u00bb \u044d\u0442\u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u044b \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0442 \u0441\u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442\u044c \u043d\u0435 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u043d\u043e\u0433\u043e \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432, \u0437\u0430\u0442\u043e \u2014 \u0432\u043e\u043e\u0431\u0449\u0435 \u0431\u0435\u0437 \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u043a\u043e\u0434\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u041e\u0434\u043d\u0430\u043a\u043e,","og:url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/ekonomim-kopeechku-na-bolshih-obemah-v-postgresql","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-04-23T17:43:26+00:00","article:modified_time":"2020-04-23T17:43:26+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"79039","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 16:46:33","updated":"2022-09-28 06:02:32"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/79039","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=79039"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/79039\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media\/79040"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media?parent=79039"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/categories?post=79039"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/tags?post=79039"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}