{"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\/ro\/blog\/administrirovanie\/pishem-v-postgresql-na-subsvetovoj-1-host-1-day-1tb","title":{"rendered":"Scriem \u00een PostgreSQL la subluminal: 1 gazd\u0103, 1 zi, 1TB","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Recent am vorbit despre cum, cu ajutorul unor re\u021bete standard <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/tensor\/blog\/492694\/\">pute\u021bi cre\u0219te performan\u021ba interog\u0103rilor SQL \u201ede citire\u201d<\/a><\/noindex> din baza de date PostgreSQL. Ast\u0103zi, vom discuta despre cum <b>putem face mai eficient scrierea<\/b> \u00een Baz\u0103 de Date f\u0103r\u0103 a folosi vreun \u201econtrol\u201d \u00een configura\u021bie \u2014 doar organiz\u00e2nd corespunz\u0103tor fluxurile de date.<\/p>\n<p><img decoding=\"async\" alt=\"Scriem \u00een PostgreSQL la subluminal: 1 gazd\u0103, 1 zi, 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>\nArticol despre cum \u0219i de ce ar trebui s\u0103 organiz\u0103m <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/483170\/\">parti\u021bionarea aplica\u021biilor \u201e\u00een teorie\u201d<\/a><\/noindex> a fost deja scris, aici vom vorbi despre practica aplic\u0103rii unor abord\u0103ri \u00een cadrul serviciului nostru <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/487380\/\">de monitorizare a sute de servere PostgreSQL<\/a><\/noindex>.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h4>\u201eFaptele din zilele trecutului\u2026\u201c<\/h4>\n<p>\nLa \u00eenceput, ca orice MVP, proiectul nostru a \u00eenceput cu o sarcin\u0103 destul de mic\u0103 \u2014 monitorizarea se efectua doar pentru c\u00e2teva zeci de cele mai critice servere, toate tabelele fiind relativ compacte... Dar timpul a trecut, gazdelor monitorizate devenind din ce \u00een ce mai multe, \u0219i \u00eencerc\u00e2nd din nou s\u0103 facem ceva cu una dintre <b>tabelele de 1.5TB<\/b>, ne-am dat seama c\u0103 se poate tr\u0103i a\u0219a, dar este extrem de incomod.<\/p>\n<p>Vremurile erau aproape legendare, erau relevante diverse variante PostgreSQL 9.x, a\u0219a c\u0103 toat\u0103 parti\u021bionarea a trebuit s\u0103 fie realizat\u0103 \u201emanual\u201d \u2014 prin <b>mo\u0219tenirea tabelelor \u0219i declan\u0219atoarele<\/b> routingului cu dinamic <code>EXECUTE<\/code>.<\/p>\n<p><img decoding=\"async\" alt=\"Scriem \u00een PostgreSQL la subluminal: 1 gazd\u0103, 1 zi, 1TB\" src=\"\/wp-content\/uploads\/2020\/04\/a480e75ccec73080aa2d0be1435d2a2e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nSolu\u021bia rezultat\u0103 s-a dovedit destul de universal\u0103, astfel \u00eenc\u00e2t s\u0103 poat\u0103 fi transformat\u0103 pentru toate tabelele:<\/p>\n<ul>\n<li>A fost declarat\u0103 o tabel\u0103 \u201eheader\u201d goal\u0103, pe care erau descrise toate <b>indiciile \u0219i declan\u0219atoarele necesare<\/b>.<\/li>\n<li>Scrierea din perspectiva clientului se realiza \u00een tabelul \u201er\u0103d\u0103cin\u0103\u201d, iar \u00een interior, cu ajutorul <b>declan\u0219atorului de routing<\/b> <code>BEFORE INSERT<\/code> \u00eenregistrarea a fost \u201efizic\u201c inserat\u0103 \u00een sec\u021biunea necesar\u0103. Dac\u0103 aceasta nu exista deja \u2014 am prins excep\u021bia \u0219i\u2026<\/li>\n<li>\u2026 cu ajutorul <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/492464\/\"><code>CREATE TABLE ... (LIKE ... INCLUDING ...)<\/code><\/a><\/noindex> conform \u0219ablonului tabelei p\u0103rinte se crea <b>o sec\u021biune cu o restric\u021bie pe data dorit\u0103<\/b>, astfel \u00eenc\u00e2t la extragerea datelor citirea s\u0103 se efectueze doar \u00een ea.<\/li>\n<\/ul>\n<p><\/p>\n<h4>PG10: prima \u00eencercare<\/h4>\n<p>\nDar parti\u021bionarea prin mo\u0219tenire nu a fost istoric foarte adaptat\u0103 pentru a lucra cu un flux activ de scriere sau cu un num\u0103r mare de sec\u021biuni descendente. De exemplu, putem aminti c\u0103 algoritmul de selec\u021bie a sec\u021biunii dorite avea <b>complexitate p\u0103tratic\u0103<\/b>, ceea ce, \u00een cazul a 100+ sec\u021biuni, func\u021bioneaz\u0103, \u00een\u021belege\u021bi cum...<\/p>\n<p>\u00cen PG10, aceast\u0103 situa\u021bie a fost \u00eembun\u0103t\u0103\u021bit\u0103 semnificativ, implement\u00e2nd suportul <noindex><a rel=\"nofollow\" href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/10\/ddl-partitioning\">pentru sec\u021bionarea nativ\u0103<\/a><\/noindex>. A\u0219adar, am \u00eencercat imediat s\u0103 o aplic\u0103m dup\u0103 migrarea stoc\u0103rii, dar...<\/p>\n<p>Dup\u0103 cum s-a dovedit \u00een urma consult\u0103rii manualului, o mas\u0103 sec\u021bionat\u0103 nativ \u00een aceast\u0103 versiune:<\/p>\n<ul>\n<li>nu suport\u0103 descrierea indicilor<\/li>\n<li>nu accept\u0103 trigger-e<\/li>\n<li>nu poate fi ea \u00eens\u0103\u0219i un \u00abdescendent\u00bb al nim\u0103nui<\/li>\n<li>nu suport\u0103 <code>INSERT ... ON CONFLICT<\/code><\/li>\n<li>nu genereaz\u0103 automat sec\u021biuni<\/li>\n<\/ul>\n<p>\nDup\u0103 ce ne-am lovit serios de aceast\u0103 problem\u0103, am realizat c\u0103 nu putem evita modificarea aplica\u021biei \u0219i am am\u00e2nat cercet\u0103rile ulterioare timp de \u0219ase luni.<\/p>\n<h4>PG10: a doua \u0219ans\u0103<\/h4>\n<p>\nA\u0219adar, am \u00eenceput s\u0103 rezolv\u0103m problemele ap\u0103rute pe r\u00e2nd:<\/p>\n<ol>\n<li>Fiindc\u0103 trigger-ele \u0219i <code>ON CONFLICT<\/code> ne-au fost necesare \u00een unele cazuri, am creat o <b>mas\u0103 proxy intermediar\u0103<\/b>.<\/li>\n<li><b>Am eliminat \u00abrutarea\u00bb<\/b> \u00een trigger-e \u2014 adic\u0103 <code>EXECUTE<\/code>.<\/li>\n<li>Am separat <b>masa-templu cu to\u021bi indicii<\/b>, astfel \u00eenc\u00e2t s\u0103 nu fie nici m\u0103car prezenta\u021bi \u00een masa proxy.<\/li>\n<\/ol>\n<p>\n<img decoding=\"async\" alt=\"Scriem \u00een PostgreSQL la subluminal: 1 gazd\u0103, 1 zi, 1TB\" src=\"\/wp-content\/uploads\/2020\/04\/db3118798357575568489f6b575373b6.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n\u00cen cele din urm\u0103, dup\u0103 toate acestea, am sec\u021bionat nativ masa principal\u0103. Crearea unei noi sec\u021biuni a r\u0103mas, totu\u0219i, \u00een responsabilitatea aplica\u021biei.<\/p>\n<h4>\u00abCre\u0103m\u00bb dic\u021bionare<\/h4>\n<p>\nCa \u00een orice sistem analitic, am avut \u0219i noi <b>\u00abfapte\u00bb \u0219i \u00abdimensiuni\u00bb<\/b> (dic\u021bionare). \u00cen cazul nostru, acestea erau, de exemplu, <noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/5XKbFb-l5Do?t=2487\">corpul \u00abtemplului\u00bb<\/a><\/noindex> cererilor lente sau textul cererii \u00eens\u0103\u0219i.<\/p>\n<p>\u00abFaptele\u00bb noastre erau deja sec\u021bionate pe zile de mult timp, a\u0219a c\u0103 am \u0219ters cu u\u0219urin\u021b\u0103 sec\u021biunile \u00eenvechite, ele nu ne deranjau (deoarece erau doar jurnale!). \u00cens\u0103 cu dic\u021bionarele a fost o problem\u0103...<\/p>\n<p>Nu c\u0103 ar fi fost foarte multe, dar aproximativ <b>pentru 100 TB de \u00abfapte\u00bb, am ob\u021binut un dic\u021bionar de 2.5 TB.<\/b>Dintr-o astfel de mas\u0103, nu po\u021bi \u0219terge nimic cu u\u0219urin\u021b\u0103, nu po\u021bi s\u0103 o comprimi \u00een timp rezonabil, iar scrierea \u00een ea devenea treptat tot mai lent\u0103.<\/p>\n<p>Se pare c\u0103 este un dic\u021bionar... fiecare \u00eenregistrare ar trebui s\u0103 fie prezent\u0103 exact o dat\u0103... \u0219i asta este corect, dar!... Nu ne \u00eempiedic\u0103 nimeni s\u0103 avem <b>c\u00e2te un dic\u021bionar pentru fiecare zi<\/b>! Da, asta aduce o anumit\u0103 redundan\u021b\u0103, dar permite:<\/p>\n<ul>\n<li><b>s\u0103 scriem\/citim mai repede<\/b> datorit\u0103 dimensiunii mai mici a sec\u021biunii<\/li>\n<li><b>s\u0103 consum\u0103m mai pu\u021bin\u0103 memorie<\/b> datorit\u0103 lucrului cu indici mai compac\u021bi<\/li>\n<li><b>s\u0103 stoc\u0103m mai pu\u021bine date<\/b> datorit\u0103 posibilit\u0103\u021bii de a \u0219terge rapid \u00eenregistr\u0103rile \u00eenvechite,<\/li>\n<\/ul>\n<p>\nCa urmare a \u00eentregului complex de m\u0103suri <b>\u00eenc\u0103rcarea CPU-ului a sc\u0103zut cu aproximativ 30%, iar pe disc \u2014 cu aproximativ 50%<\/b>:<\/p>\n<p><img decoding=\"async\" alt=\"Scriem \u00een PostgreSQL la subluminal: 1 gazd\u0103, 1 zi, 1TB\" src=\"\/wp-content\/uploads\/2020\/04\/fd3a219a304dc46173a7eb435502fe02.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n\u00cen acela\u0219i timp, am continuat s\u0103 scriem \u00een baza de date exact acela\u0219i lucru, doar cu o \u00eenc\u0103rcare mai mic\u0103.<\/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>\nA\u0219adar, ne-am oprit la faptul c\u0103 avem <b>pentru fiecare zi o sec\u021biune<\/b> cu date. De fapt, <code>CHECK (dt = '2018-10-12'::date)<\/code> \u2014 acesta este cheia sec\u021bion\u0103rii \u0219i condi\u021bia de includere a \u00eenregistr\u0103rii \u00een sec\u021biunea specific\u0103.<\/p>\n<p>Deoarece toate raportele din serviciul nostru sunt construite pe baza unei date specifice, indec\u0219ii din vremurile \"nemodificate\" pentru acestea au fost to\u021bi de tipul <i>(Server, <b>Data<\/b>, \u0218ablon plan)<\/i>, <i>(Server, <b>Data<\/b>, Nod plan)<\/i>, <i>(<b>Data<\/b>, Clasa de eroare, Server)<\/i>,\u2026<\/p>\n<p>Dar acum, \u00een fiecare sec\u021biune tr\u0103iesc <u>exemplare proprii<\/u> fiec\u0103rui astfel de index\u2026 \u0218i \u00een cadrul fiec\u0103rei sec\u021biuni <u>data este o constant\u0103<\/u>\u2026 Rezultatul este c\u0103 acum \u00een fiecare astfel de index <b>scriem pur \u0219i simplu constant\u0103<\/b> ca unul dintre c\u00e2mpuri, ceea ce face ca volumul s\u0103u \u0219i timpul de c\u0103utare s\u0103 creasc\u0103, dar nu aduce niciun rezultat. Ne-am l\u0103sat singuri capcane, ups\u2026<\/p>\n<p><img decoding=\"async\" alt=\"Scriem \u00een PostgreSQL la subluminal: 1 gazd\u0103, 1 zi, 1TB\" src=\"\/wp-content\/uploads\/2020\/04\/c7644644b960c568c4adaeec57cfef2d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nDirec\u021bia de optimizare este evident\u0103 \u2014 pur \u0219i simplu <b>\u00eendep\u0103rt\u0103m c\u00e2mpul cu data din toate indec\u0219ii<\/b> de pe tabelele sec\u021bionate. La volumele noastre, c\u00e2\u0219tigul este de aproximativ <b>1TB\/s\u0103pt\u0103m\u00e2n\u0103<\/b>!<\/p>\n<p>\u0218i acum s\u0103 observ\u0103m c\u0103 acest terabyte trebuia, cumva, \u0219i \u00eenregistrat. Cu alte cuvinte, trebuie s\u0103 <b>\u00eenc\u0103rc\u0103m discul mai pu\u021bin<\/b>! \u00cen aceast\u0103 imagine se poate vedea bine efectul ob\u021binut din cur\u0103\u021benia realizat\u0103, c\u0103reia i-am dedicat o s\u0103pt\u0103m\u00e2n\u0103:<\/p>\n<p><img decoding=\"async\" alt=\"Scriem \u00een PostgreSQL la subluminal: 1 gazd\u0103, 1 zi, 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>\nUna dintre marile probleme ale sistemelor supra\u00eenc\u0103rcate este <b>sincronizarea excesiv\u0103<\/b> a unor opera\u021biuni care nu o necesit\u0103. Uneori \u201epentru c\u0103 nu s-a observat\u201d, alteori \u201eera mai simplu\u201d, dar mai devreme sau mai t\u00e2rziu trebuie s\u0103 sc\u0103p\u0103m de ea.<\/p>\n<p>Apropiem imaginea anterioar\u0103 \u2014 \u0219i vedem c\u0103 discul nostru <b>\u201e\u00eencarc\u0103\u201d cu o amplitudine de dou\u0103 ori mai mare<\/b> \u00eentre m\u0103sur\u0103tori adiacente, ceea ce \u201estatistic\u201d nu ar trebui s\u0103 fie av\u00e2nd \u00een vedere num\u0103rul de opera\u021biuni:<\/p>\n<p><img decoding=\"async\" alt=\"Scriem \u00een PostgreSQL la subluminal: 1 gazd\u0103, 1 zi, 1TB\" src=\"\/wp-content\/uploads\/2020\/04\/ac3f19213cba0f111864c6dbf9a73912.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEste destul de simplu s\u0103 ob\u021bii acest lucru. La monitorizare am avut deja <b>aproape 1000 de servere<\/b>, fiecare fiind procesat de un flux logic separat, iar fiecare flux trimite informa\u021bia acumulat\u0103 pentru a fi trimis\u0103 \u00een baz\u0103 cu o periodicitate specific\u0103, cam a\u0219a:<\/p>\n<pre><code class=\"javascript\">setInterval(sendToDB, interval)<\/code><\/pre>\n<p>\nProblema se afl\u0103 exact \u00een faptul c\u0103 <b>toate fluxurile pornesc cam \u00een acela\u0219i timp<\/b>, de aceea momentele de trimitere coincid aproape \u00eentotdeauna \u201epalpabil\u201d. Ups nr. 2\u2026<\/p>\n<p>Din fericire, acest lucru se corecteaz\u0103 destul de u\u0219or, <b>ad\u0103ug\u00e2nd o \u201edispersie\u201d aleatorie<\/b> \u00een timp:<\/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>\nA treia problem\u0103 tradi\u021bional\u0103 highload \u2014 <b>lipsa cache-ului<\/b> acolo unde el <i>ar putea<\/i> fi.<\/p>\n<p>De exemplu, am implementat posibilitatea de analiz\u0103 pe baza nodurilor planului (toate acestea <code>Seq Scan pe utilizatori<\/code>), dar ne-am g\u00e2ndit imediat c\u0103 ele, \u00een mas\u0103, sunt identice \u2014 am uitat.<\/p>\n<p>Nu, desigur, \u00een baza nu se scrie nimic \u00eenc\u0103 o dat\u0103, asta blocheaz\u0103 trigger-ul cu <code>INSERT ... ON CONFLICT DO NOTHING<\/code>. Dar p\u00e2n\u0103 la baza de date, aceste date ajung totu\u0219i, iar citirea suplimentar\u0103 pentru verificarea conflictelor <b>trebuie s\u0103 o facem. Ups \u21163\u2026<\/b> Diferen\u021ba \u00een num\u0103rul de \u00eenregistr\u0103ri trimise \u00een baz\u0103 \u00eenainte\/dup\u0103 activarea caching-ului \u2014 este evident\u0103:<\/p>\n<p>\u0218i aceasta \u2014 o c\u0103dere asociat\u0103 a \u00eenc\u0103rc\u0103rii pe stocare:<\/p>\n<p><img decoding=\"async\" alt=\"Scriem \u00een PostgreSQL la subluminal: 1 gazd\u0103, 1 zi, 1TB\" src=\"\/wp-content\/uploads\/2020\/04\/37fa7e64a674f03a79f2765a79ec8138.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u00abTerabyte-pe-zi\u00bb doar pare \u00eenfrico\u0219\u0103tor. Dac\u0103 face\u021bi totul corect, atunci este doar<\/p>\n<p><img decoding=\"async\" alt=\"Scriem \u00een PostgreSQL la subluminal: 1 gazd\u0103, 1 zi, 1TB\" src=\"\/wp-content\/uploads\/2020\/04\/b2c563b4b41755211e77768d80f8702f.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>\u00cen concluzie<\/h2>\n<p>\n2^40 bytes \/ 86400 sec = ~12.5MB\/s <b>, ceea ce au putut chiar \u0219i unit\u0103\u021bile SATA de birou. \ud83d\ude42<\/b>Dar, ca s\u0103 fiu serios, chiar \u0219i cu un \u201edezechilibru\u201d de zece ori al \u00eenc\u0103rc\u0103rii pe parcursul zilei, pute\u021bi s\u0103 v\u0103 \u00eencadra\u021bi u\u0219or \u00een capacit\u0103\u021bile SSD-urilor moderne.<\/p>\n<p>Economisim ni\u0219te bani pe volume mari \u00een PostgreSQL<\/p>\n<p><img decoding=\"async\" alt=\"Scriem \u00een PostgreSQL la subluminal: 1 gazd\u0103, 1 zi, 1TB\" src=\"\/wp-content\/uploads\/2020\/04\/6f3f8d4636ba50f3d5401bf4e456757f.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>Sursa: <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.2.1 - 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\/ro\/blog\/administrirovanie\/pishem-v-postgresql-na-subsvetovoj-1-host-1-day-1tb\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"ro_RO\" \/>\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\/ro\/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\udd47Scriem \u00een PostgreSQL la subluminal: 1 gazd\u0103, 1 zi, 1TB | ProHoster","description":"\ud83e\udd47Scriem \u00een PostgreSQL la subluminal: 1 host, 1 zi, 1TB | ProHoster","canonical_url":"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/pishem-v-postgresql-na-subsvetovoj-1-host-1-day-1tb","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"ro_RO","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\/ro\/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\/ro\/wp-json\/wp\/v2\/posts\/79028","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/comments?post=79028"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts\/79028\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media\/79029"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media?parent=79028"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/categories?post=79028"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/tags?post=79028"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}