{"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\/sv\/blog\/administrirovanie\/postgresql-i-nastrojki-soglasovannosti-zapisi-dlya-kazhdogo-konkretnogo-soedineniya","title":{"rendered":"PostgreSQL och inst\u00e4llningar f\u00f6r skrivkonsistens f\u00f6r varje specifik anslutning","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><em>\u00d6vers\u00e4ttningen av artikeln \u00e4r s\u00e4rskilt utarbetad f\u00f6r studenter i kursen <noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/jCX0\/\">\u00abDatabaser\u00bb<\/a><\/noindex>. \u00c4r du intresserad av att utvecklas inom detta omr\u00e5de? Vi inbjuder dig till <noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/jCX0\/\">\u00d6ppet Hus<\/a><\/noindex>, d\u00e4r vi g\u00e5r igenom programmet, funktionerna i onlineformatet, kompetenserna och karri\u00e4rm\u00f6jligheterna som v\u00e4ntar studenter efter avslutad utbildning.<\/em><\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL och inst\u00e4llningar f\u00f6r skrivkonsistens f\u00f6r varje specifik anslutning\" src=\"\/wp-content\/uploads\/2019\/10\/e69e30ba059af157f021c9cb33a59f51.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>PostgreSQL och inst\u00e4llningar f\u00f6r skrivkonsistens f\u00f6r varje specifik anslutning<br \/>\nHos Compose hanterar vi m\u00e5nga databaser, vilket ger oss m\u00f6jlighet att l\u00e4ra k\u00e4nna deras funktionalitet och brister. N\u00e4r vi l\u00e4r oss att uppskatta de funktionella egenskaperna hos nya databaser, b\u00f6rjar vi ibland t\u00e4nka p\u00e5 hur bra det skulle vara om s\u00e5dana funktioner ocks\u00e5 fanns i mer mogna verktyg vi redan har arbetat l\u00e4nge med. En av de nya funktionerna som vi ville se i PostgreSQL var anpassningsbar skrivkonsistens per anslutning i hela klustret. Och som det visade sig har vi redan den funktionen, och idag vill vi dela med oss av information om hur du kan anv\u00e4nda den.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p><\/p>\n<h1 id=\"zachem-mne-eto\">Varf\u00f6r skulle jag beh\u00f6va detta?<\/h1>\n<p><\/p>\n<p>Hur ett kluster ska bete sig beror p\u00e5 din applikation. L\u00e5t oss ta ett exempel med en faktureringsapplikation. Du kommer att beh\u00f6va hundraprocentig konsistens i klustret, s\u00e5 du m\u00e5ste aktivera synkrona commits s\u00e5 att din databas v\u00e4ntar tills alla \u00e4ndringar har registrerats. Men om din applikation \u00e4r ett snabbt v\u00e4xande socialt n\u00e4tverk, f\u00f6redrar du f\u00f6rmodligen snabb respons snarare \u00e4n hundraprocentig konsistens. F\u00f6r att uppn\u00e5 detta kan du anv\u00e4nda asynkrona commits i ditt kluster.<\/p>\n<p><\/p>\n<h2 id=\"znakomtes-kompromiss\">L\u00e5t oss introducera kompromissen<\/h2>\n<p><\/p>\n<p>Du m\u00e5ste g\u00f6ra en kompromiss mellan datakonsistens och prestanda. PostgreSQL r\u00f6r sig bort fr\u00e5n konsistens, eftersom standardkonfigurationen d\u00e5 blir f\u00f6ruts\u00e4gbar och utan ov\u00e4ntade \u00f6verraskningar. Och nu ska vi bekanta oss med kompromisserna.<\/p>\n<p><\/p>\n<h3 id=\"kompromiss-1-proizvoditelnost\">Kompromiss 1: Prestanda<\/h3>\n<p><\/p>\n<p>Om PostgreSQL-klustret inte beh\u00f6ver konsistens kan det fungera asynkront. Skrivning g\u00f6rs till klustrets ledare, och dess repliker f\u00e5r uppdateringar efter n\u00e5gra millisekunder. N\u00e4r PostgreSQL-klustret kr\u00e4ver konsistens m\u00e5ste det fungera synkront. Skrivning kommer att g\u00f6ras i klustrets ledare, som skickar uppdateringen till replikerna och v\u00e4ntar p\u00e5 bekr\u00e4ftelse fr\u00e5n varje replika att den har genomf\u00f6rt skrivningen, innan den skickar bekr\u00e4ftelsen till klienten som initierade skrivningen om att den har genomf\u00f6rts framg\u00e5ngsrikt. Den praktiska skillnaden mellan dessa tillv\u00e4gag\u00e5ngss\u00e4tt \u00e4r att den asynkrona metoden kr\u00e4ver tv\u00e5 n\u00e4tverkshopp, medan den synkrona kr\u00e4ver fyra. <\/p>\n<p><\/p>\n<h3 id=\"kompromiss-2-soglasovannost\">Kompromiss 2: Konsistens<\/h3>\n<p><\/p>\n<p>Resultatet vid ett fel i ledaren i dessa tv\u00e5 tillv\u00e4gag\u00e5ngss\u00e4tt kommer ocks\u00e5 att vara olika. Om arbetet utf\u00f6rs asynkront, kommer inte alla skrivningar att bekr\u00e4ftas av replikerna vid ett s\u00e5dant fel. Hur mycket kommer g\u00e5 f\u00f6rlorat? Det beror p\u00e5 sj\u00e4lva applikationen och effektiviteten i replikationen. Compose-replikeringen f\u00f6rhindrar att en replika blir ledare om m\u00e4ngden information i den \u00e4r 1 MB mindre \u00e4n i ledaren, vilket inneb\u00e4r att upp till 1 MB skrivningar potentiellt kan g\u00e5 f\u00f6rlorade vid asynkront arbete. <\/p>\n<p><\/p>\n<p>I synkront l\u00e4ge sker detta inte. Om ledaren fallerar, uppdateras alla repliker eftersom varje skrivning som bekr\u00e4ftats p\u00e5 ledaren m\u00e5ste bekr\u00e4ftas i replikerna. Det h\u00e4r \u00e4r konsistensen. <\/p>\n<p><\/p>\n<p>Synkront beteende \u00e4r meningsfullt att anv\u00e4nda i en applikation f\u00f6r r\u00e4kning, d\u00e4r konsistens har en uppenbar f\u00f6rdel i str\u00e4van att hitta en kompromiss mellan konsistens och prestanda. Det viktigaste f\u00f6r en s\u00e5dan applikation \u00e4r giltiga data. T\u00e4nk nu p\u00e5 ett socialt n\u00e4tverk, d\u00e4r huvuduppgiften \u00e4r att beh\u00e5lla anv\u00e4ndarens uppm\u00e4rksamhet genom att svara p\u00e5 f\u00f6rfr\u00e5gningar s\u00e5 snabbt som m\u00f6jligt. I s\u00e5dana fall kommer prestanda med f\u00e4rre n\u00e4tverkshopp och mindre v\u00e4ntetid f\u00f6r commits att prioriteras. Men kompromissen mellan prestanda och konsistens \u00e4r inte den enda som man beh\u00f6ver t\u00e4nka p\u00e5.<\/p>\n<p><\/p>\n<h3 id=\"kompromiss-3-sboi\">Kompromiss 3: Fel<\/h3>\n<p><\/p>\n<p>Det \u00e4r mycket viktigt att f\u00f6rst\u00e5 hur en kluster beter sig vid fel. L\u00e5t oss t\u00e4nka oss en situation d\u00e4r en eller flera repliker slutar fungera. N\u00e4r f\u00f6r\u00e4ndringar hanteras asynkront kommer ledaren att forts\u00e4tta fungera, det vill s\u00e4ga ta emot och bearbeta poster utan att v\u00e4nta p\u00e5 de saknade replikarna. N\u00e4r replikarna \u00e5terv\u00e4nder till klustret kommer de att komma ikapp ledaren. Vid synkron replikering, om replikarna inte svarar, har ledaren inget val utan kommer att forts\u00e4tta v\u00e4nta p\u00e5 bekr\u00e4ftelse av \u00e5tagandet tills replikarna \u00e5terv\u00e4nder till klustret och kan ta emot och bekr\u00e4fta posten.<\/p>\n<p><\/p>\n<h2 id=\"po-odnomu-soedineniyu-na-tranzakciyu\">En anslutning per transaktion?<\/h2>\n<p><\/p>\n<p>Varje applikation beh\u00f6ver en speciell typ av kombination av konsistens och prestanda. Om den inte \u00e4r v\u00e5r faktureringsapplikation, som vi f\u00f6rest\u00e4ller oss som helt konsistent, eller v\u00e5r n\u00e4stan flyktiga sociala medieapp. I alla andra fall kommer det att finnas stunder n\u00e4r vissa operationer m\u00e5ste vara synkrona och andra asynkrona. Du kanske inte vill att systemet ska v\u00e4nta tills ett meddelande som skickats i chatten har bekr\u00e4ftats, men om en betalning g\u00f6rs i samma applikation, m\u00e5ste det v\u00e4nta.<\/p>\n<p><\/p>\n<p>Alla dessa beslut tas sj\u00e4lvklart av applikationsutvecklaren. R\u00e4tt beslut om n\u00e4r man ska anv\u00e4nda den ena eller andra metoden kommer att hj\u00e4lpa till att utnyttja klustret maximalt. Det \u00e4r viktigt att utvecklaren kan v\u00e4xla mellan dem p\u00e5 SQL-niv\u00e5 f\u00f6r anslutningar och transaktioner. <\/p>\n<p><\/p>\n<h2 id=\"obespechenie-kontrolya-na-praktike\">Att s\u00e4kerst\u00e4lla kontroll i praktiken<\/h2>\n<p><\/p>\n<p>Som standard s\u00e4kerst\u00e4ller PostgreSQL konsistens. Detta kontrolleras av serversparametern <code>synchronous_commit<\/code>. Som standard ligger den i l\u00e4get <code>on<\/code>, men den har tre andra alternativ: <code>local<\/code>, <code>remote_write<\/code> eller <code>off<\/code>.<\/p>\n<p><\/p>\n<p>N\u00e4r parametern st\u00e4lls in p\u00e5 <code>off<\/code> stoppas alla synkrona \u00e5taganden, \u00e4ven i det lokala systemet. Parametern i local definierar det synkrona l\u00e4get f\u00f6r det lokala systemet, men poster skrivs till replikarna asynkront. <code>Remote_write<\/code> g\u00e5r \u00e4nnu l\u00e4ngre: poster skrivs till replikarna asynkront, men returneras n\u00e4r replican har tagit emot posten, men inte skrivit den p\u00e5 disk.<\/p>\n<p><\/p>\n<p>Genom att \u00f6verv\u00e4ga de tillg\u00e4ngliga alternativen v\u00e4ljer vi beteendet och med tanke p\u00e5 att <code>on<\/code> \u2013 det \u00e4r synkrona poster, kommer vi att v\u00e4lja <code>local<\/code> f\u00f6r asynkrona \u00e5taganden \u00f6ver n\u00e4tverket, medan lokala \u00e5taganden f\u00f6rblir synkrona.<\/p>\n<p><\/p>\n<p>Nu ska vi ber\u00e4tta f\u00f6r dig hur du st\u00e4ller in detta p\u00e5 ett \u00f6gonblick, men f\u00f6rest\u00e4ll dig att vi har installerat <code>synchronous_commit<\/code> p\u00e5 <code>local<\/code> servern. Vi undrade om det var m\u00f6jligt att \u00e4ndra inst\u00e4llningen <code>synchronous_commit<\/code> i realtid, och det visade sig att det inte bara \u00e4r m\u00f6jligt, utan det finns till och med tv\u00e5 s\u00e4tt att g\u00f6ra det. Det f\u00f6rsta \u00e4r att st\u00e4lla in sessionen f\u00f6r din anslutning p\u00e5 f\u00f6ljande s\u00e4tt:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">SET SESSION synchronous_commit TO ON;  \n\/\/ Ditt skrivande h\u00e4r<\/code><\/pre>\n<p><\/p>\n<p>Alla efterf\u00f6ljande skrivningar i sessionen kommer att bekr\u00e4fta skrivoperationer f\u00f6r repliker innan de returnerar ett positivt resultat till den anslutna klienten. Om du f\u00f6rst\u00e5s inte \u00e4ndrar inst\u00e4llningen <code>synchronous_commit<\/code> igen. Du kan utel\u00e4mna delen <code>SESSION<\/code> i kommandot, eftersom den kommer att vara i standardv\u00e4rdet.<\/p>\n<p><\/p>\n<p>\u0412\u0442\u043e\u0440\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0445\u043e\u0440\u043e\u0448, \u043a\u043e\u0433\u0434\u0430 \u0432\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0435 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u0443\u044e \u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u044e \u0434\u043b\u044f \u043e\u0434\u043d\u043e\u0439 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438. \u0412\u043e \u043c\u043d\u043e\u0433\u0438\u0445 \u0431\u0430\u0437\u0430\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e\u043a\u043e\u043b\u0435\u043d\u0438\u044f &#171;NoSQL&#187; \u043f\u043e\u043d\u044f\u0442\u0438\u044f \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0439 \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442, \u043d\u043e \u043e\u043d\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0432 PostgreSQL. \u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u044b \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0435 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044e, \u0430 \u0437\u0430\u0442\u0435\u043c \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0435 <code>synchronous_commit<\/code> p\u00e5 <code>on<\/code> innan du utf\u00f6r skrivoperationen f\u00f6r transaktionen. <code>COMMIT<\/code> kommer att bekr\u00e4fta transaktionen med vilket v\u00e4rde parameter <code>synchronous_commit<\/code>, som var inst\u00e4llt vid den tidpunkten, \u00e4ven om det \u00e4r b\u00e4st att st\u00e4lla in variabeln i f\u00f6rv\u00e4g f\u00f6r att s\u00e4kerst\u00e4lla att andra utvecklare f\u00f6rst\u00e5r att skrivningar inte \u00e4r asynkrona.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">BEGIN;  \nSET LOCAL synchronous_commit TO ON;  \n\/\/ Ditt skrivande h\u00e4r\nCOMMIT;  <\/code><\/pre>\n<p><\/p>\n<p>Alla transaktionskommitt\u00e9er kommer nu att bekr\u00e4ftas som skrivna till repliker innan databasen returnerar ett positivt svar till den anslutna klienten.<\/p>\n<p><\/p>\n<h2 id=\"nastroyka-postgresql\">Inst\u00e4llning av PostgreSQL<\/h2>\n<p><\/p>\n<p>Tidigare har vi f\u00f6rest\u00e4llt oss ett PostgreSQL-system med <code>synchronous_commit<\/code>, installerat p\u00e5 <code>local<\/code>. F\u00f6r att detta ska vara verkligt p\u00e5 serversidan m\u00e5ste du g\u00f6ra tv\u00e5 serverkonfigurationsinst\u00e4llningar. En annan parameter <code>synchronous_standby_names<\/code> tr\u00e4dde i kraft n\u00e4r <code>synchronous_commit<\/code> \u00e4r i <code>on<\/code>. Den definierar vilka repliker som har r\u00e4tt till synkrona kommitt\u00e9er, och vi kommer att st\u00e4lla in den till <code>*<\/code>, vilket kommer att inneb\u00e4ra att alla repliker \u00e4r aktiverade. Dessa v\u00e4rden justeras vanligtvis i <noindex><a rel=\"nofollow\" href=\"http:\/\/www.postgresql.org\/docs\/9.4\/static\/config-setting.html#CONFIG-SETTING-CONFIGURATION-FILE\">konfigurationsfilen<\/a><\/noindex> genom att l\u00e4gga till: <\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">synchronous_commit = local  \nsynchronous_standby_names='*'<\/code><\/pre>\n<p><\/p>\n<p>Genom att st\u00e4lla in parametern <code>synchronous_commit<\/code> till v\u00e4rdet <code>local<\/code>, skapar vi ett system d\u00e4r lokala diskar f\u00f6rblir synkrona, men kommitt\u00e9er av n\u00e4tverksrepliker \u00e4r asynkrona som standard. Om vi inte f\u00f6rst\u00e5s beslutar att g\u00f6ra dessa kommitt\u00e9er synkrona, som visat ovan.<\/p>\n<p><\/p>\n<p>Om du har f\u00f6ljt utvecklingen av <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/compose\/governor\">projektet Governor<\/a><\/noindex>, du kanske har lagt m\u00e4rke till n\u00e5gra nyliga f\u00f6r\u00e4ndringar (<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>), som har m\u00f6jliggjort f\u00f6r anv\u00e4ndare av Governor att testa dessa alternativ och \u00f6vervaka deras konsistens.<\/p>\n<p><\/p>\n<h2 id=\"esche-para-slov\">Lite mer\u2026<\/h2>\n<p><\/p>\n<p>F\u00f6r bara en vecka sedan skulle jag ha sagt att det var om\u00f6jligt att finjustera PostgreSQL s\u00e5 noggrant. Just d\u00e5 p\u00e5pekade Kurt, en medlem av Compose-plattformsteamet, att det faktiskt \u00e4r m\u00f6jligt. Han tystade mina inv\u00e4ndningar och hittade i PostgreSQL-dokumentationen <noindex><a rel=\"nofollow\" href=\"http:\/\/www.postgresql.org\/docs\/devel\/static\/runtime-config-wal.html#GUC-SYNCHRONOUS-COMMIT\">f\u00f6ljande<\/a><\/noindex>:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL och inst\u00e4llningar f\u00f6r skrivkonsistens f\u00f6r varje specifik anslutning\" src=\"\/wp-content\/uploads\/2019\/10\/e77e97e588fa3d1e8acbe5de0e26436a.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><em>Denna inst\u00e4llning kan \u00e4ndras n\u00e4r som helst. Beteendet f\u00f6r alla transaktioner best\u00e4ms av inst\u00e4llningen som g\u00e4ller vid commit. D\u00e4rf\u00f6r kan det vara b\u00e5de m\u00f6jligt och f\u00f6rdelaktigt att f\u00f6r vissa transaktioner effectueras commits synkront, medan f\u00f6r andra \u2013 asynkront. Till exempel, f\u00f6r att f\u00e5 en <code>multistatement<\/code> transaktion att utf\u00f6ra commits asynkront n\u00e4r standardv\u00e4rdet mots\u00e4tter sig detta, s\u00e4tt: <\/em><code>SET LOCAL synchronous_commit TO OFF<\/code> <em>i transaktionen.<\/em><\/p>\n<p><\/p>\n<p>Med en s\u00e5dan liten modifiering i konfigurationsfilen har vi gett anv\u00e4ndarna m\u00f6jlighet att styra sin konsistens och prestanda.<\/p>\n<p>K\u00e4lla: <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.4 - 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\/sv\/blog\/administrirovanie\/postgresql-i-nastrojki-soglasovannosti-zapisi-dlya-kazhdogo-konkretnogo-soedineniya\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sv_SE\" \/>\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\/sv\/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 och inst\u00e4llningar f\u00f6r konsistens av skrivningar f\u00f6r varje specifik anslutning | ProHoster","description":"\u00d6vers\u00e4ttningen av artikeln har f\u00f6rberetts speciellt f\u00f6r studenter p\u00e5 kursen \"Databaser\". Intresserad av att utvecklas inom detta omr\u00e5de?","canonical_url":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/postgresql-i-nastrojki-soglasovannosti-zapisi-dlya-kazhdogo-konkretnogo-soedineniya","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sv_SE","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\/sv\/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\/sv\/wp-json\/wp\/v2\/posts\/39169","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/comments?post=39169"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/39169\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media\/29395"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media?parent=39169"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/categories?post=39169"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/tags?post=39169"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}