PostgreSQL este un sistem de baze de date bazat pe obiecte open-source, puternic, fiabil, stabil, bazat pe întreprindere și bazat pe obiecte, în stilul proiectelor MariaDB, MySQL sau SQLite. Acesta este un server / motor de baze de date compatibil ACID (Atomicity, Consistency, Isolation, Durability) care poate fi foarte personalizat și include numeroase caracteristici atractive, făcând un înlocuitor excelent pentru motoarele de baze de date menționate anterior.
Caracteristici dintr-o privire
Caracteristicile cheie includ suport pentru chei străine, vizualizări, conexiuni, declanșatoare și proceduri stocate, suport pentru mai multe limbi, suport pentru o gamă largă de tipuri de date SQL, inclusiv BOOLEAN, CHAR, INTEGER, NUMERIC, VARCHAR, INTERVAL, TIMESTAMP și DATE.
În plus, software-ul vine cu suport pentru stocarea obiectelor binare mari, inclusiv tot felul de fișiere multimedia (video, audio și foto), și oferă dezvoltatorilor interfețe de programare native pentru C, C ++, Python, Perl, Limbajul de programare Java, .Net, Tcl și ODBC.
Printre alte caracteristici interesante se numără MVCC (Multi-Version Concurrency Control), spații de tabel, codificări de caractere multiple, punct de recuperare în timp, optimizator de interogare matur și planificator, replicare asincronă, backup online, tranzacții imbricate puncte de salvgardare), backup-uri fierbinți, scriere logging pentru toleranță la erori, suport pentru seturi de caractere internaționale, precum și suport Unicode.
PostgreSQL în numere
În prezent, serverul de bază de date PostgreSQL suportă dimensiuni nelimitate pentru baze de date, 32 TB ar trebui să fie dimensiunea maximă pentru tabele, 1,6 TB pe rând, 1 GB per câmp, rânduri nelimitate pe tabel, suportă între 250 și 1600 coloane pe tabel , în funcție de tipurile de coloane și care acceptă indexuri nelimitate pentru fiecare tabel.
Sisteme de operare acceptate
PostgreSQL a fost testat cu succes pe toate sistemele de operare de bază, inclusiv GNU / Linux, BSD, Solaris, HP-UX, AIX, SGI IRIX, Solaris, Tru64, Mac OS X și Microsoft Windows. PostgreSQL este disponibil pentru descărcare ca arhivă sursă universală, precum și pachete binare precompilate pentru multe distribuții Linux, care suportă atât arhitecturi pe 32 de biți, cât și pe 64 de biți.
Ce este nou puternic> în această versiune:
- Această versiune rezolvă două probleme de securitate. Această versiune rezolvă, de asemenea, problemele identificate cu indicii VACUUM, GIN și hash, interogarea paralelă, replicarea logică și alte bug-uri raportate în ultimele trei luni. Toți utilizatorii care utilizează versiunile afectate de PostgreSQL ar trebui să se actualizeze cât mai curând posibil.
Ce este nou în versiunea 10.4 / 11 Beta 1:
- Această versiune rezolvă, de asemenea, problemele identificate cu indicii VACUUM, GIN și hash, interogarea paralelă, replicarea logică și alte bug-uri raportate în ultimele trei luni. Toți utilizatorii care utilizează versiunile afectate de PostgreSQL ar trebui să se actualizeze cât mai curând posibil.
Ce este nou în versiune:
- Reduceți în continuare vizibilitatea pg_user_mappings.umoptions, pentru a proteja parolele stocate ca opțiuni de cartografiere (Noah Misch)
- Fixarea pentru CVE-2017-7486 a fost incorectă: a permis unui utilizator să vadă opțiunile în cartografiere proprie, chiar dacă nu avea permisiunea de utilizare pe serverul străin asociat. Astfel de opțiuni ar putea include o parolă care a fost furnizată de proprietarul serverului și nu de utilizatorul însuși. Din moment ce information_schema.user_mapping_options nu afișează opțiunile în astfel de cazuri, pg_user_mappings nu ar trebui să fie nici unul. (CVE-2017-7547)
- În sine, acest patch va rezolva comportamentul numai în bazele de date noi initdb'd. Dacă doriți să aplicați această modificare într-o bază de date existentă, va trebui să faceți următoarele:
- Reporniți postmasterul după adăugarea lui allow_system_table_mods = true la postgresql.conf. (În versiunile care suporta ALTER SYSTEM, puteți să o utilizați pentru a modifica configurația, dar veți avea nevoie de o repornire.)
- În fiecare bază de date a clusterului, executați următoarele comenzi ca superuser:
- SET search_path = pg_catalog;
- Creați sau înlocuiți vizualizarea pg_user_mappings AS
- SELECT
- U.oid AS umid,
- S.oid AS srvid,
- S.srvname AS srvname,
- U.umuser AS umuser,
- CASE CU U.umuser = 0 THEN
- 'public'
- ELSE
- A.rolname
- END ca usename,
- CASE CÂND (U.umuser 0 ȘI A.rolname = utilizator curentă )
- ȘI (pg_has_role (S.srvowner, "UTILIZARE")
- SAU has_server_privilege (S.oid, 'USAGE'))))
- SAU (U.umuser = 0 ȘI pg_has_role (S.srvowner, 'USAGE'))
- SAU (SELECT rolsuper FROM pg_authid WHERE rolname = current_user)
- URILE U.umoptions
- ELSE NULL END ca umopțiuni
- Din pg_user_mapping U
- ALIMENTAȚI ÎN STÂNGA pg_authid A ON (A.oid = U.umuser) JOIN
- pg_foreign_server S ON (U.umserver = S.oid);
- Nu uitați să includeți bazele de date template0 și template1 sau vulnerabilitatea va exista în bazele de date pe care le creați mai târziu. Pentru a repara șablonul0, va trebui să îl acceptați temporar pentru a accepta conexiuni. În PostgreSQL 9.5 și mai târziu, puteți utiliza
- șablon ALTER DATABASE0 CU ALLOW_CONNECTIONS true;
- și apoi după fixarea șablonului0, anulați acest lucru cu
- șablon ALTER DATABASE0 CU ALLOW_CONNECTIONS false;
- În versiunile anterioare, utilizați în schimb
- UPDATE pg_database SET datallowconn = true WHERE datname = 'template0';
- UPDATE pg_database SET datallowconn = false WHERE datname = 'template0';
- În final, eliminați setarea de configurare allow_system_table_mods și reporniți din nou postmasterul.
- Dezactivați parolele goale în toate metodele de autentificare bazate pe parolă (Heikki Linnakangas)
- libpq ignoră specificațiile parolei goale și nu le transmite pe server. Deci, dacă parola unui utilizator a fost setată la șirul gol, este imposibil să vă conectați cu acea parolă prin intermediul psql sau alți clienți bazați pe libpq. Prin urmare, un administrator ar putea crede că setarea parolei pentru a goli este echivalentă cu dezactivarea autentificării parolei. Cu toate acestea, cu un client modificat sau non-libpq, logarea ar putea fi posibilă, în funcție de metoda de autentificare care este configurată. În particular, metoda cea mai comună, md5, a acceptat parole goale. Schimbați serverul pentru a respinge parolele goale în toate cazurile. (CVE-2017-7546)
- Faceți lo_put () verificarea privilegiului UPDATE pe obiectul mare țintă (Tom Lane, Michael Paquier)
- lo_put () ar trebui să aibă nevoie de aceleași permisiuni ca lowrite (), dar verificarea lipsea, permițând oricărui utilizator să schimbe datele într-un obiect mare. (CVE-2017-7,548)
- Corectați documentația privind procesul de upgradare a serverelor de așteptare cu pg_upgrade (Bruce Momjian)
- Documentația precedentă a dat instrucțiuni utilizatorilor să pornească / să oprească serverul primar după ce a executat pg_upgrade, dar înainte de a sincroniza serverele de așteptare. Această secvență este nesigură.
- Fixați blocarea simultană a lanțurilor de actualizare a pachetelor (Alvaro Herrera)
- Dacă mai multe sesiuni blochează simultan un lanț de actualizare a tuplului cu moduri de blocare neconflictată folosind o fotografie veche și toate reușesc, este posibil ca unele dintre ele să nu reușească (și să încheie că nu există o versiune live tuple) din cauza unei rase condiție. Acest lucru a avut consecințe, cum ar fi verificările cheie străine, care nu au văzut un tuplu care există cu siguranță, dar care este actualizat simultan.
- Fixarea corupției potențiale a datelor atunci când se blochează o talpă a cărei XMAX este un multixact cu exact un membru încă interesant (Teodor Sigaev)
- Evitați supraîncărcarea întregului și prăbușirea aferentă atunci când sortați mai mult de un miliard de tupluri în memorie (Sergey Koposov)
- În Windows, reîncercați crearea procesului dacă nu reușim să rezervăm intervalul de adrese pentru memoria partajată în noul proces (Tom Lane, Amit Kapila)
- Este de așteptat ca acest lucru să remedieze eșecurile rare de lansare a proceselor de tip copil care se datorează probabil interferențelor produse de antivirus.
- Corectarea corupției cu probabilitate redusă a tabelului hash partajat cu predicate-lock în Windows (Thomas Munro, Tom Lane)
- Evitați înregistrarea curată a închiderii unei conexiuni SSL ca și cum ar fi o resetare a conexiunii (Michael Paquier)
- Împiedicați trimiterea biletelor de sesiune SSL către clienți (Tom Lane)
- Această remediere previne erorile de reconectare cu codul SSL bazat pe client bilet.
- Fixați codul pentru setarea tcp_keepalives_idle pe Solaris (Tom Lane)
- Fixați colectorul de statistici pentru a onora mesajele de anchetă emise imediat după oprirea postmasterului și repornirea imediată (Tom Lane)
- Anchetele de statistică emise în decurs de o jumătate de secundă din închiderea postmasterială anterioară au fost efectiv ignorate.
- Asigurați-vă că dimensiunea tampoanelor de recepție ale colectorului de statistici este de cel puțin 100KB (Tom Lane)
- Acest lucru reduce riscul de scădere a datelor statistice pe platformele mai vechi, a căror dimensiune de memorie tampon implicită este mai mică decât aceea.
- Fixarea unei posibile creări a unui segment WAL nevalid atunci când un standby este promovat imediat după procesarea unei înregistrări XLOG_SWITCH WAL (Andres Freund)
- Fixați walsender pentru a ieși prompt când clientul cere închiderea (Tom Lane)
- Fixați manipularea SIGHUP și SIGUSR1 în procesele walsender (Petr Jelinek, Andres Freund)
- Preveniți panica declanșată de Walsender în timpul punctelor de oprire (Andres Freund, Michael Paquier)
- Reparați repornirea inutilă a procesului walreceiver din cauza stării de rasă în postmaster (Tom Lane)
- Fixarea scurgerilor de subtransacții mici vărsate pe disc în timpul decodificării logice (Andres Freund)
- Acest lucru a dus la crearea de fișiere temporare care consumă spațiu excesiv de pe disc.
- Reduceți munca necesară pentru a crea instantanee în timpul creării de sloturi logice-decodare (Andres Freund, Petr Jelinek)
- Algoritmul anterior a fost imposibil de scump pe un server cu o mulțime de tranzacții deschise.
- Fixați condiția de rasă care ar putea întârzia pe termen nedefinit crearea de sloturi logice-decodare (Andres Freund, Petr Jelinek)
- Reduceți cheltuielile generale în procesarea evenimentelor de invalidare a syscache (Tom Lane)
- Acest lucru este util în special pentru decodificarea logică, ceea ce declanșează invalidarea frecventă a cache-ului.
- Eliminați euristica incorectă folosită în unele cazuri pentru a estima selectivitatea join în funcție de prezența constrângerilor cheie străine (David Rowley)
- În unele cazuri în care a existat o constrângere cheie cu mai multe coloane, dar nu a corespuns exact structura de interogare a unei interogări, planificatorul a folosit o estimare euristică care se dovedește a nu funcționa deloc. Reveniți astfel de cazuri la modul în care au fost estimate înainte de 9.6.
- Rezolvarea cazurilor în care un INSERT sau UPDATE atribuie mai multor elemente dintr-o coloană care este de tipul cu domeniu peste matrice (Tom Lane)
- Permiteți utilizarea funcțiilor ferestrelor în sub-SELECT-uri care se încadrează în argumentele unei funcții agregate (Tom Lane)
- Asigurați-vă că clauza CHECK OPTIONS este afișată corect atunci când tabela de bază este o tabelă străină (Etsuro Fujita)
- Anterior, actualizarea ar putea fi împinsă în totalitate la serverul străin, însă nevoia de a verifica condițiile de vizualizare a fost ratată în acest caz.
- Mutați tipurile de matrițe autogenerate în timpul procesului ALTER ... RENAME (Vik Fearing)
- Anterior, am redenumit un tip de matrice autogenerată în conflict în timpul CREATE; această remediere extinde acest comportament la redenumirea operațiilor.
- Fixați cursorul în ALTER TABLE atunci când există un comentariu cu privire la o constrângere care aparține tabelului (David Rowley)
- Reaplicarea comentariului la constrângerea reconstruită ar putea eșua cu un mesaj de eroare ciudat sau chiar cu un accident.
- Asigurați-vă că ALTER USER ... SET acceptă toate variantele de sintaxă pe care ALTER ROLE ... SET (Peter Eisentraut)
- Permiteți constrângerilor CHECK unui tabel străin să fie inițial NU VALID (Amit Langote)
- CREATE TABLE scade silențios specifici NOT VALID pentru constrângerile CHECK, motivând că tabela trebuie să fie goală, astfel încât constrângerea să poată fi validată imediat. Dar acest lucru este greșit pentru CREATE FOREIGN TABLE, unde nu există niciun motiv să presupunem că masa de bază este goală și chiar dacă nu este o afacere a noastră să decidem că constrângerea poate fi tratată ca valabilă înainte. Săriți această "optimizare" pentru mese străine.
- Actualizați corect informații despre dependență atunci când schimbați tipul sau tipul returului funcției I / O din tipul opac la tipul corect (Heikki Linnakangas)
- CREATE TYPE actualizează funcțiile I / O declarate în acest stil învechit, dar a uitat să înregistreze o dependență de tip, permițând unui DROP TYPE ulterior să lase în urmă definițiile funcțiilor defecte.
- Permiteți paralelismul în planul de interogare atunci când COPY copiază rezultatul unei interogări (Andres Freund)
- Reduceți utilizarea memoriei atunci când analizează procesele unei coloane (Heikki Linnakangas)
- Fixați pierderea de precizie inutilă și rotunjirea nedorită când multiplicați sau împărțiți valorile banilor cu întregi sau flotoare (Tom Lane)
- Strângeți verificările pentru spațiile albe în funcțiile care parsează identificatorii, cum ar fi regprocedurein () (Tom Lane)
- În funcție de localizarea predominantă, aceste funcții ar putea interpreta greșit fragmente de caractere multibyte ca spații libere.
- Folosiți simboluri #define relevante din Perl în timp ce compilați PL / Perl (Ashutosh Sharma, Tom Lane)
- Aceasta evită problemele de portabilitate, care se manifestă în mod tipic ca o "strângere de mână" nepotrivire în timpul încărcării bibliotecii, atunci când lucrați cu versiuni recente Perl.
- În libpq, resetați corect autentificarea GSS / SASL și SSPI după o încercare de conectare nereușită (Michael Paquier)
- Nerespectarea acestui lucru a însemnat că, în cazul căderii înapoi de la conexiuni SSL către conexiuni non-SSL, un eșec GSS / SASL în încercarea SSL ar determina întotdeauna încercarea non-SSL de a eșua. SSPI nu a eșuat, dar a scurs memoria.
- Acest comportament defect a fost observat pe platformele derivate de la BSD (inclusiv macOS), dar nu pe celelalte.
- Fixați pg_dump și pg_restore pentru a emula ultimele comenzi REFRESH MATERIALIZED VIEW (Tom Lane)
- Aceasta previne erorile în timpul procesării dump / restaurării atunci când o vizualizare materializată se referă la tabele deținute de un alt utilizator.
- Îmbunătățiți raportarea pg_dump / pg_restore a condițiilor de eroare originare din zlib (Vladimir Kunschikov, Alvaro Herrera)
- Fixați pg_dump cu opțiunea --clean pentru a renunța la declanșarea evenimentelor așa cum ați așteptat (Tom Lane)
- De asemenea, aceasta atribuie în mod corect proprietatea declanșatorilor de evenimente; înainte, au fost restaurate ca fiind deținute de superuserul care rulează scriptul de restaurare.
- Fixați pg_dump cu opțiunea --clean pentru a nu eșua când schema publică nu există (Stephen Frost)
- Fixați pg_dump pentru a nu emite SQL nevalid pentru o clasă de operatori goi (Daniel Gustafsson)
- Fixați ieșirea pg_dump la stdout pe Windows (Kuntal Ghosh)
- O înregistrare comprimată de text simplu scrisă în stdout ar conține date corupte din cauza lipsei de a pune descriptorul de fișier în modul binar.
- Fixați pg_get_ruledef () pentru a tipări ieșirea corectă pentru regula ON SELECT a unei imagini a cărei coloane au fost redenumite (Tom Lane)
- În unele cazuri de colț, pg_dump se bazează pe pg_get_ruledef () pentru a afișa vizualizările, astfel încât această eroare ar putea duce la eșecuri de tip dump / reload.
- Fixarea excesului de rosturi exterioare cu constrângeri goale, cum ar fi rezultatul unei legături NATURALE STÂNGA fără coloane comune (Tom Lane)
- Fixarea dumpingului expresiilor de funcții în clauza FROM în cazurile în care expresia nu se îndepărtează în ceva care arată ca un apel de funcție (Tom Lane)
- Fixați ieșirea pg_basebackup la stdout pe Windows (Haribabu Kommi)
- O copie de rezervă scrisă la stdout ar conține date corupte din cauza lipsei de a pune descriptorul de fișier în modul binar.
- Fixați pg_rewind pentru a gestiona corect fișiere de peste 2 GB (Kuntal Ghosh, Michael Paquier)
- În mod obișnuit, astfel de fișiere nu vor apărea în directoarele de date PostgreSQL, dar ar putea fi prezente în unele cazuri.
- Fixați pg_upgrade pentru a vă asigura că înregistrarea WAL terminată nu are wal_level = minim (Bruce Momjian)
- Această condiție ar putea împiedica reconectarea serverelor în așteptare.
- Fixați calculul pg_xlogdump pentru lungimea înregistrării WAL (Andres Freund)
- În postgres_fdw, restabiliți conexiunile la serverele la distanță după comenzile ALTER SERVER sau ALTER USER MAPPING (Kyotaro Horiguchi)
- Aceasta asigură faptul că modificările opțiunilor care afectează parametrii conexiunii vor fi aplicate prompt.
- În postgres_fdw, permiteți anularea comenzilor de control la distanță (Robert Haas, Rafia Sabih)
- Această modificare ne permite să scăpăm rapid de așteptarea unui server la distanță care nu răspunde în mai multe cazuri decât în trecut.
- Creșteți MAX_SYSCACHE_CALLBACKS pentru a oferi mai mult spațiu pentru extensii (Tom Lane)
- Utilizați întotdeauna -fPIC, nu -fpic, atunci când construiți biblioteci partajate cu gcc (Tom Lane)
- Aceasta susține bibliotecile de extensii mai mari pe platforme unde face diferența.
- În MSVC se construiește, manipulați cazul în care biblioteca openssl nu se află într-un subdirector VC (Andrew Dunstan)
- În build-urile MSVC, adăugați calea corespunzătoare pentru fișierele cu antet libxml2 (Andrew Dunstan)
- Aceasta rezolvă o necesitate anterioară de a muta lucrurile în jurul instalațiilor standard Windows cu libxml2.
- În MSVC construiește, recunoaște o bibliotecă Tcl numită tcl86.lib (Noah Misch)
- În construirea MSVC, setați setările PROVE_FLAGS pe linia de comandă a vcregress.pl (Andrew Dunstan)
Ce este nou în versiunea 9.6.4:
- Limitați în continuare vizibilitatea pg_user_mappings.umoptions, pentru a proteja parolele stocate ca opțiuni de cartografiere (Noah Misch)
- Fixarea pentru CVE-2017-7486 a fost incorectă: a permis unui utilizator să vadă opțiunile în cartografiere proprie, chiar dacă nu avea permisiunea de utilizare pe serverul străin asociat. Astfel de opțiuni ar putea include o parolă care a fost furnizată de proprietarul serverului și nu de utilizatorul însuși. Din moment ce information_schema.user_mapping_options nu afișează opțiunile în astfel de cazuri, pg_user_mappings nu ar trebui să fie nici unul. (CVE-2017-7547)
- În sine, acest patch va rezolva comportamentul numai în bazele de date noi initdb'd. Dacă doriți să aplicați această modificare într-o bază de date existentă, va trebui să faceți următoarele:
- Reporniți postmasterul după adăugarea lui allow_system_table_mods = true la postgresql.conf. (În versiunile care suporta ALTER SYSTEM, puteți să o utilizați pentru a modifica configurația, dar veți avea nevoie de o repornire.)
- În fiecare bază de date a clusterului, executați următoarele comenzi ca superuser:
- SET search_path = pg_catalog;
- Creați sau înlocuiți vizualizarea pg_user_mappings AS
- SELECT
- U.oid AS umid,
- S.oid AS srvid,
- S.srvname AS srvname,
- U.umuser AS umuser,
- CASE CU U.umuser = 0 THEN
- 'public'
- ELSE
- A.rolname
- END ca usename,
- CASE CÂND (U.umuser 0 ȘI A.rolname = utilizator curentă )
- ȘI (pg_has_role (S.srvowner, "UTILIZARE")
- SAU has_server_privilege (S.oid, 'USAGE'))))
- SAU (U.umuser = 0 ȘI pg_has_role (S.srvowner, 'USAGE'))
- SAU (SELECT rolsuper FROM pg_authid WHERE rolname = current_user)
- URILE U.umoptions
- ELSE NULL END ca umopțiuni
- Din pg_user_mapping U
- ALIMENTAȚI ÎN STÂNGA pg_authid A ON (A.oid = U.umuser) JOIN
- pg_foreign_server S ON (U.umserver = S.oid);
- Nu uitați să includeți bazele de date template0 și template1 sau vulnerabilitatea va exista în bazele de date pe care le creați mai târziu. Pentru a repara șablonul0, va trebui să îl acceptați temporar pentru a accepta conexiuni. În PostgreSQL 9.5 și mai târziu, puteți utiliza
- șablon ALTER DATABASE0 CU ALLOW_CONNECTIONS true;
- și apoi după fixarea șablonului0, anulați acest lucru cu
- șablon ALTER DATABASE0 CU ALLOW_CONNECTIONS false;
- În versiunile anterioare, utilizați în schimb
- UPDATE pg_database SET datallowconn = true WHERE datname = 'template0';
- UPDATE pg_database SET datallowconn = false WHERE datname = 'template0';
- În final, eliminați setarea de configurare allow_system_table_mods și reporniți din nou postmasterul.
- Dezactivați parolele goale în toate metodele de autentificare bazate pe parolă (Heikki Linnakangas)
- libpq ignoră specificațiile parolei goale și nu le transmite pe server. Deci, dacă parola unui utilizator a fost setată la șirul gol, este imposibil să vă conectați cu acea parolă prin intermediul psql sau alți clienți bazați pe libpq. Prin urmare, un administrator ar putea crede că setarea parolei pentru a goli este echivalentă cu dezactivarea autentificării parolei. Cu toate acestea, cu un client modificat sau non-libpq, logarea ar putea fi posibilă, în funcție de metoda de autentificare care este configurată. În particular, metoda cea mai comună, md5, a acceptat parole goale. Schimbați serverul pentru a respinge parolele goale în toate cazurile. (CVE-2017-7546)
- Faceți lo_put () verificarea privilegiului UPDATE pe obiectul mare țintă (Tom Lane, Michael Paquier)
- lo_put () ar trebui să aibă nevoie de aceleași permisiuni ca lowrite (), dar verificarea lipsea, permițând oricărui utilizator să schimbe datele într-un obiect mare. (CVE-2017-7,548)
- Corectați documentația privind procesul de upgradare a serverelor de așteptare cu pg_upgrade (Bruce Momjian)
- Documentația precedentă a dat instrucțiuni utilizatorilor să pornească / să oprească serverul primar după ce a executat pg_upgrade, dar înainte de a sincroniza serverele de așteptare. Această secvență este nesigură.
- Fixați blocarea simultană a lanțurilor de actualizare a pachetelor (Alvaro Herrera)
- Dacă mai multe sesiuni blochează simultan un lanț de actualizare a tuplului cu moduri de blocare neconflictată folosind o fotografie veche și toate reușesc, este posibil ca unele dintre ele să nu reușească (și să încheie că nu există o versiune live tuple) din cauza unei rase condiție. Acest lucru a avut consecințe, cum ar fi verificările cheie străine, care nu au văzut un tuplu care există cu siguranță, dar care este actualizat simultan.
- Fixarea corupției potențiale a datelor atunci când se blochează o talpă a cărei XMAX este un multixact cu exact un membru încă interesant (Teodor Sigaev)
- Evitați supraîncărcarea întregului și prăbușirea aferentă atunci când sortați mai mult de un miliard de tupluri în memorie (Sergey Koposov)
- În Windows, reîncercați crearea procesului dacă nu reușim să rezervăm intervalul de adrese pentru memoria partajată în noul proces (Tom Lane, Amit Kapila)
- Este de așteptat ca acest lucru să remedieze eșecurile rare de lansare a proceselor de tip copil care se datorează probabil interferențelor produse de antivirus.
- Corectarea corupției cu probabilitate redusă a tabelului hash partajat cu predicate-lock în Windows (Thomas Munro, Tom Lane)
- Evitați înregistrarea curată a închiderii unei conexiuni SSL ca și cum ar fi o resetare a conexiunii (Michael Paquier)
- Împiedicați trimiterea biletelor de sesiune SSL către clienți (Tom Lane)
- Această remediere previne erorile de reconectare cu codul SSL bazat pe client bilet.
- Fixați codul pentru setarea tcp_keepalives_idle pe Solaris (Tom Lane)
- Fixați colectorul de statistici pentru a onora mesajele de anchetă emise imediat după oprirea postmasterului și repornirea imediată (Tom Lane)
- Anchetele de statistică emise în decurs de o jumătate de secundă din închiderea postmasterială anterioară au fost efectiv ignorate.
- Asigurați-vă că dimensiunea tampoanelor de recepție ale colectorului de statistici este de cel puțin 100KB (Tom Lane)
- Acest lucru reduce riscul de scădere a datelor statistice pe platformele mai vechi, a căror dimensiune de memorie tampon implicită este mai mică decât aceea.
- Fixarea unei posibile creări a unui segment WAL nevalid atunci când un standby este promovat imediat după procesarea unei înregistrări XLOG_SWITCH WAL (Andres Freund)
- Fixați walsender pentru a ieși prompt când clientul cere închiderea (Tom Lane)
- Fixați manipularea SIGHUP și SIGUSR1 în procesele walsender (Petr Jelinek, Andres Freund)
- Preveniți panica declanșată de Walsender în timpul punctelor de oprire (Andres Freund, Michael Paquier)
- Reparați repornirea inutilă a procesului walreceiver din cauza stării de rasă în postmaster (Tom Lane)
- Fixarea scurgerilor de subtransacții mici vărsate pe disc în timpul decodificării logice (Andres Freund)
- Acest lucru a dus la crearea de fișiere temporare care consumă spațiu excesiv de pe disc.
- Reduceți munca necesară pentru a crea instantanee în timpul creării de sloturi logice-decodare (Andres Freund, Petr Jelinek)
- Algoritmul anterior a fost imposibil de scump pe un server cu o mulțime de tranzacții deschise.
- Fixați condiția de rasă care ar putea întârzia pe termen nedefinit crearea de sloturi logice-decodare (Andres Freund, Petr Jelinek)
- Reduceți cheltuielile generale în procesarea evenimentelor de invalidare a syscache (Tom Lane)
- Acest lucru este util în special pentru decodificarea logică, ceea ce declanșează invalidarea frecventă a cache-ului.
- Eliminați euristica incorectă folosită în unele cazuri pentru a estima selectivitatea join în funcție de prezența constrângerilor cheie străine (David Rowley)
- În unele cazuri în care a existat o constrângere cheie cu mai multe coloane, dar nu a corespuns exact structura de interogare a unei interogări, planificatorul a folosit o estimare euristică care se dovedește a nu funcționa deloc. Reveniți astfel de cazuri la modul în care au fost estimate înainte de 9.6.
- Rezolvarea cazurilor în care un INSERT sau UPDATE atribuie mai multor elemente dintr-o coloană care este de tipul cu domeniu peste matrice (Tom Lane)
- Permiteți utilizarea funcțiilor ferestrelor în sub-SELECT-uri care se încadrează în argumentele unei funcții agregate (Tom Lane)
- Asigurați-vă că clauza CHECK OPTIONS este afișată corect atunci când tabela de bază este o tabelă străină (Etsuro Fujita)
- Anterior, actualizarea ar putea fi împinsă în totalitate la serverul străin, însă nevoia de a verifica condițiile de vizualizare a fost ratată în acest caz.
- Mutați tipurile de matrițe autogenerate în timpul procesului ALTER ... RENAME (Vik Fearing)
- Anterior, am redenumit un tip de matrice autogenerată în conflict în timpul CREATE; această remediere extinde acest comportament la redenumirea operațiilor.
- Fixați cursorul în ALTER TABLE atunci când există un comentariu cu privire la o constrângere care aparține tabelului (David Rowley)
- Reaplicarea comentariului la constrângerea reconstruită ar putea eșua cu un mesaj de eroare ciudat sau chiar cu un accident.
- Asigurați-vă că ALTER USER ... SET acceptă toate variantele de sintaxă pe care ALTER ROLE ... SET (Peter Eisentraut)
- Permiteți constrângerilor CHECK unui tabel străin să fie inițial NU VALID (Amit Langote)
- CREATE TABLE scade silențios specifici NOT VALID pentru constrângerile CHECK, motivând că tabela trebuie să fie goală, astfel încât constrângerea să poată fi validată imediat. Dar acest lucru este greșit pentru CREATE FOREIGN TABLE, unde nu există niciun motiv să presupunem că masa de bază este goală și chiar dacă nu este o afacere a noastră să decidem că constrângerea poate fi tratată ca valabilă înainte. Treceți peste această "optimizare" pentru tabelele străine.
- Actualizați corect informații despre dependență atunci când schimbați tipul sau tipul returului funcției I / O din tipul opac la tipul corect (Heikki Linnakangas)
- CREATE TYPE actualizează funcțiile I / O declarate în acest stil învechit, dar a uitat să înregistreze o dependență de tip, permițând unui DROP TYPE ulterior să lase în urmă definițiile funcțiilor defecte.
- Permiteți paralelismul în planul de interogare atunci când COPY copiază rezultatul unei interogări (Andres Freund)
- Reduceți utilizarea memoriei atunci când analizează procesele unei coloane (Heikki Linnakangas)
- Fixați pierderea de precizie inutilă și rotunjirea nedorită când multiplicați sau împărțiți valorile banilor cu întregi sau flotoare (Tom Lane)
- Strângeți verificările pentru spațiile albe în funcțiile care parsează identificatorii, cum ar fi regprocedurein () (Tom Lane)
- În funcție de localizarea predominantă, aceste funcții ar putea interpreta greșit fragmente de caractere multibyte ca spații libere.
- Folosiți simboluri #define relevante din Perl în timp ce compilați PL / Perl (Ashutosh Sharma, Tom Lane)
- Astfel se evită problemele de portabilitate, care se manifestă de obicei ca nepotrivire în timpul încărcării bibliotecii, atunci când se lucrează cu versiunile recente Perl.
- În libpq, resetați corect autentificarea GSS / SASL și SSPI după o încercare de conectare nereușită (Michael Paquier)
- Nerespectarea acestui lucru a însemnat că, în cazul căderii înapoi de la conexiuni SSL către conexiuni non-SSL, un eșec GSS / SASL în încercarea SSL ar determina întotdeauna încercarea non-SSL de a eșua. SSPI nu a eșuat, dar a scurs memoria.
- Acest comportament defect a fost observat pe platformele derivate de la BSD (inclusiv macOS), dar nu pe celelalte.
- Fixați pg_dump și pg_restore pentru a emula ultimele comenzi REFRESH MATERIALIZED VIEW (Tom Lane)
- Aceasta previne erorile în timpul procesării dump / restaurării atunci când o vizualizare materializată se referă la tabele deținute de un alt utilizator.
- Îmbunătățiți raportarea pg_dump / pg_restore a condițiilor de eroare originare din zlib (Vladimir Kunschikov, Alvaro Herrera)
- Fixați pg_dump cu opțiunea --clean pentru a renunța la declanșarea evenimentelor așa cum ați așteptat (Tom Lane)
- De asemenea, aceasta atribuie în mod corect proprietatea declanșatorilor de evenimente; înainte, au fost restaurate ca fiind deținute de superuserul care rulează scriptul de restaurare.
- Fixați pg_dump cu opțiunea --clean pentru a nu eșua când schema publică nu există (Stephen Frost)
- Fixați pg_dump pentru a nu emite SQL nevalid pentru o clasă de operatori goi (Daniel Gustafsson)
- Fixați ieșirea pg_dump la stdout pe Windows (Kuntal Ghosh)
- O înregistrare comprimată de text simplu scrisă în stdout ar conține date corupte din cauza lipsei de a pune descriptorul de fișier în modul binar.
- Fixați pg_get_ruledef () pentru a tipări ieșirea corectă pentru regula ON SELECT a unei imagini a cărei coloane au fost redenumite (Tom Lane)
- În unele cazuri de colț, pg_dump se bazează pe pg_get_ruledef () pentru a afișa vizualizările, astfel încât această eroare ar putea duce la eșecuri de tip dump / reload.
- Fixarea excesului de rosturi exterioare cu constrângeri goale, cum ar fi rezultatul unei legături NATURALE STÂNGA fără coloane comune (Tom Lane)
- Fixarea dumpingului expresiilor de funcții în clauza FROM în cazurile în care expresia nu se îndepărtează în ceva care arată ca un apel de funcție (Tom Lane)
- Fixați ieșirea pg_basebackup la stdout pe Windows (Haribabu Kommi)
- O copie de rezervă scrisă la stdout ar conține date corupte din cauza lipsei de a pune descriptorul de fișier în modul binar.
- Fixați pg_rewind pentru a gestiona corect fișiere de peste 2 GB (Kuntal Ghosh, Michael Paquier)
- În mod obișnuit, astfel de fișiere nu vor apărea în directoarele de date PostgreSQL, dar ar putea fi prezente în unele cazuri.
- Fixați pg_upgrade pentru a vă asigura că înregistrarea WAL terminată nu are wal_level = minim (Bruce Momjian)
- Această condiție ar putea împiedica reconectarea serverelor în așteptare.
- Fixați calculul pg_xlogdump pentru lungimea înregistrării WAL (Andres Freund)
- În postgres_fdw, restabiliți conexiunile la serverele la distanță după comenzile ALTER SERVER sau ALTER USER MAPPING (Kyotaro Horiguchi)
- Acest lucru asigură faptul că modificările opțiunilor care afectează parametrii conexiunii vor fi aplicate prompt.
- În postgres_fdw, permiteți anularea comenzilor de control la distanță (Robert Haas, Rafia Sabih)
- Această modificare ne permite să scăpăm rapid de așteptarea unui server la distanță care nu răspunde în mai multe cazuri decât în trecut.
- Creșteți MAX_SYSCACHE_CALLBACKS pentru a oferi mai mult spațiu pentru extensii (Tom Lane)
- Utilizați întotdeauna -fPIC, nu -fpic, atunci când construiți biblioteci partajate cu gcc (Tom Lane)
- Aceasta susține bibliotecile de extensii mai mari pe platforme unde face diferența.
- În MSVC se construiește, manipulați cazul în care biblioteca openssl nu se află într-un subdirector VC (Andrew Dunstan)
- În build-urile MSVC, adăugați calea corespunzătoare pentru fișierele cu antet libxml2 (Andrew Dunstan)
- Aceasta rezolvă o necesitate anterioară de a muta lucrurile în jurul instalațiilor standard Windows cu libxml2.
- În MSVC construiește, recunoaște o bibliotecă Tcl numită tcl86.lib (Noah Misch)
- În construirea MSVC, setați setările PROVE_FLAGS pe linia de comandă a vcregress.pl (Andrew Dunstan)
Comentariile nu a fost găsit