{"id":39169,"date":"2019-10-31T22:28:14","date_gmt":"2019-10-31T19:28:14","guid":{"rendered":"https:\/\/prohoster.info\/blog\/postgresql-i-nastrojki-soglasovannosti-zapisi-dlya-kazhdogo-konkretnogo-soedineniya\/"},"modified":"2019-10-31T22:28:14","modified_gmt":"2019-10-31T19:28:14","slug":"postgresql-i-nastrojki-soglasovannosti-zapisi-dlya-kazhdogo-konkretnogo-soedineniya","status":"publish","type":"post","link":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/postgresql-i-nastrojki-soglasovannosti-zapisi-dlya-kazhdogo-konkretnogo-soedineniya","title":{"rendered":"PostgreSQL ja s\u00f5lmede salvestamise sobivuse seade iga konkreetse \u00fchenduse jaoks","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><em>Artikli t\u00f5lge on ette valmistatud spetsiaalselt kursuse \u00fcli\u00f5pilastele <noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/jCX0\/\">\u201eAndmebaasid\u201d<\/a><\/noindex>. Kas on huvi selles valdkonnas areneda? Kutsume teid <noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/jCX0\/\">Avatud Uste P\u00e4evale<\/a><\/noindex>, kus r\u00e4\u00e4gime l\u00e4hemalt programmist, veebivormingu erip\u00e4radest, oskustest ja karj\u00e4\u00e4riv\u00f5imalustest, mis ootavad l\u00f5petajaid p\u00e4rast \u00f5ppimist.<\/em><\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL ja s\u00f5lmede salvestamise sobivuse seade iga konkreetse \u00fchenduse jaoks\" src=\"\/wp-content\/uploads\/2019\/10\/e69e30ba059af157f021c9cb33a59f51.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>PostgreSQL ja s\u00f5lmede salvestamise sobivuse seade iga konkreetse \u00fchenduse jaoks<br \/>\nCompose'is puutume me kokku paljude andmebaasidega, just see annab meile v\u00f5imaluse tutvuda nende funktsionaalsuse ja puudustega. Aja jooksul, kui \u00f5pime armastama uute andmebaaside funktsionaalseid omadusi, hakkame m\u00f5nikord m\u00f5tlema, kui tore oleks, kui sarnased funktsioonid oleksid olemas ka vanemates t\u00f6\u00f6riistades, millega oleme juba pikka aega t\u00f6\u00f6tanud. \u00dcks uus omadus, mida soovisin PostgreSQL-is n\u00e4ha, oli konfigureeritav salvestamise sobivus \u00fchenduse kohta kogu klastris. Ja nagu selgus, on see meil juba olemas, ja t\u00e4na tahame jagada teavet selle kohta, kuidas te seda kasutada saate.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p><\/p>\n<h1 id=\"zachem-mne-eto\">Milleks mul seda vaja on?<\/h1>\n<p><\/p>\n<p>Kuidas klaster k\u00e4ituma peab, s\u00f5ltub teie rakendusest. V\u00f5tame n\u00e4iteks arveldamise rakenduse. Teile on vajalik absoluutne sobivus klastris, seega peate aktiveerima s\u00fcnkroonsed committid, et teie andmebaas ootaks, kuni k\u00f5ik muudatused on tehtud. Kuid kui teie rakendus on kiiresti arenev sotsiaalne v\u00f5rgustik, eelistaksite kindlasti absoluutse sobivuse asemel kiiret reageerimist. Selle saavutamiseks v\u00f5ite kasutada oma klastris as\u00fcnkroonseid committe.<\/p>\n<p><\/p>\n<h2 id=\"znakomtes-kompromiss\">Tutvuge kompromissiga<\/h2>\n<p><\/p>\n<p>Teil tuleb leppida kokku andmete sobivuse ja j\u00f5udluse vahel. PostgreSQL liigub sobivuse suunas, kuna vaikeseade on selles osas ennustatav ja ilma ootamatute \u00fcllatusteta. N\u00fc\u00fcd alustame kompromisside tundma\u00f5ppimist.<\/p>\n<p><\/p>\n<h3 id=\"kompromiss-1-proizvoditelnost\">Kompromiss 1: J\u00f5udlus<\/h3>\n<p><\/p>\n<p>Kui PostgreSQL klastril pole n\u00f5udeid j\u00e4rjepidevuse osas, v\u00f5ib see t\u00e4iesti t\u00f6\u00f6tada as\u00fcnkroonselt. Kirje kantakse klastriliidrisse ja selle koopiateni saadetakse v\u00e4rskendused m\u00f5ne millisekundi jooksul. Kui PostgreSQL klastrile on vajalik j\u00e4rjepidevus, peab see t\u00f6\u00f6tama s\u00fcnkroonselt. Kirje kantakse klastriliidrisse, mis saadab koopiatesse v\u00e4rskenduse ja ootab kinnitust, et iga\u00fcks on kirje teinud, enne kui saadab kliendile, kes algatas kirje, kinnituse selle eduka t\u00e4itmise kohta. Praktikas on nende l\u00e4henemiste vahe selles, et as\u00fcnkroonne meetod n\u00f5uab kahte v\u00f5rgu h\u00fcpet, s\u00fcnkroonne aga neli. <\/p>\n<p><\/p>\n<h3 id=\"kompromiss-2-soglasovannost\">Kompromiss 2: J\u00e4rjepidevus<\/h3>\n<p><\/p>\n<p>Tulemused, kui liider eba\u00f5nnestub, on m\u00f5lema meetodi puhul erinevad. Kui t\u00f6\u00f6 toimub as\u00fcnkroonselt, siis sellise vea korral ei ole k\u00f5ik kirjed koopiates kinnitatud. Kui palju tuleb kaotada? See s\u00f5ltub rakendusest ja replikatsiooni efektiivsusest. Compose'i replikatsioon takistab koopial liidriks saamist, kui selle sisu on 1 MB v\u00f5rra v\u00e4iksem kui liidril, mis t\u00e4hendab, et potentsiaalselt v\u00f5ib as\u00fcnkroonse t\u00f6\u00f6 korral kaotada kuni 1 MB kirjeid. <\/p>\n<p><\/p>\n<p>S\u00fcnkroonses re\u017eiimis seda ei juhtu. Kui liider eba\u00f5nnestub, uuendatakse k\u00f5iki koopiaid, kuna iga kirje, mis on liidris kinnitatud, peab olema kinnitatud ka koopiates. See ongi j\u00e4rjepidevus. <\/p>\n<p><\/p>\n<p>S\u00fcnkroonse k\u00e4itumise kasutamine on m\u00f5ttekas arveldamise rakenduses, kus j\u00e4rjepidevuse eelised on selgelt tasakaalus j\u00e4rjepidevuse ja j\u00f5udluse vahel. Sellise rakenduse jaoks on k\u00f5ige t\u00e4htsam kehtivad andmed. Krediteerides peavad nad olema \u00f5iged. Ja n\u00fc\u00fcd meenutage sotsiaalmeediat, kus peamine eesm\u00e4rk on hoida kasutaja t\u00e4helepanu, vastates p\u00e4ringutele v\u00f5imalikult kiiresti. Sellisel juhul on j\u00f5udlus, millel on v\u00e4hem v\u00f5rgu h\u00fcppeid ja l\u00fchemad kinnituste ootere\u017eiimid, prioriteediks. Siiski ei ole kompromiss j\u00f5udluse ja j\u00e4rjepidevuse vahel ainus, millele m\u00f5tlema peab.<\/p>\n<p><\/p>\n<h3 id=\"kompromiss-3-sboi\">Kompromiss 3: Vead<\/h3>\n<p><\/p>\n<p>On oluline m\u00f5ista, kuidas klaster rikete korral k\u00e4itub. Vaatleme olukorda, kus \u00fcks v\u00f5i rohkem replikaatidest eba\u00f5nnestub. Kui kinnitusprotsessid viiakse l\u00e4bi as\u00fcnkroonselt, j\u00e4tkab juht funktsioneerimist, see t\u00e4hendab, et ta v\u00f5tab vastu ja t\u00f6\u00f6tleb kirjeid, teadmata puuduvatest replikaatidest. Kui repliigid naasevad klastrisse, siis nad jooksevad juhti taga. S\u00fcnkroonse replikatsiooni puhul, kui repliigid ei vasta, ei j\u00e4\u00e4 juhtidel muud valikut kui oodata kinnitust, kuni replik tagasi klastrisse naaseb ja suudab kirjeid vastu v\u00f5tta ja kinnitada.<\/p>\n<p><\/p>\n<h2 id=\"po-odnomu-soedineniyu-na-tranzakciyu\">\u00dcks \u00fchendus \u00fche tehingu kohta?<\/h2>\n<p><\/p>\n<p>Igal rakendusel on vajalik eriline koosk\u00f5la ja j\u00f5udluse kombinatsioon. Kui see pole meie arveid tasumise rakendus, mida kujutame t\u00e4iesti koosk\u00f5lalise, v\u00f5i meie peaaegu eeterlik sotsiaalmeedia rakendus. K\u00f5igil teistel juhtudel on olukordi, kus teatud toimingud peavad olema s\u00fcnkroonsed ja teised as\u00fcnkroonsed. Te ei pruugi soovida, et s\u00fcsteem ootaks, kuni s\u00f5num, mis on chat\u2019i saadetud, on kinnitatud, kuid kui samas rakenduses toimub makse, siis tuleb oodata.<\/p>\n<p><\/p>\n<p>K\u00f5ik need otsused teeb loomulikult rakenduse arendaja. \u00d5iged otsused selle kohta, millal rakendada \u00fchte v\u00f5i teist l\u00e4henemist, aitavad klastrist maksimumi v\u00e4lja pigistada. Oluline on, et arendaja saaks SQL tasandil \u00fchenduste ja tehingute puhul nende vahel vahetada. <\/p>\n<p><\/p>\n<h2 id=\"obespechenie-kontrolya-na-praktike\">Kontrolli tagamine praktikas<\/h2>\n<p><\/p>\n<p>Vaikev\u00e4\u00e4rtusena tagab PostgreSQL koosk\u00f5la. Seda kontrollitakse serveri parameetri kaudu <code>synchronous_commit<\/code>. Vaikimisi on see seisundis <code>on<\/code>, kuid tal on veel kolm muud varianti: <code>local<\/code>, <code>remote_write<\/code> v\u00f5i <code>off<\/code>.<\/p>\n<p><\/p>\n<p>Seades parameetrit <code>off<\/code> k\u00fcsitakse t\u00e4nu s\u00fcnkroonsete kinnituste peatamisele ka kohalikus s\u00fcsteemis. Parameeter local m\u00e4\u00e4rab s\u00fcnkroonse re\u017eiimi kohaliku s\u00fcsteemi jaoks, kuid kirjed repliikidesse tehakse as\u00fcnkroonselt. <code>Remote_write<\/code> l\u00e4heb veel kaugemale: kirjed repliikidesse tehakse as\u00fcnkroonselt, kuid tagastatakse, kui replik on kirje vastu v\u00f5tnud, kuid ei ole seda kettale salvestanud.<\/p>\n<p><\/p>\n<p>Vaadates olemasolevaid valikuid, valime k\u00e4itumise ja meeles pidades, et <code>on<\/code> on s\u00fcnkroonsed kirjed, valime <code>local<\/code> as\u00fcnkroonsete kinnituste jaoks \u00fcle v\u00f5rgu, samal ajal kui j\u00e4tame kohalikud kinnitused s\u00fcnkroonseks.<\/p>\n<p><\/p>\n<p>N\u00fc\u00fcd r\u00e4\u00e4gime teile, kuidas seda hetkega seadistada, kuid kujutage ette, et oleme installinud <code>synchronous_commit<\/code> ja <code>local<\/code> serverile. Me k\u00fcsisime endalt, kas saab parameetrit <code>synchronous_commit<\/code> jooksvalt muuta, ja selgus, et mitte ainult saab, vaid selleks on lausa kaks viisi. Esimene on seada oma \u00fchenduse sessioon j\u00e4rgmiselt:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">SET SESSION synchronous_commit TO ON;  \n\/\/ Teie kirjutised tulevad siia<\/code><\/pre>\n<p><\/p>\n<p>K\u00f5ik j\u00e4rgnevad kirjutised sessioonis kinnitavad kirjutamisoperatsioonid replikatsioonide jaoks enne, kui nad tagastavad positiivse tulemuse seotud kliendile. Kui te muidugi ei muuda seadet <code>synchronous_commit<\/code> taas. Osade v\u00f5ib j\u00e4tta v\u00e4lja <code>SESSION<\/code> k\u00e4sklusest, kuna see on vaikimisi v\u00e4\u00e4rtuses.<\/p>\n<p><\/p>\n<p>Teine meetod on hea, kui soovite lihtsalt tagada, et saaksite \u00fche tehingu jaoks s\u00fcnkroonset koopiat. Paljudes \u201eNoSQL\u201c andmebaasides ei eksisteeri tehingute m\u00f5istet, kuid PostgreSQL-is see olemas. Sel juhul k\u00e4ivitate tehingu ja seej\u00e4rel seadistate <code>synchronous_commit<\/code> ja <code>on<\/code> enne tehingu kirjutamise t\u00e4itmist. <code>COMMIT<\/code> kinni peab tehingu, kasutades mis tahes parameetri v\u00e4\u00e4rtust, <code>synchronous_commit<\/code>, mis oli sel ajal seadistatud, kuigi parima tulemuse nimel on parem seada muutuja ette, et teised arendajad m\u00f5istaksid, et kirjutised ei ole as\u00fcnkroonilised.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">BEGIN;  \nSET LOCAL synchronous_commit TO ON;  \n\/\/ Teie kirjutised tulevad siia\nCOMMIT;  <\/code><\/pre>\n<p><\/p>\n<p>K\u00f5ik tehingute kinnitused kinnitatakse n\u00fc\u00fcd, nagu oleksid need kirjutatud replikatsioonides juba enne, kui andmebaas tagastab positiivse vastuse seotud kliendile.<\/p>\n<p><\/p>\n<h2 id=\"nastroyka-postgresql\">PostgreSQL seadistamine<\/h2>\n<p><\/p>\n<p>Seni oleme ette kujutanud PostgreSQL s\u00fcsteemi, millel on <code>synchronous_commit<\/code>, installitud <code>local<\/code>. Selle serveri poolel reaalsuseks tegemiseks peate seadma kaks serveri konfiguratsiooniparameetrit. Veel \u00fcks parameeter <code>synchronous_standby_names<\/code> hakkab kehtima, kui <code>synchronous_commit<\/code> on <code>on<\/code>. See m\u00e4\u00e4rab, millised replikad saavad s\u00fcnkroonset kinnitust, ja seame selle <code>*<\/code>, mis t\u00e4hendab, et k\u00f5ik replikad on lubatud. Need v\u00e4\u00e4rtused seadistatakse tavaliselt <noindex><a rel=\"nofollow\" href=\"http:\/\/www.postgresql.org\/docs\/9.4\/static\/config-setting.html#CONFIG-SETTING-CONFIGURATION-FILE\">konfiguratsioonifailis<\/a><\/noindex> lisades: <\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">synchronous_commit = local  \nsynchronous_standby_names='*'<\/code><\/pre>\n<p><\/p>\n<p>Seades parameetri <code>synchronous_commit<\/code> v\u00e4\u00e4rtuseks <code>local<\/code>, loome s\u00fcsteemi, kus kohalikud kettad j\u00e4\u00e4vad s\u00fcnkroonseks, kuid v\u00f5rgureplikate kinnitused on vaikimisi as\u00fcnkroonsed. Kui me loomulikult ei otsusta neid kinnitusi s\u00fcnkroonseteks teha, nagu \u00fclal n\u00e4idatud.<\/p>\n<p><\/p>\n<p>Kui olete j\u00e4lginud <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/compose\/governor\">projekti Governor arengut<\/a><\/noindex>, olete v\u00f5ib t\u00e4hele pannud m\u00f5ningaid hiljutisi muudatusi (<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/compose\/governor\/commit\/87f18c01f150b3f1b6f948e852c7add2949f7360\">1<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/compose\/governor\/commit\/dcbe849d33c535b1522ce767803cb77a3ac91a7e\">2<\/a><\/noindex>), mis v\u00f5imaldasid kasutajatel Governor neid seadistusi testida ja nende j\u00e4rjepidevust kontrollida.<\/p>\n<p><\/p>\n<h2 id=\"esche-para-slov\">Veel paar s\u00f5na\u2026<\/h2>\n<p><\/p>\n<p>Kujutage ette, et veel n\u00e4dal tagasi oleksin \u00f6elnud, et PostgreSQL-i nii detailselt h\u00e4\u00e4lestamine pole v\u00f5imalik. Just sel ajal r\u00f5hutas Compose'i platvormi meeskonna liige Kurt, et selline v\u00f5imalus on olemas. Ta vaigistas mu vastuv\u00e4ited ja leidis PostgreSQL-i dokumentatsioonist <noindex><a rel=\"nofollow\" href=\"http:\/\/www.postgresql.org\/docs\/devel\/static\/runtime-config-wal.html#GUC-SYNCHRONOUS-COMMIT\">j\u00e4rgneva<\/a><\/noindex>:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL ja s\u00f5lmede salvestamise sobivuse seade iga konkreetse \u00fchenduse jaoks\" src=\"\/wp-content\/uploads\/2019\/10\/e77e97e588fa3d1e8acbe5de0e26436a.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><em>Seda seadet saab igal ajal muuta. Iga tehingu k\u00e4itumine m\u00e4\u00e4ratakse seade j\u00e4rgi, mis on aktiivne committed'i ajal. Seet\u00f5ttu on v\u00f5imalik ja kasulik, et m\u00f5nede tehingute korral toimub commit-synkroonselt, ja teiste korral \u2013 as\u00fcnkroonselt. N\u00e4iteks, et sundida \u00fchte <code>multistatement<\/code> tehingut tegema commit'e as\u00fcnkroonselt, kui vaikeseadete v\u00e4\u00e4rtus on vastupidine, seada <\/em><code>SET LOCAL synchronous_commit TO OFF<\/code> <em>tehingu jooksul.<\/em><\/p>\n<p><\/p>\n<p>Selle v\u00e4ikese konfiguratsioonifaili muutmisega andsime kasutajatele v\u00f5imaluse kontrollida nende j\u00e4rjepidevust ja j\u00f5udlust.<\/p>\n<p>Allikas: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/otus\/blog\/472364\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0435\u0440\u0435\u0432\u043e\u0434 \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u043e\u0432 \u043a\u0443\u0440\u0441\u0430 \u00ab\u0411\u0430\u0437\u044b \u0414\u0430\u043d\u043d\u044b\u0445\u00bb. \u0418\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438? \u041f\u0440\u0438\u0433\u043b\u0430\u0448\u0430\u0435\u043c \u0432\u0430\u0441 \u043d\u0430 \u0414\u0435\u043d\u044c \u041e\u0442\u043a\u0440\u044b\u0442\u044b\u0445 \u0414\u0432\u0435\u0440\u0435\u0439, \u0433\u0434\u0435 \u043c\u044b \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044f\u0445 \u043e\u043d\u043b\u0430\u0439\u043d-\u0444\u043e\u0440\u043c\u0430\u0442\u0430, \u043a\u043e\u043c\u043f\u0435\u0442\u0435\u043d\u0446\u0438\u044f\u0445 \u0438 \u043a\u0430\u0440\u044c\u0435\u0440\u043d\u044b\u0445 \u043f\u0435\u0440\u0441\u043f\u0435\u043a\u0442\u0438\u0432\u0430\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0436\u0434\u0443\u0442 \u0432\u044b\u043f\u0443\u0441\u043a\u043d\u0438\u043a\u043e\u0432 \u043f\u043e\u0441\u043b\u0435 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f. PostgreSQL \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u043d\u043e\u0441\u0442\u0438 \u0437\u0430\u043f\u0438\u0441\u0438 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u041d\u0430\u043c \u0432 Compose \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0438\u043c\u0435\u0442\u044c \u0434\u0435\u043b\u043e \u0441\u043e \u043c\u043d\u043e\u0433\u0438\u043c\u0438 \u0431\u0430\u0437\u0430\u043c\u0438 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":29395,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-39169","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.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0435\u0440\u0435\u0432\u043e\u0434 \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u043e\u0432 \u043a\u0443\u0440\u0441\u0430 \u00ab\u0411\u0430\u0437\u044b \u0414\u0430\u043d\u043d\u044b\u0445\u00bb. \u0418\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438?\" \/>\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\/et\/blog\/administrirovanie\/postgresql-i-nastrojki-soglasovannosti-zapisi-dlya-kazhdogo-konkretnogo-soedineniya\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"et_EE\" \/>\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 \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u043d\u043e\u0441\u0442\u0438 \u0437\u0430\u043f\u0438\u0441\u0438 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0435\u0440\u0435\u0432\u043e\u0434 \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u043e\u0432 \u043a\u0443\u0440\u0441\u0430 \u00ab\u0411\u0430\u0437\u044b \u0414\u0430\u043d\u043d\u044b\u0445\u00bb. \u0418\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438?\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/postgresql-i-nastrojki-soglasovannosti-zapisi-dlya-kazhdogo-konkretnogo-soedineniya\" \/>\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=\"2019-10-31T19:28:14+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:28:14+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 ja kirjete j\u00e4rjepidevuse seaded iga konkreetse \u00fchenduse jaoks | ProHoster","description":"Artikli t\u00f5lge on ette valmistatud spetsiaalselt andmebaasi kursuse tudengitele. Huvi areneda selles suunas?","canonical_url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/postgresql-i-nastrojki-soglasovannosti-zapisi-dlya-kazhdogo-konkretnogo-soedineniya","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"et_EE","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 \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u043d\u043e\u0441\u0442\u0438 \u0437\u0430\u043f\u0438\u0441\u0438 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f | ProHoster","og:description":"\u041f\u0435\u0440\u0435\u0432\u043e\u0434 \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u043e\u0432 \u043a\u0443\u0440\u0441\u0430 \u00ab\u0411\u0430\u0437\u044b \u0414\u0430\u043d\u043d\u044b\u0445\u00bb. \u0418\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438?","og:url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/postgresql-i-nastrojki-soglasovannosti-zapisi-dlya-kazhdogo-konkretnogo-soedineniya","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":"2019-10-31T19:28:14+00:00","article:modified_time":"2019-10-31T19:28:14+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"39169","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":"2026-01-24 01:05:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 00:54:44","updated":"2026-01-24 01:05:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/39169","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=39169"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/39169\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/29395"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=39169"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=39169"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=39169"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}