{"id":79028,"date":"2020-04-23T19:43:19","date_gmt":"2020-04-23T17:43:19","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/pishem-v-postgresql-na-subsvetovoj-1-host-1-day-1tb"},"modified":"2020-04-23T19:43:19","modified_gmt":"2020-04-23T17:43:19","slug":"pishem-v-postgresql-na-subsvetovoj-1-host-1-day-1tb","status":"publish","type":"post","link":"https:\/\/prohoster.info\/cs\/blog\/administrirovanie\/pishem-v-postgresql-na-subsvetovoj-1-host-1-day-1tb","title":{"rendered":"P\u00ed\u0161eme v PostgreSQL na subsv\u011bteln\u00e9m: 1 host, 1 den, 1TB","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Ned\u00e1vno jsem vypr\u00e1v\u011bl, jak pomoc\u00ed standardn\u00edch recept\u016f <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/tensor\/blog\/492694\/\">zv\u00fd\u0161it v\u00fdkonnost SQL dotaz\u016f \u201ena \u010dten\u00ed\u201c<\/a><\/noindex> z datab\u00e1ze PostgreSQL. Dneska se pod\u00edv\u00e1me na to, jak <b>m\u016f\u017eeme u\u010dinit zapisov\u00e1n\u00ed<\/b> do DB efektivn\u011bj\u0161\u00ed bez jak\u00fdchkoli \u201ez\u00e1sah\u016f\u201c do konfigurace \u2014 prost\u011b spr\u00e1vnou organizac\u00ed datov\u00fdch tok\u016f.<\/p>\n<p><img decoding=\"async\" alt=\"P\u00ed\u0161eme v PostgreSQL na subsv\u011bteln\u00e9m: 1 host, 1 den, 1TB\" src=\"\/wp-content\/uploads\/2020\/04\/cbebbe0ed0e9a6590a4e8dd144f82f40.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h2>#1. \u0421\u0435\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435<\/h2>\n<p>\n\u010cl\u00e1nek o tom, jak a pro\u010d byste m\u011bli organizovat <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/483170\/\">aplikativn\u00ed d\u011blen\u00ed \u201eteoreticky\u201c<\/a><\/noindex> u\u017e byl, dnes se budeme v\u011bnovat praxi aplikace n\u011bkter\u00fdch p\u0159\u00edstup\u016f v r\u00e1mci na\u0161eho <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/487380\/\">monitorovac\u00edho servisu stovek PostgreSQL server\u016f.<\/a><\/noindex>.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h4>\u201eD\u00e1vno minul\u00e9 dny\u2026\u201c<\/h4>\n<p>\nNa za\u010d\u00e1tku, jako ka\u017ed\u00fd MVP, n\u00e1\u0161 projekt startoval pod pom\u011brn\u011b n\u00edzk\u00fdm zat\u00ed\u017een\u00edm \u2014 monitorov\u00e1n\u00ed prob\u00edhalo pouze pro des\u00edtku nejkriti\u010dt\u011bj\u0161\u00edch server\u016f, v\u0161echny tabulky byly relativn\u011b kompaktn\u00ed\u2026 Ale \u010das plynul, sledovan\u00fdch hostitel\u016f p\u0159ib\u00fdvalo, a kdy\u017e jsme se op\u011bt pokusili n\u011bco ud\u011blat s jednou z <b>tabulek o velikosti 1.5TB<\/b>, pochopili jsme, \u017ee takhle \u017e\u00edt je sice mo\u017en\u00e9, ale velmi nepohodln\u00e9.<\/p>\n<p>\u010casy byly skoro b\u00e1je\u010dn\u00e9, popul\u00e1rn\u00ed byly r\u016fzn\u00e9 varianty PostgreSQL 9.x, tak\u017ee cel\u00e9 d\u011blen\u00ed muselo prob\u00edhat \u201eru\u010dn\u011b\u201c \u2014 p\u0159es <b>d\u011bd\u011bn\u00ed tabulek a spou\u0161t\u011b\u010de<\/b> sm\u011brov\u00e1n\u00ed s dynamick\u00fdm <code>PROV\u00c9ST<\/code>.<\/p>\n<p><img decoding=\"async\" alt=\"P\u00ed\u0161eme v PostgreSQL na subsv\u011bteln\u00e9m: 1 host, 1 den, 1TB\" src=\"\/wp-content\/uploads\/2020\/04\/a480e75ccec73080aa2d0be1435d2a2e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nVytvo\u0159en\u00e9 \u0159e\u0161en\u00ed se uk\u00e1zalo b\u00fdt dost univerz\u00e1ln\u00ed, aby se dalo aplikovat na v\u0161echny tabulky:<\/p>\n<ul>\n<li>Byla vyhl\u00e1\u0161ena pr\u00e1zdn\u00e1 \u201ehlavi\u010dkov\u00e1\u201c rodi\u010dovsk\u00e1 tabulka, na kter\u00e9 byly pops\u00e1ny v\u0161echny <b>pot\u0159ebn\u00e9 indexy a spou\u0161t\u011b\u010de.<\/b>.<\/li>\n<li>Z\u00e1znam z pohledu klienta se prov\u00e1d\u011bl do \u201eko\u0159enov\u00e9\u201c tabulky, a uvnit\u0159 pomoc\u00ed <b>spou\u0161t\u011b\u010de sm\u011brov\u00e1n\u00ed<\/b> <code>BEFORE INSERT<\/code> z\u00e1pis byl \u201efyzi\u010dn\u011b\u201c vlo\u017een do pot\u0159ebn\u00e9 sekce. Pokud takov\u00e1 je\u0161t\u011b nebyla \u2014 zachytili jsme v\u00fdjimku a\u2026<\/li>\n<li>\u2026 s pomoc\u00ed <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/492464\/\"><code>CREATE TABLE ... (LIKE ... INCLUDING ...)<\/code><\/a><\/noindex> na z\u00e1klad\u011b rodi\u010dovsk\u00e9 tabulky se vytv\u00e1\u0159ela <b>sekce s omezen\u00edm na pot\u0159ebn\u00e9 datum<\/b>, aby p\u0159i extrakci dat byl p\u0159\u00edstup pouze do n\u00ed.<\/li>\n<\/ul>\n<p><\/p>\n<h4>PG10: prvn\u00ed pokus<\/h4>\n<p>\nAle d\u011blen\u00ed p\u0159es d\u011bd\u011bn\u00ed historicky nebylo p\u0159\u00edli\u0161 p\u0159izp\u016fsobeno pro pr\u00e1ci s aktivn\u00edm tokem z\u00e1pisu nebo velk\u00fdm mno\u017estv\u00edm potomkovsk\u00fdch sekc\u00ed. Nap\u0159\u00edklad si m\u016f\u017eeme vzpomenout, \u017ee algoritmus v\u00fdb\u011bru spr\u00e1vn\u00e9 sekce m\u011bl <b>kvadratickou slo\u017eitost<\/b>, co\u017e p\u0159i 100+ sekc\u00edch funguje, jak asi tu\u0161\u00edte\u2026<\/p>\n<p>V PG10 byla tato situace siln\u011b optimalizov\u00e1na, byl zaveden podporu <noindex><a rel=\"nofollow\" href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/10\/ddl-partitioning\">nativn\u00edho d\u011blen\u00ed.<\/a><\/noindex>Proto jsme se hned pokusili aplikovat to po migraci \u00falo\u017ei\u0161t\u011b, ale...<\/p>\n<p>Jak se uk\u00e1zalo po prostudov\u00e1n\u00ed manu\u00e1lu, nativn\u011b sekcionovan\u00e1 tabulka v t\u00e9to verzi:<\/p>\n<ul>\n<li>nepodporuje popis index\u016f<\/li>\n<li>nepodporuje na n\u00ed spou\u0161t\u011b\u010de<\/li>\n<li>nem\u016f\u017ee b\u00fdt sama ni\u010d\u00edm \"potomkem\"<\/li>\n<li>nepodporuje <code>INSERT ... ON CONFLICT<\/code><\/li>\n<li>nedok\u00e1\u017ee automaticky generovat sekce<\/li>\n<\/ul>\n<p>\nPo tvrd\u00e9m z\u00e1sahu jsme pochopili, \u017ee se bez modifikac\u00ed aplikace neobejdeme, a odlo\u017eili dal\u0161\u00ed zkoum\u00e1n\u00ed na p\u016fl roku.<\/p>\n<h4>PG10: druh\u00e1 \u0161ance<\/h4>\n<p>\nTak\u017ee jsme za\u010dali \u0159e\u0161it vznikl\u00e9 probl\u00e9my po jednom:<\/p>\n<ol>\n<li>Proto\u017ee spou\u0161t\u011b\u010de a <code>ON CONFLICT<\/code> se n\u00e1m n\u011bkterde p\u0159ece jen hodily, vytvo\u0159ili jsme mezit\u00edm <b>proxy tabulku<\/b>.<\/li>\n<li><b>zbavili jsme se \"routov\u00e1n\u00ed\"<\/b> ve spou\u0161t\u011b\u010d\u00edch \u2014 tedy od <code>PROV\u00c9ST<\/code>.<\/li>\n<li>Vyt\u00e1hli jsme samostatn\u011b <b>\u0161ablonovou tabulku se v\u0161emi indexy<\/b>, aby se ani na proxy tabulce nevyskytovaly.<\/li>\n<\/ol>\n<p>\n<img decoding=\"async\" alt=\"P\u00ed\u0161eme v PostgreSQL na subsv\u011bteln\u00e9m: 1 host, 1 den, 1TB\" src=\"\/wp-content\/uploads\/2020\/04\/db3118798357575568489f6b575373b6.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nNakonec, po tom v\u0161em, jsme nativn\u011b sekcionovali hlavn\u00ed tabulku. Vytvo\u0159en\u00ed nov\u00e9 sekce z\u016fstalo na aplikaci.<\/p>\n<h4>\"\u0160ijeme\" slovn\u00edky<\/h4>\n<p>\nJak v ka\u017ed\u00e9m analytick\u00e9m syst\u00e9mu, i u n\u00e1s byly <b>\"fakty\" a \"\u0159ezy\"<\/b> (slovn\u00edky). V na\u0161em p\u0159\u00edpad\u011b jako takov\u00e9 slou\u017eily nap\u0159\u00edklad <noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/5XKbFb-l5Do?t=2487\">t\u011blo \"\u0161ablony\"<\/a><\/noindex> homogenn\u00edch pomal\u00fdch dotaz\u016f nebo text samotn\u00e9ho dotazu.<\/p>\n<p>\"Fakty\" jsme m\u011bli sekcionov\u00e1ny podle dn\u016f u\u017e d\u00e1vno, tak\u017ee jsme mohli pohodln\u011b odstra\u0148ovat zastaral\u00e9 sekce, a ty n\u00e1m nevadily (logy p\u0159ece!). Ale slovn\u00edky se uk\u00e1zaly jako probl\u00e9m...<\/p>\n<p>Nen\u00ed to tak, \u017ee jich bylo p\u0159\u00edli\u0161 mnoho, ale p\u0159ibli\u017en\u011b <b>na 100TB \"fakt\u016f\" vznikl slovn\u00edk o velikosti 2.5TB.<\/b>Z takov\u00e9 tabulky se nic snadno neodstran\u00ed, ned\u00e1 se komprimovat v p\u0159ijateln\u00e9m \u010dase a z\u00e1pis do n\u00ed se postupn\u011b zpomaloval.<\/p>\n<p>Vypad\u00e1 to jako slovn\u00edk\u2026 v n\u011bm by m\u011bla b\u00fdt ka\u017ed\u00e1 polo\u017eka zastoupena p\u0159esn\u011b jednou\u2026 a to je spr\u00e1vn\u00e9, ale!.. Nikdo n\u00e1m nebr\u00e1n\u00ed m\u00edt <b>ka\u017ed\u00fd den samostatn\u00fd slovn\u00edk<\/b>! Ano, to p\u0159in\u00e1\u0161\u00ed ur\u010ditou nadbyte\u010dnost, ale umo\u017e\u0148uje to:<\/p>\n<ul>\n<li><b>ps\u00e1t\/\u010d\u00edst rychleji<\/b> d\u00edky men\u0161\u00ed velikosti sekc\u00ed<\/li>\n<li><b>spot\u0159ebov\u00e1vat m\u00e9n\u011b pam\u011bti<\/b> d\u00edky pr\u00e1ci s kompaktn\u011bj\u0161\u00edmi indexy<\/li>\n<li><b>ukl\u00e1dat m\u00e9n\u011b dat<\/b> d\u00edky mo\u017enosti rychl\u00e9ho odstran\u011bn\u00ed zastaral\u00fdch<\/li>\n<\/ul>\n<p>\nV d\u016fsledku cel\u00e9ho komplexu opat\u0159en\u00ed <b>se z\u00e1t\u011b\u017e CPU sn\u00ed\u017eila o ~30%, na disku - o ~50%<\/b>:<\/p>\n<p><img decoding=\"async\" alt=\"P\u00ed\u0161eme v PostgreSQL na subsv\u011bteln\u00e9m: 1 host, 1 den, 1TB\" src=\"\/wp-content\/uploads\/2020\/04\/fd3a219a304dc46173a7eb435502fe02.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nPokra\u010dovali jsme ve zapisov\u00e1n\u00ed do datab\u00e1ze p\u0159esn\u011b toho sam\u00e9ho, jen s men\u0161\u00ed z\u00e1t\u011b\u017e\u00ed.<\/p>\n<h2>#2. \u042d\u0432\u043e\u043b\u044e\u0446\u0438\u044f \u0438 \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433 \u0411\u0414<\/h2>\n<p>\nTak\u017ee jsme se dostali k tomu, \u017ee m\u00e1me <b>pro ka\u017ed\u00fd den svou sekci<\/b> s daty. Vlastn\u011b, <code>CHECK (dt = '2018-10-12'::date)<\/code> \u2014 to je kl\u00ed\u010d sekcionace a podm\u00ednka pro za\u0159azen\u00ed z\u00e1znamu do konkr\u00e9tn\u00ed sekce.<\/p>\n<p>Jeliko\u017e v\u0161echny reporty v na\u0161em servisu jsou budov\u00e1ny podle konkr\u00e9tn\u00edho data, indexy je\u0161t\u011b z \"ne-sekcionovan\u00fdch \u010das\u016f\" byly v\u0161echny typu <i>(Server, <b>Datum<\/b>, \u0160ablona pl\u00e1nu)<\/i>, <i>(Server, <b>Datum<\/b>, Uzlov\u00fd pl\u00e1n)<\/i>, <i>(<b>Datum<\/b>, T\u0159\u00edda chyby, Server)<\/i>,\u2026<\/p>\n<p>Ale nyn\u00ed v ka\u017ed\u00e9 sekci \u017eij\u00ed <u>sv\u00e9 instance<\/u> ka\u017ed\u00e9ho takov\u00e9ho indexu\u2026 A v r\u00e1mci ka\u017ed\u00e9 sekce <u>datum je konstantou<\/u>\u2026 Ukazuje se, \u017ee nyn\u00ed do ka\u017ed\u00e9ho takov\u00e9ho indexu <b>lacin\u011b vkl\u00e1d\u00e1me konstantu<\/b> jako jedno z pol\u00ed, co\u017e zvy\u0161uje jeho objem i \u010das hled\u00e1n\u00ed, ale nep\u0159in\u00e1\u0161\u00ed \u017e\u00e1dn\u00fd v\u00fdsledek. Sami jsme si nastra\u017eili pasti, ups\u2026<\/p>\n<p><img decoding=\"async\" alt=\"P\u00ed\u0161eme v PostgreSQL na subsv\u011bteln\u00e9m: 1 host, 1 den, 1TB\" src=\"\/wp-content\/uploads\/2020\/04\/c7644644b960c568c4adaeec57cfef2d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nSm\u011br optimalizace je z\u0159ejm\u00fd \u2014 prost\u011b <b>odstra\u0148ujeme pole s datem ze v\u0161ech index\u016f<\/b> u sekcionovan\u00fdch tabulek. P\u0159i na\u0161ich objemech zisk je kolem <b>1TB\/t\u00fdden<\/b>!<\/p>\n<p>A nyn\u00ed si pov\u0161imn\u011bme, \u017ee tento terabajt je\u0161t\u011b musel b\u00fdt n\u011bjak zaps\u00e1n. To znamen\u00e1, \u017ee nyn\u00ed mus\u00edme <b>ukl\u00e1dat m\u00e9n\u011b na disk<\/b>! Na tomto obr\u00e1zku je dob\u0159e vid\u011bt dosa\u017een\u00fd efekt z proveden\u00e9ho \u00faklidu, kter\u00e9mu jsme v\u011bnovali t\u00fdden:<\/p>\n<p><img decoding=\"async\" alt=\"P\u00ed\u0161eme v PostgreSQL na subsv\u011bteln\u00e9m: 1 host, 1 den, 1TB\" src=\"\/wp-content\/uploads\/2020\/04\/f45e3b26337074a07751ea28961009bf.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>#3. \u00ab\u0420\u0430\u0437\u043c\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u00bb \u043f\u0438\u043a\u043e\u0432\u0443\u044e \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0443<\/h2>\n<p>\nJedn\u00edm z velk\u00fdch probl\u00e9m\u016f zat\u00ed\u017een\u00fdch syst\u00e9m\u016f je <b>nadm\u011brn\u00e1 synchronizace<\/b> n\u011bjak\u00fdch operac\u00ed, kter\u00e9 to nevy\u017eaduj\u00ed. N\u011bkdy \"proto\u017ee si toho nev\u0161imli\", n\u011bkdy \"bylo to jednodu\u0161\u0161\u00ed\", ale d\u0159\u00edve \u010di pozd\u011bji se toho mus\u00ed zbavit.<\/p>\n<p>P\u0159ibli\u017eujeme p\u0159edchoz\u00ed obr\u00e1zek \u2014 a vid\u00edme, \u017ee disk u n\u00e1s <b>\"proud\u00ed\" zat\u00ed\u017een\u00ed s dvojn\u00e1sobnou amplitudou<\/b> mezi sousedn\u00edmi m\u011b\u0159en\u00edmi, co\u017e zjevn\u011b \"statisticky\" nem\u00e1 b\u00fdt p\u0159i takov\u00e9m po\u010dtu operac\u00ed:<\/p>\n<p><img decoding=\"async\" alt=\"P\u00ed\u0161eme v PostgreSQL na subsv\u011bteln\u00e9m: 1 host, 1 den, 1TB\" src=\"\/wp-content\/uploads\/2020\/04\/ac3f19213cba0f111864c6dbf9a73912.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDos\u00e1hnout toho je dost snadn\u00e9. Na monitorov\u00e1n\u00ed jsme m\u011bli ji\u017e <b>t\u00e9m\u011b\u0159 1000 server\u016f<\/b>, ka\u017ed\u00fd zpracov\u00e1v\u00e1n jednotliv\u00fdm logick\u00fdm proudem, a ka\u017ed\u00fd proud odes\u00edl\u00e1 nahromad\u011bn\u00e9 informace do datab\u00e1ze s ur\u010ditou peri\u00f3dou, p\u0159ibli\u017en\u011b takto:<\/p>\n<pre><code class=\"javascript\">setInterval(sendToDB, interval)<\/code><\/pre>\n<p>\nProbl\u00e9m spo\u010d\u00edv\u00e1 v tom, \u017ee <b>v\u0161echny proudy startuj\u00ed zhruba ve stejnou dobu<\/b>, tak\u017ee momenty odesl\u00e1n\u00ed se t\u00e9m\u011b\u0159 v\u017edy shoduj\u00ed \"do bodu\". Ups \u010d. 2\u2026<\/p>\n<p>Na\u0161t\u011bst\u00ed se to d\u00e1 celkem snadno opravit, <b>p\u0159id\u00e1n\u00edm \"n\u00e1hodn\u00e9ho\" rozpt\u00fdlen\u00ed<\/b> v \u010dase:<\/p>\n<pre><code class=\"javascript\">setInterval(sendToDB, interval * (1 + 0.1 * (Math.random() - 0.5)))<\/code><\/pre>\n<p><\/p>\n<h2>#4. \u041a\u044d\u0448\u0438\u0440\u0443\u0435\u043c, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u043c\u043e\u0436\u043d\u043e<\/h2>\n<p>\nT\u0159et\u00ed tradi\u010dn\u00ed probl\u00e9m highloadu \u2014 <b>absence cache<\/b> tam, kde by m\u011bl b\u00fdt. <i>mohl<\/i> b\u00fdt.<\/p>\n<p>Nap\u0159\u00edklad jsme umo\u017enili anal\u00fdzu podle uzl\u016f pl\u00e1nu (v\u0161echny tyto <code>Seq Scan on users<\/code>), ale hned si myslet, \u017ee jsou v\u011bt\u0161inou stejn\u00e9 \u2014 zapomn\u011bli.<\/p>\n<p>Ne, samoz\u0159ejm\u011b, do datab\u00e1ze se nic znovu nep\u00ed\u0161e, to od\u0159\u00edzne spou\u0161t\u011b\u010d s <code>INSERT ... ON CONFLICT DO NOTHING<\/code>. Ale p\u0159esto tato data doraz\u00ed do datab\u00e1ze, a je\u0161t\u011b je pot\u0159eba <b>nav\u00edc \u010dten\u00ed pro kontrolu konfliktu<\/b> prov\u00e1d\u011bt. Ups \u010d. 3\u2026<\/p>\n<p>Rozd\u00edl v po\u010dtu z\u00e1znam\u016f odes\u00edlan\u00fdch do datab\u00e1ze p\u0159ed\/po zapnut\u00ed cache \u2014 je z\u0159ejm\u00fd:<\/p>\n<p><img decoding=\"async\" alt=\"P\u00ed\u0161eme v PostgreSQL na subsv\u011bteln\u00e9m: 1 host, 1 den, 1TB\" src=\"\/wp-content\/uploads\/2020\/04\/37fa7e64a674f03a79f2765a79ec8138.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nA to je \u2014 souvisej\u00edc\u00ed pokles z\u00e1t\u011b\u017ee na \u00falo\u017ei\u0161t\u011b:<\/p>\n<p><img decoding=\"async\" alt=\"P\u00ed\u0161eme v PostgreSQL na subsv\u011bteln\u00e9m: 1 host, 1 den, 1TB\" src=\"\/wp-content\/uploads\/2020\/04\/b2c563b4b41755211e77768d80f8702f.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Celkem<\/h2>\n<p>\n\u201eTerabajt za den\u201c zn\u00ed stra\u0161ideln\u011b. Pokud d\u011bl\u00e1te v\u0161e spr\u00e1vn\u011b, je to jen <b>2^40 byt\u016f \/ 86400 sekund = ~12.5MB\/s<\/b>, co\u017e zvl\u00e1dly i b\u011b\u017en\u00e9 IDE disky. \ud83d\ude42<\/p>\n<p>A pokud to vezmete v\u00e1\u017en\u011b, i p\u0159i desetin\u00e1sobn\u00e9m \u201ep\u0159et\u00ed\u017een\u00ed\u201c z\u00e1t\u011b\u017ee b\u011bhem dne se bez probl\u00e9m\u016f vejdete do mo\u017enost\u00ed modern\u00edch SSD.<\/p>\n<p><img decoding=\"async\" alt=\"P\u00ed\u0161eme v PostgreSQL na subsv\u011bteln\u00e9m: 1 host, 1 den, 1TB\" src=\"\/wp-content\/uploads\/2020\/04\/6f3f8d4636ba50f3d5401bf4e456757f.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>Zdroj: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/497008\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041d\u0435\u0434\u0430\u0432\u043d\u043e \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u043b, \u043a\u0430\u043a \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0442\u0438\u043f\u043e\u0432\u044b\u0445 \u0440\u0435\u0446\u0435\u043f\u0442\u043e\u0432 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c SQL-\u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u00ab\u043d\u0430 \u0447\u0442\u0435\u043d\u0438\u0435\u00bb \u0438\u0437 PostgreSQL-\u0431\u0430\u0437\u044b. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u0436\u0435 \u0440\u0435\u0447\u044c \u043f\u043e\u0439\u0434\u0435\u0442 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u044c \u0432 \u0411\u0414 \u0431\u0435\u0437 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u0430\u043a\u0438\u0445-\u043b\u0438\u0431\u043e \u00ab\u043a\u0440\u0443\u0442\u0438\u043b\u043e\u043a\u00bb \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0435 \u2014 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u0432 \u043f\u043e\u0442\u043e\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445. #1. \u0421\u0435\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0421\u0442\u0430\u0442\u044c\u044f \u043f\u0440\u043e \u0442\u043e, \u043a\u0430\u043a \u0438 \u0437\u0430\u0447\u0435\u043c \u0441\u0442\u043e\u0438\u0442 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u043f\u0440\u0438\u043a\u043b\u0430\u0434\u043d\u043e\u0435 \u0441\u0435\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u00ab\u0432 \u0442\u0435\u043e\u0440\u0438\u0438\u00bb [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":79029,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-79028","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041d\u0435\u0434\u0430\u0432\u043d\u043e \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u043b, \u043a\u0430\u043a \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0442\u0438\u043f\u043e\u0432\u044b\u0445 \u0440\u0435\u0446\u0435\u043f\u0442\u043e\u0432 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c SQL-\u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u00ab\u043d\u0430 \u0447\u0442\u0435\u043d\u0438\u0435\u00bb \u0438\u0437.\" \/>\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\/cs\/blog\/administrirovanie\/pishem-v-postgresql-na-subsvetovoj-1-host-1-day-1tb\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"cs_CZ\" \/>\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\u041f\u0438\u0448\u0435\u043c \u0432 PostgreSQL \u043d\u0430 \u0441\u0443\u0431\u0441\u0432\u0435\u0442\u043e\u0432\u043e\u0439: 1 host, 1 day, 1TB | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041d\u0435\u0434\u0430\u0432\u043d\u043e \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u043b, \u043a\u0430\u043a \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0442\u0438\u043f\u043e\u0432\u044b\u0445 \u0440\u0435\u0446\u0435\u043f\u0442\u043e\u0432 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c SQL-\u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u00ab\u043d\u0430 \u0447\u0442\u0435\u043d\u0438\u0435\u00bb \u0438\u0437.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/cs\/blog\/administrirovanie\/pishem-v-postgresql-na-subsvetovoj-1-host-1-day-1tb\" \/>\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:19+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-04-23T17:43:19+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\udd47P\u00ed\u0161eme v PostgreSQL na subsv\u011bteln\u00e9m: 1 host, 1 den, 1TB | ProHoster","description":"Ned\u00e1vno jsem vysv\u011btloval, jak pomoc\u00ed standardn\u00edch recept\u016f zv\u00fd\u0161it v\u00fdkon SQL dotaz\u016f \u201ena \u010dten\u00ed\u201c z.","canonical_url":"https:\/\/prohoster.info\/cs\/blog\/administrirovanie\/pishem-v-postgresql-na-subsvetovoj-1-host-1-day-1tb","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"cs_CZ","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\u041f\u0438\u0448\u0435\u043c \u0432 PostgreSQL \u043d\u0430 \u0441\u0443\u0431\u0441\u0432\u0435\u0442\u043e\u0432\u043e\u0439: 1 host, 1 day, 1TB | ProHoster","og:description":"\u041d\u0435\u0434\u0430\u0432\u043d\u043e \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u043b, \u043a\u0430\u043a \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0442\u0438\u043f\u043e\u0432\u044b\u0445 \u0440\u0435\u0446\u0435\u043f\u0442\u043e\u0432 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c SQL-\u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u00ab\u043d\u0430 \u0447\u0442\u0435\u043d\u0438\u0435\u00bb \u0438\u0437.","og:url":"https:\/\/prohoster.info\/cs\/blog\/administrirovanie\/pishem-v-postgresql-na-subsvetovoj-1-host-1-day-1tb","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:19+00:00","article:modified_time":"2020-04-23T17:43:19+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"79028","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:34","updated":"2022-10-01 20:30:41","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts\/79028","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/comments?post=79028"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts\/79028\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/media\/79029"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/media?parent=79028"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/categories?post=79028"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/tags?post=79028"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}