{"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\/ro\/blog\/administrirovanie\/postgresql-i-nastrojki-soglasovannosti-zapisi-dlya-kazhdogo-konkretnogo-soedineniya","title":{"rendered":"PostgreSQL \u0219i configurarea consisten\u021bei scrierii pentru fiecare conexiune specific\u0103","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><em>Traducerea articolului a fost preg\u0103tit\u0103 special pentru studen\u021bii cursului <noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/jCX0\/\">\u201eBaze de Date\u201d<\/a><\/noindex>. E\u0219ti interesat s\u0103 te dezvol\u021bi \u00een acest domeniu? Te invit\u0103m la <noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/jCX0\/\">Ziua Por\u021bilor Deschise<\/a><\/noindex>, unde vom discuta \u00een detaliu despre program, caracteristicile formatului online, competen\u021bele \u0219i perspectivele de carier\u0103 care a\u0219teapt\u0103 absolven\u021bii dup\u0103 \u00eenv\u0103\u021bare.<\/em><\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL \u0219i configurarea consisten\u021bei scrierii pentru fiecare conexiune specific\u0103\" src=\"\/wp-content\/uploads\/2019\/10\/e69e30ba059af157f021c9cb33a59f51.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>PostgreSQL \u0219i configurarea consisten\u021bei scrierii pentru fiecare conexiune specific\u0103<br \/>\nLa Compose ne ocup\u0103m cu multe baze de date, ceea ce ne ofer\u0103 oportunitatea de a cunoa\u0219te mai bine func\u021bionalit\u0103\u021bile \u0219i dezavantajele acestora. Pe m\u0103sur\u0103 ce \u00eenv\u0103\u021b\u0103m s\u0103 iubim caracteristicile func\u021bionale ale noilor baze de date, ne g\u00e2ndim adesea cum ar fi fost bine dac\u0103 astfel de func\u021bii ar fi fost disponibile \u0219i \u00een instrumentele mai mature cu care lucr\u0103m de mult timp. Una dintre noile caracteristici pe care ne-am dorit-o \u00een PostgreSQL a fost consisten\u021ba scrierii configurabil\u0103 pe conexiune \u00een \u00eentregul cluster. \u0218i, se pare, c\u0103 deja o avem, iar ast\u0103zi vrem s\u0103 \u00eemp\u0103rt\u0103\u0219im informa\u021bii despre cum o po\u021bi folosi.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p><\/p>\n<h1 id=\"zachem-mne-eto\">De ce mi-ar trebui asta?<\/h1>\n<p><\/p>\n<p>Modul \u00een care trebuie s\u0103 se comporte clusterul depinde de aplica\u021bia ta. S\u0103 lu\u0103m, de exemplu, o aplica\u021bie pentru pl\u0103\u021bi. Vei avea nevoie de o consisten\u021b\u0103 de sut\u0103 la sut\u0103 \u00een cluster, prin urmare va trebui s\u0103 activezi comitetele sincrone, astfel \u00eenc\u00e2t baza ta de date s\u0103 a\u0219tepte p\u00e2n\u0103 c\u00e2nd toate modific\u0103rile sunt efectuate. Cu toate acestea, dac\u0103 aplica\u021bia ta este o re\u021bea social\u0103 \u00een rapid\u0103 dezvoltare, atunci cu siguran\u021b\u0103 vei prefera un r\u0103spuns rapid \u00een detrimentul consisten\u021bei de sut\u0103 la sut\u0103. Pentru a atinge acest obiectiv, po\u021bi utiliza comitetele asincrone \u00een clusterul t\u0103u.<\/p>\n<p><\/p>\n<h2 id=\"znakomtes-kompromiss\">\u00cent\u00e2lne\u0219te compromisurile<\/h2>\n<p><\/p>\n<p>Va trebui s\u0103 faci un compromis \u00eentre consisten\u021ba datelor \u0219i performan\u021b\u0103. PostgreSQL avanseaz\u0103 de la consisten\u021b\u0103, deoarece configurarea implicit\u0103 \u00een acest caz devine predictibil\u0103, f\u0103r\u0103 surprize nea\u0219teptate. Acum s\u0103 ne familiariz\u0103m cu compromisurile.<\/p>\n<p><\/p>\n<h3 id=\"kompromiss-1-proizvoditelnost\">Compromis 1: Performan\u021ba<\/h3>\n<p><\/p>\n<p>Dac\u0103 un cluster PostgreSQL nu necesit\u0103 coeren\u021b\u0103, acesta poate func\u021biona complet asincron. Scrierea se face pe liderul clusterului, iar replicile sale vor primi actualiz\u0103rile dup\u0103 c\u00e2teva milisecunde. C\u00e2nd clusterul PostgreSQL necesit\u0103 coeren\u021b\u0103, acesta trebuie s\u0103 func\u021bioneze sincron. Scrierea se va face pe liderul clusterului, care va trimite replicilor actualizarea \u0219i va a\u0219tepta confirmarea c\u0103 fiecare a efectuat scrierea, \u00eenainte de a trimite confirmarea clientului care a ini\u021biat scrierea, c\u0103 aceasta a avut succes. Diferen\u021ba practic\u0103 \u00eentre aceste abord\u0103ri este c\u0103 metoda asincron\u0103 necesit\u0103 dou\u0103 salturi prin re\u021bea, iar cea sincron\u0103 \u2013 patru. <\/p>\n<p><\/p>\n<h3 id=\"kompromiss-2-soglasovannost\">Compromisul 2: Coeren\u021ba<\/h3>\n<p><\/p>\n<p>Rezultatul \u00een cazul unei defec\u021biuni a liderului \u00een aceste dou\u0103 abord\u0103ri va fi, de asemenea, diferit. Dac\u0103 opera\u021biunea se desf\u0103\u0219oar\u0103 asincron, atunci \u00een cazul unei astfel de erori, nu toate \u00eenregistr\u0103rile vor fi confirmate de replici. C\u00e2te vor fi pierdute? Depinde de aplica\u021bia \u00eens\u0103\u0219i \u0219i de eficien\u021ba replic\u0103rii. Replicarea Compose va \u00eempiedica replica s\u0103 devin\u0103 lider \u00een cazul \u00een care cantitatea de informa\u021bii din aceasta este cu 1 MB mai mic\u0103 dec\u00e2t \u00een lider, ceea ce \u00eenseamn\u0103 c\u0103 pot fi poten\u021bial pierdute p\u00e2n\u0103 la 1 MB de \u00eenregistr\u0103ri \u00een timpul func\u021bion\u0103rii asincrone. <\/p>\n<p><\/p>\n<p>\u00cen modul sincron, acest lucru nu se \u00eent\u00e2mpl\u0103. Dac\u0103 liderul e\u0219ueaz\u0103, toate replicile sunt actualizate, deoarece orice \u00eenregistrare confirmat\u0103 pe lider trebuie s\u0103 fie confirmat\u0103 \u00een replici. Asta este coeren\u021ba. <\/p>\n<p><\/p>\n<p>Comportamentul sincron are sens s\u0103 fie folosit \u00een aplica\u021bia pentru plat\u0103 facturi, unde coeren\u021ba are un avantaj evident \u00een c\u0103utarea unui compromis \u00eentre coeren\u021b\u0103 \u0219i performan\u021b\u0103. Ceea ce este cel mai important pentru o astfel de aplica\u021bie sunt datele valide. \u0218i acum aminti\u021bi-v\u0103 de re\u021beaua social\u0103, unde sarcina principal\u0103 este de a captura aten\u021bia utilizatorului, r\u0103spunz\u00e2nd solicit\u0103rilor c\u00e2t mai repede posibil. \u00cen acest caz, performan\u021ba cu un num\u0103r mai mic de salturi prin re\u021bea \u0219i o a\u0219teptare mai mic\u0103 a confirm\u0103rilor va fi prioritar\u0103. Totu\u0219i, compromisurile \u00eentre performan\u021b\u0103 \u0219i coeren\u021b\u0103 nu sunt singurele la care trebuie s\u0103 ne g\u00e2ndim.<\/p>\n<p><\/p>\n<h3 id=\"kompromiss-3-sboi\">Compromisul 3: Defec\u021biuni<\/h3>\n<p><\/p>\n<p>Este foarte important s\u0103 \u00een\u021belegem comportamentul unui cluster \u00een timpul unei defec\u021biuni. S\u0103 lu\u0103m \u00een considerare situa\u021bia \u00een care una sau mai multe replici e\u0219ueaz\u0103. Atunci c\u00e2nd comit-urile sunt procesate asincron, liderul va continua s\u0103 func\u021bioneze, adic\u0103 va accepta \u0219i procesa \u00eenregistr\u0103ri f\u0103r\u0103 a a\u0219tepta replicile lips\u0103. C\u00e2nd replicile revin \u00een cluster, acestea vor ajunge din urm\u0103 liderul. \u00cen cazul replic\u0103rii sincrone, dac\u0103 replicile nu r\u0103spund, liderul nu va avea de ales \u0219i va continua s\u0103 a\u0219tepte confirmarea comit-ului p\u00e2n\u0103 c\u00e2nd replica va reveni \u00een cluster \u0219i va putea accepta \u0219i confirma \u00eenregistrarea.<\/p>\n<p><\/p>\n<h2 id=\"po-odnomu-soedineniyu-na-tranzakciyu\">C\u00e2te o conexiune pe tranzac\u021bie?<\/h2>\n<p><\/p>\n<p>Fiecare aplica\u021bie are nevoie de un anumit tip de combina\u021bie \u00eentre consisten\u021b\u0103 \u0219i performan\u021b\u0103. Cu excep\u021bia cazului \u00een care este aplica\u021bia noastr\u0103 pentru pl\u0103\u021bi, pe care o imagin\u0103m complet consistent\u0103, sau aplica\u021bia noastr\u0103 aproape efemer\u0103 de socializare. \u00cen toate celelalte cazuri, vor fi momente \u00een care unele opera\u021biuni trebuie s\u0103 fie sincrone, iar altele \u2013 asincrone. Nu vrei ca sistemul s\u0103 a\u0219tepte p\u00e2n\u0103 c\u00e2nd un mesaj trimis \u00een chat este comis, dar dac\u0103 \u00een aceea\u0219i aplica\u021bie se desf\u0103\u0219oar\u0103 o plat\u0103, va trebui s\u0103 a\u0219tep\u021bi.<\/p>\n<p><\/p>\n<p>Toate aceste decizii sunt, desigur, luate de dezvoltatorul aplica\u021biei. Deciziile corecte privind momentul de aplicare a unei metode sau al alteia vor ajuta la maximizarea performan\u021bei cluster-ului. Este important ca dezvoltatorul s\u0103 poat\u0103 comuta \u00eentre acestea la nivel de SQL pentru conexiuni \u0219i tranzac\u021bii. <\/p>\n<p><\/p>\n<h2 id=\"obespechenie-kontrolya-na-praktike\">Asigurarea controlului \u00een practic\u0103<\/h2>\n<p><\/p>\n<p>\u00cen mod implicit, PostgreSQL asigur\u0103 consisten\u021b\u0103. Acest lucru este controlat de parametrul serverului <code>synchronous_commit<\/code>. \u00cen mod implicit, acesta se afl\u0103 \u00een pozi\u021bia <code>on<\/code>, dar are trei alte op\u021biuni: <code>local<\/code>, <code>remote_write<\/code> sau <code>off<\/code>.<\/p>\n<p><\/p>\n<p>Atunci c\u00e2nd parametrul este setat la <code>off<\/code> se opresc toate comit-urile sincrone, chiar \u0219i \u00een sistemul local. Parametrul 'local' define\u0219te modul sincronic pentru sistemul local, dar \u00eenregistr\u0103rile \u00een replici se fac asincron. <code>Remote_write<\/code> merge \u0219i mai departe: \u00eenregistr\u0103rile \u00een replici se fac asincron, dar sunt returnate c\u00e2nd replica a acceptat \u00eenregistrarea, dar nu a scris-o pe disc.<\/p>\n<p><\/p>\n<p>Examin\u00e2nd gama de op\u021biuni disponibile, alegem comportamentul \u0219i, av\u00e2nd \u00een vedere c\u0103 <code>on<\/code> \u2013 acestea sunt \u00eenregistr\u0103ri sincrone, vom alege <code>local<\/code> pentru comit-uri asincrone prin re\u021bea, l\u0103s\u00e2nd comit-urile locale sincrone.<\/p>\n<p><\/p>\n<p>Acum, v\u0103 vom ar\u0103ta cum s\u0103 configura\u021bi acest lucru \u00eentr-o clip\u0103, dar imagina\u021bi-v\u0103 c\u0103 am instalat <code>synchronous_commit<\/code> \u00een <code>local<\/code> pentru server. Ne-am \u00eentrebat dac\u0103 este posbil s\u0103 schimb\u0103m parametrul <code>synchronous_commit<\/code> din mers, \u0219i s-a dovedit c\u0103 nu doar c\u0103 este posibil, ci exist\u0103 chiar dou\u0103 moduri de a face asta. Primul este s\u0103 seta\u021bi sesiunea conexiunii dumneavoastr\u0103 \u00een urm\u0103toarea manier\u0103:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">SET SESSION synchronous_commit TO ON;  \n\/\/ Scrierile dumneavoastr\u0103 aici<\/code><\/pre>\n<p><\/p>\n<p>Toate \u00eenregistr\u0103rile ulterioare din sesiune vor confirma opera\u021biunile de scriere pentru replici, \u00eenainte de a returna un rezultat pozitiv clientului conectat. Desigur, cu condi\u021bia s\u0103 nu schimba\u021bi din nou setarea <code>synchronous_commit<\/code> . Pute\u021bi omite partea <code>SESSION<\/code> din comand\u0103, deoarece aceasta va fi la valoarea implicit\u0103.<\/p>\n<p><\/p>\n<p>A doua metod\u0103 este bun\u0103 atunci c\u00e2nd vrei s\u0103 te asiguri c\u0103 ob\u021bii replicarea sincron\u0103 pentru o singur\u0103 tranzac\u021bie. \u00cen multe baze de date de tip &#171;NoSQL&#187; nu exist\u0103 no\u021biunea de tranzac\u021bii, dar aceasta exist\u0103 \u00een PostgreSQL. \u00cen acest caz, ini\u021biaz\u0103 o tranzac\u021bie, apoi seteaz\u0103 <code>synchronous_commit<\/code> \u00een <code>on<\/code> \u00eenainte de a efectua \u00eenregistrarea pentru tranzac\u021bie. <code>COMMIT<\/code> va fixa tranzac\u021bia, folosind orice valoare a parametrului <code>synchronous_commit<\/code>, care a fost setat\u0103 la acel moment, de\u0219i este cel mai bine s\u0103 seta\u021bi variabila dinainte, pentru a v\u0103 asigura c\u0103 al\u021bi dezvoltatori \u00een\u021beleg c\u0103 \u00eenregistr\u0103rile nu sunt asincrone.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">BEGIN;  \nSET LOCAL synchronous_commit TO ON;  \n\/\/ Scrierile dumneavoastr\u0103 aici\nCOMMIT;  <\/code><\/pre>\n<p><\/p>\n<p>Toate comiturile tranzac\u021biilor vor fi acum confirmate, \u00eenainte ca baza de date s\u0103 returneze un r\u0103spuns pozitiv clientului conectat.<\/p>\n<p><\/p>\n<h2 id=\"nastroyka-postgresql\">Configurarea PostgreSQL<\/h2>\n<p><\/p>\n<p>\u00cen trecut, ne-am imaginat un sistem PostgreSQL cu <code>synchronous_commit<\/code>, instalat \u00een <code>local<\/code>. Pentru a fi real pe partea serverului, va trebui s\u0103 seta\u021bi dou\u0103 parametrii de configurare a serverului. Un alt parametru <code>synchronous_standby_names<\/code> va intra \u00een vigoare c\u00e2nd <code>synchronous_commit<\/code> va fi \u00een <code>on<\/code>. Acesta define\u0219te ce replici au dreptul la comituri sincrone, \u0219i noi \u00eel vom seta la <code>*<\/code>, ceea ce va \u00eensemna activarea tuturor replicilor. Aceste valori se configureaz\u0103 de obicei \u00een <noindex><a rel=\"nofollow\" href=\"http:\/\/www.postgresql.org\/docs\/9.4\/static\/config-setting.html#CONFIG-SETTING-CONFIGURATION-FILE\">fi\u0219ierul de configurare<\/a><\/noindex> prin ad\u0103ugarea: <\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">synchronous_commit = local  \nsynchronous_standby_names='*'<\/code><\/pre>\n<p><\/p>\n<p>Set\u00e2nd parametrul <code>synchronous_commit<\/code> to the value <code>local<\/code>, cre\u0103m un sistem \u00een care discurile locale r\u0103m\u00e2n sincrone, dar comiturile replicilor de re\u021bea sunt \u00een mod implicit asincrone. Dac\u0103, desigur, nu decid s\u0103 facem aceste comituri sincrone, a\u0219a cum s-a ar\u0103tat mai sus.<\/p>\n<p><\/p>\n<p>Dac\u0103 a\u021bi urm\u0103rit evolu\u021bia <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/compose\/governor\">proiectului Governor<\/a><\/noindex>, a\u021bi putea observa unele modific\u0103ri recente (<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>), care au permis utilizatorilor Governor s\u0103 testeze aceste op\u021biuni \u0219i s\u0103 le controleze coeren\u021ba.<\/p>\n<p><\/p>\n<h2 id=\"esche-para-slov\">\u00cenc\u0103 c\u00e2teva cuvinte...<\/h2>\n<p><\/p>\n<p>Cu o s\u0103pt\u0103m\u00e2n\u0103 \u00een urm\u0103, \u021bi-a\u0219 fi spus c\u0103 nu este posibil s\u0103 ajustezi at\u00e2t de fin PostgreSQL. Atunci Kurt, un membru al echipei platformei Compose, a insistat c\u0103 exist\u0103 o astfel de posibilitate. El mi-a lini\u0219tit obiec\u021biile \u0219i a g\u0103sit \u00een documenta\u021bia PostgreSQL <noindex><a rel=\"nofollow\" href=\"http:\/\/www.postgresql.org\/docs\/devel\/static\/runtime-config-wal.html#GUC-SYNCHRONOUS-COMMIT\">urm\u0103toarele<\/a><\/noindex>:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL \u0219i configurarea consisten\u021bei scrierii pentru fiecare conexiune specific\u0103\" src=\"\/wp-content\/uploads\/2019\/10\/e77e97e588fa3d1e8acbe5de0e26436a.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><em>Aceast\u0103 op\u021biune poate fi modificat\u0103 \u00een orice moment. Comportamentul pentru orice tranzac\u021bie este determinat de setarea activ\u0103 la momentul comiterii. Prin urmare, este posibil \u0219i util ca pentru unele tranzac\u021bii comiterea s\u0103 se fac\u0103 sincron sau pentru altele - asincron. De exemplu, pentru a for\u021ba o <code>multistatement<\/code> tranzac\u021bie s\u0103 efectueze comiterea asincron, c\u00e2nd valoarea implicit\u0103 a parametrului este opus\u0103, de\u0219i este stabilit\u0103 <\/em><code>SET LOCAL synchronous_commit TO OFF<\/code> <em>\u00een tranzac\u021bie.<\/em><\/p>\n<p><\/p>\n<p>Prin aceast\u0103 mic\u0103 modificare \u00een fi\u0219ierul de configurare, am oferit utilizatorilor posibilitatea de a controla coeren\u021ba \u0219i performan\u021ba lor.<\/p>\n<p>Sursa: <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.2.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\/ro\/blog\/administrirovanie\/postgresql-i-nastrojki-soglasovannosti-zapisi-dlya-kazhdogo-konkretnogo-soedineniya\" \/>\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\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\/ro\/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 \u0219i set\u0103rile de coeren\u021b\u0103 a \u00eenregistr\u0103rii pentru fiecare conexiune specific\u0103 | ProHoster","description":"Traducerea articolului a fost preg\u0103tit\u0103 special pentru studen\u021bii cursului \u201eBaze de Date\u201d. E\u0219ti interesat s\u0103 te dezvol\u021bi \u00een aceast\u0103 direc\u021bie?","canonical_url":"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/postgresql-i-nastrojki-soglasovannosti-zapisi-dlya-kazhdogo-konkretnogo-soedineniya","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\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\/ro\/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\/ro\/wp-json\/wp\/v2\/posts\/39169","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=39169"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts\/39169\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media\/29395"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media?parent=39169"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/categories?post=39169"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/tags?post=39169"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}