На 3 октомври 2019 г. беше пусната нова версия на най-модерната в света база данни с отворен код. PostgreSQL 12 вече е наличен със забележими подобрения в производителността на заявките (особено при по-големи набори от данни и общото използване на пространството), наред с други важни функции.
В този блог ще разгледаме тези нови функции и ще ви покажем как да получите и инсталирате тази нова версия на PostgreSQL 12. Ще разгледаме и някои съображения, които да вземем предвид при надстройката.
Функции и подобрения на PostgreSQL 12
Нека започнем да споменаваме някои от най-важните функции и подобрения на тази нова версия на PostgreSQL.
Индексиране
- Има оптимизация за използване на пространството и производителност на четене/запис за B-Tree индекси.
- Намаляване на разходите за WAL за създаване на индекси GiST, GIN и SP-GiST.
- Можете да изпълнявате заявки за K-най-близък съсед с оператора за разстояние (<->), като използвате SP-GiST индекси.
- Повторно изграждане на индекси без блокиране на записване в индекс чрез командата REINDEX CONCURRENTLY, което позволява на потребителите да избягват сценарии на престой при продължително възстановяване на индекси.
Разделяне на дялове
- Има подобрения спрямо заявките в разделени таблици, особено за таблици с хиляди дялове, които трябва само да извличат данни от ограничено подмножество.
- Подобрения в производителността за добавяне на данни към разделени таблици с INSERT и COPY.
- Ще можете да прикачите нов дял към таблица, без да блокирате заявки.
SQL
- Вече можете да изпълнявате заявки върху JSON документи, като използвате изрази за пътя на JSON, дефинирани в стандарта SQL/JSON, и те могат да използват съществуващите механизми за индексиране на документи, съхранявани във формат JSONB, за ефективно извличане на данни.
- Заявките WITH вече могат да бъдат автоматично вградени от PostgreSQL 12 (ако не е рекурсивно, няма никакви странични ефекти и се препраща само веднъж в по-късна част на заявка), което от своя страна може да помогне за повишаване на производителността от много съществуващи заявки.
- Въвежда „генерирани колони“. Този тип колона изчислява стойността си от съдържанието на други колони в същата таблица. Съхраняването на тази изчислена стойност върху това също се поддържа.
Интернационализация
- PostgreSQL 12 разширява подкрепата си за съпоставяне на ICU, като позволява на потребителите да дефинират "недетерминирани съпоставяния", които могат например да позволяват сравнения без значение на главния или без акцент.
Удостоверяване
- Въвежда криптиране както от страна на клиента, така и от страна на сървъра за удостоверяване през GSSAPI интерфейси.
- Услугата PostgreSQL може да открива LDAP сървъри, ако е компилирана с OpenLDAP.
- Многофакторно удостоверяване, използващо опцията clientcert=verify-full и допълнителен метод за удостоверяване, конфигуриран във файла pg_hba.conf.
Ако искате да се възползвате от тези нови функции и подобрения, можете да отидете на страницата за изтегляне и да получите последната версия на PostgreSQL. Ако имате нужда от настройка на HA, ето блог, който да ви покаже как да инсталирате и конфигурирате PostgreSQL за HA.
Как да инсталирате PostgreSQL 12
За този пример ще използваме CentOS7 като операционна система. И така, трябва да отидем на сайта за изтегляне на базираната на RedHat ОС и да инсталираме съответната версия.
$ yum install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
Той ще инсталира PostgreSQL хранилището със стабилни, тестови и изходни пакети.
$ 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
...
След това инсталирайте клиентските и сървърните PostgreSQL12 пакети. Той ще инсталира някои зависимости на python.
$ yum install postgresql12 postgresql12-server
Сега можете да инициализирате новата си база данни PostgreSQL 12.
$ /usr/pgsql-12/bin/postgresql-12-setup initdb
Initializing database ... OK
И активирайте/стартирайте услугата PostgreSQL.
$ 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
И това е всичко. Имате и стартирате новата версия на PostgreSQL.
$ 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)
Сега сте инсталирали последната версия на PostgreSQL, можете да мигрирате данните си в този нов възел на базата данни.
Надстройване до PostgreSQL 12
Ако искате да надстроите текущата си версия на PostgreSQL до тази нова, имате три основни опции, които ще изпълнят тази задача.
- pg_dump :Това е логически инструмент за архивиране, който ви позволява да изхвърлите данните си и да ги възстановите в новата версия на PostgreSQL. Тук ще имате период на прекъсване, който ще варира в зависимост от размера на вашите данни.. Трябва да спрете системата или да избегнете нови данни в главния възел, да стартирате pg_dump, да преместите генерирания дъмп в новия възел на базата данни и да го възстановите. През това време не можете да пишете в основната си база данни PostgreSQL, за да избегнете несъответствие на данните.
- Pg_upgrade :Това е PostgreSQL инструмент за надграждане на вашата PostgreSQL версия на място. Може да бъде опасно в производствена среда и ние не препоръчваме този метод в този случай. Използвайки този метод, вие също ще имате време за престой, но вероятно то ще бъде значително по-малко от използването на предишния метод pg_dump.
- Логическа репликация :Още от PostgreSQL 10 можете да използвате този метод на репликация, който ви позволява да извършвате големи надстройки на версията с нулев (или почти нулев) престой. По този начин можете да добавите резервен възел в последната версия на PostgreSQL и когато репликацията е актуална, можете да извършите процес на отказ, за да популяризирате новия PostgreSQL възел.
Съображения преди надстройване до PostgreSQL 12
Общо взето, за всички процеси на надстройка и във всички технологии има няколко точки, които трябва да се вземат предвид. Нека видим някои от основните.
- Типове данни abstime, reltime и tinterval бяха премахнати.
- Настройките recovery.conf са във файла postgresql.conf и той вече не се използва. Ако имате създаден този файл, сървърът няма да стартира. Файловете recovery.signal и standby.signal сега се използват за превключване в неосновен режим. Настройката trigger_file е преименувана на promote_trigger_file и настройката standby_mode е премахната.
- Множеството противоречиви спецификации на recovery_target не са разрешени.
- Спецификацията на “-f” за изпращане на съдържанието на дъмпа към стандартния изход се изисква в pg_restore.
- Максималната дължина на записа в индекса е намалена с осем байта в индексите на B-дървото, за да се подобри обработката на дублиращи се записи. Операцията REINDEX на индекс pg_upgrade'd от предишна версия може да се провали.
- ОТПУСКАНЕ, АКО СЪЩЕСТВУВА ФУНКЦИЯ/ПРОЦЕДУРА/АГРЕГАТ/ПРОЦЕДУРА генерира грешка, ако не е предоставен списък с аргументи и има множество съвпадащи обекти.
За по-подробна информация относно новите функции на PostgreSQL 12 и обмисляне, преди да преминете към него, можете да се обърнете към уеб страницата с официални бележки по изданието.