Op 3 oktober 2019 werd een nieuwe versie van 's werelds meest geavanceerde open source database uitgebracht. PostgreSQL 12 is nu beschikbaar met opmerkelijke verbeteringen aan de prestaties van query's (met name over grotere datasets en algemeen ruimtegebruik), naast andere belangrijke functies.
In deze blog bekijken we deze nieuwe functies en laten we je zien hoe je deze nieuwe PostgreSQL 12-versie kunt krijgen en installeren. We zullen ook enkele overwegingen onderzoeken waarmee u rekening moet houden bij het upgraden.
PostgreSQL 12-functies en verbeteringen
Laten we beginnen met het noemen van enkele van de belangrijkste functies en verbeteringen van deze nieuwe PostgreSQL-versie.
Indexeren
- Er is een optimalisatie voor ruimtegebruik en lees-/schrijfprestaties voor B-Tree-indexen.
- Verlaging van WAL-overhead voor het maken van GiST-, GIN- en SP-GiST-indexen.
- U kunt K-nearest-buur-query's uitvoeren met de afstandsoperator (<->) met behulp van SP-GiST-indexen.
- Herstel indexen opnieuw zonder schrijfbewerkingen naar een index te blokkeren via de opdracht REINDEX CONCURRENTLY, zodat gebruikers downtime-scenario's voor langdurige indexreconstructies kunnen voorkomen.
Partitionering
- Er zijn verbeteringen ten opzichte van query's op gepartitioneerde tabellen, met name voor tabellen met duizenden partities die alleen gegevens uit een beperkte subset hoeven op te halen.
- Prestatieverbeteringen voor het toevoegen van gegevens aan gepartitioneerde tabellen met INSERT en COPY.
- U kunt een nieuwe partitie aan een tabel koppelen zonder query's te blokkeren.
SQL
- U kunt nu query's uitvoeren op JSON-documenten met behulp van JSON-padexpressies die zijn gedefinieerd in de SQL/JSON-standaard en ze kunnen de bestaande indexeringsmechanismen gebruiken voor documenten die zijn opgeslagen in de JSONB-indeling om gegevens efficiënt op te halen.
- MET query's kunnen nu automatisch worden ingevoegd door PostgreSQL 12 (als het niet recursief is, geen bijwerkingen heeft en er slechts één keer naar wordt verwezen in een later deel van een query), wat op zijn beurt kan helpen de prestaties te verbeteren van veel bestaande zoekopdrachten.
- Introduceert 'gegenereerde kolommen'. Dit type kolom berekent zijn waarde uit de inhoud van andere kolommen in dezelfde tabel. Het opslaan van deze berekende waarde hierop wordt ook ondersteund.
Internationalisering
- PostgreSQL 12 breidt zijn ondersteuning van ICU-sorteringen uit door gebruikers in staat te stellen "niet-deterministische sorteringen" te definiëren die bijvoorbeeld hoofdletterongevoelige of accentongevoelige vergelijkingen mogelijk maken.
Verificatie
- Introduceert zowel client- als server-side encryptie voor authenticatie via GSSAPI-interfaces.
- De PostgreSQL-service kan LDAP-servers detecteren als deze is gecompileerd met OpenLDAP.
- Multi-factor authenticatie, met behulp van de clientcert=verify-full optie en een extra authenticatiemethode die is geconfigureerd in het pg_hba.conf-bestand.
Als u wilt profiteren van deze nieuwe functies en verbeteringen, kunt u naar de downloadpagina gaan en de laatste PostgreSQL-versie downloaden. Als je een HA-configuratie nodig hebt, is hier een blog om je te laten zien hoe je PostgreSQL voor HA installeert en configureert.
PostgreSQL 12 installeren
Voor dit voorbeeld gaan we CentOS7 als besturingssysteem gebruiken. We moeten dus naar de op RedHat gebaseerde OS-downloadsite gaan en de bijbehorende versie installeren.
$ yum install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
Het zal de PostgreSQL-repository installeren met stabiele, test- en bronpakketten.
$ 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
...
Installeer vervolgens de client- en server PostgreSQL12-pakketten. Het zal enkele python-afhankelijkheden installeren.
$ yum install postgresql12 postgresql12-server
Nu kunt u uw nieuwe PostgreSQL 12-database initialiseren.
$ /usr/pgsql-12/bin/postgresql-12-setup initdb
Initializing database ... OK
En activeer/start de PostgreSQL-service.
$ 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
En dat is het. U heeft de nieuwe PostgreSQL-versie in gebruik.
$ 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 u de laatste PostgreSQL-versie heeft geïnstalleerd, kunt u uw gegevens migreren naar dit nieuwe databaseknooppunt.
Upgraden naar PostgreSQL 12
Als u uw huidige PostgreSQL-versie wilt upgraden naar deze nieuwe, heeft u drie hoofdopties waarmee u deze taak kunt uitvoeren.
- pg_dump :Het is een logische back-uptool waarmee u uw gegevens kunt dumpen en terugzetten in de nieuwe PostgreSQL-versie. Hier heb je een periode van downtime die zal variëren afhankelijk van je gegevensgrootte. Je moet het systeem stoppen of nieuwe gegevens in het hoofdknooppunt vermijden, de pg_dump uitvoeren, de gegenereerde dump verplaatsen naar het nieuwe databaseknooppunt en deze herstellen. Gedurende deze tijd kunt u niet in uw master PostgreSQL-database schrijven om inconsistentie van gegevens te voorkomen.
- Pg_upgrade :Het is een PostgreSQL-tool om uw PostgreSQL-versie ter plaatse te upgraden. In een productieomgeving kan het gevaarlijk zijn en in dat geval raden we deze methode niet aan. Als je deze methode gebruikt, heb je ook downtime, maar waarschijnlijk zal dit aanzienlijk minder zijn dan met de vorige pg_dump-methode.
- Logische replicatie :Sinds PostgreSQL 10 kunt u deze replicatiemethode gebruiken waarmee u grote versie-upgrades kunt uitvoeren met nul (of bijna nul) downtime. Op deze manier kunt u een standby-knooppunt toevoegen in de laatste PostgreSQL-versie, en wanneer de replicatie up-to-date is, kunt u een failoverproces uitvoeren om het nieuwe PostgreSQL-knooppunt te promoten.
Overwegingen alvorens te upgraden naar PostgreSQL 12
Over het algemeen zijn er voor alle upgradeprocessen en in alle technologie verschillende punten waarmee u rekening moet houden. Laten we enkele van de belangrijkste bekijken.
- Gegevenstypen abstime, reltime en tinterval zijn verwijderd.
- De recovery.conf-instellingen staan in het postgresql.conf-bestand en worden niet langer gebruikt. Als u dit bestand heeft aangemaakt, zal de server niet starten. De bestanden recovery.signal en standby.signal worden nu gebruikt om over te schakelen naar de niet-primaire modus. De trigger_file-instelling is hernoemd naar promotion_trigger_file en de standby_mode-instelling is verwijderd.
- De meerdere tegenstrijdige recovery_target-specificaties zijn niet toegestaan.
- De specificatie van "-f" om de dumpinhoud naar standaarduitvoer te sturen is vereist in pg_restore.
- De maximale lengte van het indexitem is in de B-Tree-indexen met acht bytes verminderd om de verwerking van dubbele items te verbeteren. REINDEX-bewerking op een index pg_upgrade'd van een vorige versie kan mislukken.
- DROP IF EXISTS FUNCTION/PROCEDURE/AGGREGATE/ROUTINE genereert een fout als er geen argumentenlijst is opgegeven en er meerdere overeenkomende objecten zijn.
Voor meer gedetailleerde informatie over de nieuwe PostgreSQL 12-functies en overweging voordat u ernaar migreert, kunt u de webpagina met officiële release-opmerkingen raadplegen.