Независимо дали мигрирате база данни или проект от MySQL към PostgreSQL, или избирате PostgreSQL за нов проект само с познания за MySQL, има няколко неща, които трябва да знаете за PostgreSQL и разликите между двете системи за бази данни.
PostgreSQL е система за бази данни с напълно отворен код, издадена под собствен лиценз, PostgreSQL License, който се описва като „либерален лиценз с отворен код, подобен на лицензите BSD или MIT“. Това позволи на PostgreSQL Global Development Group (обикновено наричана PGDG), която разработва и поддържа проекта с отворен код, да подобри проекта с помощта на хора от цял свят, превръщайки го в едно от най-стабилните и богати на функции решения за бази данни Налице е. Днес PostgreSQL се конкурира с най-добрите собствени и отворени системи за бази данни за функции, производителност и популярност.
PostgreSQL е високо съвместима система за релационни бази данни, която е мащабируема, персонализирана и има процъфтяваща общност от хора, които я подобряват всеки ден.
От какво се нуждае PostgreSQL
В предишен блог обсъдихме настройката и оптимизирането на PostgreSQL за нов проект. Това е добро въведение в конфигурацията и поведението на PostgreSQL и може да бъде намерено тук:https://severalnines.com/blog/setting-optimal-environment-postgresql.
Ако мигрирате приложение от MySQL към PostgreSQL, най-доброто място за начало би било да го хоствате на подобен хардуер или хостинг платформа като изходната база данни на MySQL.
На място
Ако хоствате базата данни на място, голите хостове (а не виртуални машини) обикновено са най-добрият вариант за хостване на PostgreSQL. Виртуалните машини понякога добавят някои полезни функции, но те идват с цената на загуба на мощност и производителност от хоста като цяло, докато голият метал позволява на софтуера PostgreSQL да има пълен достъп до производителност с по-малко слоеве между него и хардуера. Локалните хостове ще се нуждаят от администратор, който да поддържа базите данни, независимо дали е служител на пълен работен ден или изпълнител, в зависимост от това, което е по-смислено за нуждите на приложението.
В облака
Облачният хостинг измина дълъг път през последните няколко години и безброй компании по целия свят хостват своите бази данни в облачни сървъри. Тъй като облачните хостове са много конфигурируеми, точният размер и мощност на хоста могат да бъдат избрани за специфичните нужди на базата данни, с цена, която съвпада.
В зависимост от използваната опция за хостинг, новите хостове могат да бъдат осигурени бързо, паметта / процесора / дискът могат да бъдат настроени бързо и дори могат да бъдат налични допълнителни методи за архивиране. Когато избирате облачен хост, потърсете дали хостът е специален или споделен, като специален е по-добър за бази данни с изключително високо натоварване. Друг ключ е да се уверите, че наличният IOPS за облачния хост е достатъчно добър за нуждите на дейността на базата данни. Дори и с голям пул памет за PostgreSQL, винаги ще има дискови операции за запис на данни на диск или извличане на данни, когато не са в паметта.
Облачни услуги
Тъй като популярността на PostgreSQL нараства, той се намира наличен в много услуги за хостинг на облачни бази данни като Heroku, Amazon AWS и други и бързо наваксва популярността на MySQL. Тези услуги позволяват на трета страна да хоства и управлява лесно PostgreSQL база данни, позволявайки фокусът да остане върху приложението.
Понятия/сравнения на термини
Има няколко сравнения, които да обхванете при мигриране от MySQL към PostgreSQL, общи параметри на конфигурация, термини или концепции, които работят по подобен начин, но имат своите разлики.
Условия на базата данни
Различните термини в базата данни могат да имат различни значения в рамките на различни реализации на технологията. Между MySQL и PostgreSQL има няколко основни термина, които се разбират малко по-различно, така че понякога е необходим превод.
„Клъстер“
В MySQL „клъстер“ обикновено се отнася до множество хостове на база данни на MySQL, свързани заедно, за да изглеждат като една база данни или набор от бази данни за клиенти.
В PostgreSQL, когато се позовава на „клъстер“, това е единичен работещ екземпляр на софтуера на базата данни и всички негови подпроцеси, който след това съдържа една или повече бази данни.
„База данни“
В MySQL заявките могат да имат достъп до таблици от различни бази данни по едно и също време (при условие, че потребителят има разрешение за достъп до всяка база данни).
SELECT *
FROM customer_database.customer_table t1
JOIN orders_database.order_table t2 ON t1.customer_id = t2.customer_id
WHERE name = ‘Bob’;
В PostgreSQL обаче това не може да се случи, освен ако не използвате обвивки на чужди данни (тема за друг път). Вместо това PostgreSQL база данни има опция за множество „схеми“, които работят подобно на базите данни в MySQL. Схемите съдържат таблиците, индексите и т.н. и могат да бъдат достъпни едновременно от същата връзка към базата данни, в която се намират.
SELECT *
FROM customer_schema.customer_table t1
JOIN orders_schema.order_table t2 ON t1.customer_id = t2.customer_id
WHERE name = ‘Bob’;
Интерфейс с PostgreSQL
В клиента на командния ред на MySQL (mysql), взаимодействието с базата данни използва ключови работи като „DESCRIBE table“ или „SHOW TABLES“. Клиентът на командния ред на PostgreSQL (psql) използва своя собствена форма на „команди обратно наклонена черта“. Например, вместо „ПОКАЖИ ТАБЛИЦИТЕ“, командата на PostgreSQL е „\dt“, а вместо „ПОКАЖИ БАЗА ДАННИ;“, командата е „\l“.
Пълен списък с команди за „psql“ може да бъде намерен чрез обратната наклонена черта команда „\?“ в psql.
Езикова поддръжка
Подобно на MySQL, PostgreSQL има библиотеки и плъгини за всички основни езици, както и ODBC драйвери по линия на MySQL и Oracle. Намирането на страхотна и стабилна библиотека за всеки необходим език е лесна задача.
Съхранени процедури
За разлика от MySQL, PostgreSQL има широка гама от поддържани процедурни езици, от които да избирате. В базовата инсталация на PostgreSQL поддържаните езици са PL/pgSQL (процедурен език на SQL), PL/Tcl (процедурен език Tcl), PL/Perl (процедурен език на Perl) и PL/Python (процедурен език на Python). Разработчиците на трети страни може да имат повече езици, които не се поддържат официално от основната група PostgreSQL.
Конфигурация
-
Памет
MySQL настройва това с key_buffer_size, когато използвате MyISAM, и с innodb_buffer_pool_size, когато използвате InnoDB.
PostgreSQL използва shared_buffers за основния блок памет, даден на базата данни за кеширане на данни, и обикновено остава около 1/4 от системната памет, освен ако определени сценарии не изискват това да се промени. Заявките, използващи памет за сортиране, използват стойността work_mem, която трябва да се увеличава внимателно.
Инструменти за миграция
Мигрирането към PostgreSQL може да отнеме известна работа, но има инструменти, които общността е разработила, за да помогне с процеса. Обикновено те ще конвертират/мигрират данните от MySQL към PostgreSQL и ще пресъздават таблици/индекси. Съхранените процедури или функции са различна история и обикновено изискват ръчно пренаписване или частично, или от самото начало.
Някои налични примерни инструменти са pgloader и FromMySqlToPostgreSql. Pgloader е инструмент, написан на Common Lisp, който импортира данни от MySQL в PostgreSQL с помощта на командата COPY и зарежда данни, индекси, външни ключове и коментари с преобразуване на данни, за да представи данните правилно в PostgreSQL, както е предвидено. FromMySqlToPostgreSql е подобен инструмент, написан на PHP и може да конвертира MySQL типове данни в PostgreSQL, както и външни ключове и индекси. И двата инструмента са безплатни, но съществуват много други инструменти (безплатни и платени) и са новоразработени с пускането на нови версии на всеки софтуер за база данни.
Преобразуването винаги трябва да включва задълбочена оценка след миграцията, за да се увери, че данните са преобразувани правилно и функционалността работи според очакванията. Винаги се насърчава предварителното тестване за времена и валидиране на данните.
Опции за репликация
Ако идва от MySQL, където е била използвана репликация, или изобщо е необходима репликация по някаква причина, PostgreSQL има няколко налични опции, всяка със своите плюсове и минуси, в зависимост от това какво е необходимо чрез репликация.
-
Вградено:
По подразбиране PostgreSQL има собствен вграден режим на репликация за Point In Time Recovery (PITR). Това може да се настрои с помощта на базирана на файлове доставка на регистрационни файлове, при която регистрационните файлове за запис напред се изпращат до сървър в режим на готовност, където се четат и възпроизвеждат повторно, или поточно репликация, където сървърът в режим на готовност само за четене извлича регистрационни файлове на транзакции през връзка с база данни за повторно възпроизвеждане тях.
Една от тези вградени опции може да бъде настроена като „топъл режим на готовност“ или „горещ режим на готовност“. „Топъл режим на готовност“ не позволява връзки, но е готов да стане главен по всяко време, за да замени главен, който има проблеми . „Горещ режим на готовност“ позволява на връзки само за четене да се свързват и да издават заявки, в допълнение към готовността да станете главен за четене/запис по всяко време, ако е необходимо.
-
Слони:
Един от най-старите инструменти за репликация за PostgreSQL е Slony, който е метод за репликация, базиран на тригери, който позволява високо ниво на персонализиране. Slony позволява настройката на главен възел и произволен брой реплики възли, както и възможността за превключване на главния към всеки желан възел и позволява на администратора да избере кои таблици (ако не иска всички таблици) да репликира. Използва се не само за репликиране на данни в случай на повреда/балансиране на натоварването, но и за изпращане на специфични данни до други услуги или дори за минимални надстройки при престой, тъй като репликацията може да се извършва в различни версии на PostgreSQL.
Slony има основното изискване всяка таблица, която трябва да бъде репликирана, да има или ПЪРВИЧЕН КЛЮЧ, или УНИКАЛЕН индекс без колони с нула.
-
Букардо:
Когато става въпрос за опции за няколко главни, Bucardo е един от малкото за PostgreSQL. Подобно на Slony, това е софтуерен пакет на трета страна, който се намира върху PostgreSQL. Bucardo нарича себе си „асинхронна система за репликация на PostgreSQL, позволяваща както мулти-главни, така и многоподчинени операции. Основното предимство е репликацията с множество глави, която работи доста добре, но липсва разрешаване на конфликти, така че приложенията трябва да са наясно с възможните проблеми и да коригират съответно.
Има и много други инструменти за репликация и намирането на този, който работи най-добре за дадено приложение, зависи от конкретните нужди.
Общност
PostgreSQL има процъфтяваща общност, която желае да помогне с всякакви проблеми/информация, които може да са необходими.
-
IRC
Активна IRC чат стая с име #postgresql е достъпна на freenode, тъй като администратори и разработчици по целия свят говорят за PostgreSQL и свързани проекти/проблеми. Има дори по-малки стаи за подробности като Slony, Bucardo и др.
-
Пощенски списъци
Има няколко пощенски списъци на PostgreSQL за „общ“, „администратор“, „производителност“ и дори „начинаещ“ (чудесно място да започнете, ако сте нови в PostgreSQL като цяло). Пощенските списъци са абонирани от много хора по света и предоставят много полезни ресурси за отговор на всеки въпрос, на който може да се наложи отговор.
Пълен списък с пощенски списъци на PostgreSQL можете да намерите на https://www.postgresql.org/list/
-
Потребителски групи
Потребителските групи са чудесно място за включване и активност в общността и много големи градове по света разполагат с PostgreSQL User Group (PUG), за да се присъедините и да присъствате, а ако не, помислете за стартиране на такава. Тези групи са чудесни за работа в мрежа, изучаване на нови технологии и дори просто задаване на въпроси лично на хора с всякакво ниво на опит.
-
Документация
Най-важното е, че PostgreSQL е документиран много добре. Всяка информация за конфигурационни параметри, SQL функции, използване, всичко може лесно да бъде научено чрез официалната документация, предоставена на уебсайта на PostgreSQL. Ако изобщо нещо е неясно, общността ще помогне в предишните очертани опции.