Den 3. oktober 2019 blev en ny version af verdens mest avancerede open source-database frigivet. PostgreSQL 12 er nu tilgængelig med bemærkelsesværdige forbedringer til forespørgselsydeevne (især over større datasæt og overordnet pladsudnyttelse) blandt andre vigtige funktioner.
I denne blog tager vi et kig på disse nye funktioner og viser dig, hvordan du får og installerer denne nye PostgreSQL 12-version. Vi vil også undersøge nogle overvejelser, der skal tages i betragtning, når du opgraderer.
PostgreSQL 12 funktioner og forbedringer
Lad os begynde at nævne nogle af de vigtigste funktioner og forbedringer af denne nye PostgreSQL-version.
Indeksering
- Der er en optimering af pladsudnyttelse og læse-/skriveydelse for B-Tree-indekser.
- Reduktion af WAL-overhead til oprettelse af GiST-, GIN- og SP-GiST-indekser.
- Du kan udføre K-nærmeste nabo-forespørgsler med afstandsoperatøren (<->) ved hjælp af SP-GiST-indekser.
- Genopbyg indekser uden at blokere skrivninger til et indeks via kommandoen REINDEX CONCURRENTLY, hvilket giver brugerne mulighed for at undgå nedetidsscenarier for længerevarende indeksgenopbygninger.
Partitionering
- Der er forbedringer i forhold til forespørgsler på partitionerede tabeller, især for tabeller med tusindvis af partitioner, der kun behøver at hente data fra et begrænset undersæt.
- Ydeevneforbedringer for tilføjelse af data til partitionerede tabeller med INSERT og COPY.
- Du vil være i stand til at vedhæfte en ny partition til en tabel uden at blokere forespørgsler.
SQL
- Du kan nu køre forespørgsler over JSON-dokumenter ved hjælp af JSON-stiudtryk defineret i SQL/JSON-standarden, og de kan bruge de eksisterende indekseringsmekanismer for dokumenter, der er gemt i JSONB-formatet, til effektivt at hente data.
- WITH-forespørgsler kan nu automatisk indlejres af PostgreSQL 12 (hvis det ikke er rekursivt, ikke har nogen bivirkninger og kun refereres én gang i en senere del af en forespørgsel), hvilket igen kan hjælpe med at øge ydeevnen af mange eksisterende forespørgsler.
- Introducerer "genererede kolonner." Denne type kolonne beregner dens værdi ud fra indholdet af andre kolonner i samme tabel. Lagring af denne beregnede værdi på denne understøttes også.
Internationalisering
- PostgreSQL 12 udvider sin understøttelse af ICU-sammenstillinger ved at give brugerne mulighed for at definere "ikke-deterministiske sammenstillinger", der for eksempel kan tillade sammenligninger uden store og små bogstaver eller accentufølsomme.
Godkendelse
- Introducerer både klient- og serverkryptering til godkendelse over GSSAPI-grænseflader.
- PostgreSQL-tjenesten er i stand til at opdage LDAP-servere, hvis den er kompileret med OpenLDAP.
- Multifaktorgodkendelse ved hjælp af clientcert=verify-full-indstillingen og en ekstra godkendelsesmetode, der er konfigureret i filen pg_hba.conf.
Hvis du vil drage fordel af disse nye funktioner og forbedringer, kan du gå til downloadsiden og få den sidste PostgreSQL-version. Hvis du har brug for en HA-opsætning, er her en blog, der viser dig, hvordan du installerer og konfigurerer PostgreSQL til HA.
Sådan installeres PostgreSQL 12
I dette eksempel skal vi bruge CentOS7 som operativsystem. Så vi er nødt til at gå til den RedHat-baserede OS-downloadside og installere den tilsvarende version.
$ yum install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
Det vil installere PostgreSQL-lageret med stabile, test- og kildepakker.
$ head /etc/yum.repos.d/pgdg-redhat-all.repo
# PGDG Red Hat Enterprise Linux / CentOS stable repositories:
[pgdg12]
name=PostgreSQL 12 for RHEL/CentOS $releasever - $basearch
baseurl=https://download.postgresql.org/pub/repos/yum/12/redhat/rhel-$releasever-$basearch
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG
...
Installer derefter klient- og server-PostgreSQL12-pakkerne. Det vil installere nogle python-afhængigheder.
$ yum install postgresql12 postgresql12-server
Nu kan du initialisere din nye PostgreSQL 12-database.
$ /usr/pgsql-12/bin/postgresql-12-setup initdb
Initializing database ... OK
Og aktiver/start PostgreSQL-tjenesten.
$ systemctl enable postgresql-12
Created symlink from /etc/systemd/system/multi-user.target.wants/postgresql-12.service to /usr/lib/systemd/system/postgresql-12.service.
$ systemctl start postgresql-12
Og det er det. Du har den nye PostgreSQL-version oppe at køre.
$ psql
psql (12.0)
Type "help" for help.
postgres=# select version();
version
---------------------------------------------------------------------------------------------------------
PostgreSQL 12.0 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39), 64-bit
(1 row)
Nu har du installeret den sidste PostgreSQL-version, kan du migrere dine data til denne nye databasenode.
Opgradering til PostgreSQL 12
Hvis du vil opgradere din nuværende PostgreSQL-version til denne nye, har du tre hovedmuligheder, som vil udføre denne opgave.
- pg_dump :Det er et logisk backupværktøj, der giver dig mulighed for at dumpe dine data og gendanne dem i den nye PostgreSQL-version. Her vil du have en nedetidsperiode, der vil variere i forhold til din datastørrelse.. Du skal stoppe systemet eller undgå nye data i masterknuden, køre pg_dump, flytte det genererede dump til den nye databasenode og gendanne det. I løbet af denne tid kan du ikke skrive ind i din master PostgreSQL-database for at undgå datainkonsistens.
- Pg_upgrade :Det er et PostgreSQL-værktøj til at opgradere din PostgreSQL-version på stedet. Det kan være farligt i et produktionsmiljø, og vi anbefaler ikke denne metode i så fald. Ved at bruge denne metode vil du også have nedetid, men sandsynligvis vil det være betydeligt mindre end ved at bruge den tidligere pg_dump-metode.
- Logisk replikering :Lige siden PostgreSQL 10 har du været i stand til at bruge denne replikeringsmetode, som giver dig mulighed for at udføre større versionsopgraderinger med nul (eller næsten nul) nedetid. På denne måde kan du tilføje en standby-node i den sidste PostgreSQL-version, og når replikeringen er opdateret, kan du udføre en failover-proces for at fremme den nye PostgreSQL-node.
Overvejelser før opgradering til PostgreSQL 12
Generelt, for alle opgraderingsprocesser og i al teknologi, er der flere punkter at tage hensyn til. Lad os se nogle af de vigtigste.
- Datatyperne abstime, reltime og tinterval blev fjernet.
- Recovery.conf-indstillingerne er i postgresql.conf-filen, og den bruges ikke længere. Hvis du har oprettet denne fil, starter serveren ikke. Filerne recovery.signal og standby.signal-filer bruges nu til at skifte til ikke-primær tilstand. Trigger_file-indstillingen er blevet omdøbt til promote_trigger_file, og standby_mode-indstillingen er blevet fjernet.
- De flere modstridende recovery_target-specifikationer er ikke tilladt.
- Specifikationen af "-f" for at sende dumpindholdet til standardoutput er påkrævet i pg_restore.
- Den maksimale indeksindtastningslængde er reduceret med otte bytes i B-Tree-indekserne for at forbedre håndteringen af duplikerede poster. REINDEX-operation på et index pg_upgrade'd fra en tidligere version kunne mislykkes.
- DROP HVIS FINDER FUNKTION/PROCEDURE/AGGREGAT/RUTINE genererer en fejl, hvis der ikke er angivet en argumentliste, og der er flere matchende objekter.
For mere detaljeret information om de nye PostgreSQL 12-funktioner og overvejelser, før du migrerer til den, kan du henvise til den officielle udgivelsesbemærkning-webside.