Посібник з основних команд PostgreSQL та відмінностей від MariaDB (MySQL)
Як досвідчений користувач MariaDB, що переходить на PostgreSQL, важливо зрозуміти ключові відмінності в командах, утилітах та функціях між двома системами. Хоча обидві є потужними системами керування реляційними базами даних (СКРБД) і мають схожий синтаксис SQL, PostgreSQL вводить унікальні концепції та команди. Цей посібник зосереджений на цих відмінностях, щоб допомогти вам швидко розібратися.
1. Інструменти командного рядка
Доступ до бази даних
- MariaDB/MySQL:
- PostgreSQL:
Поширені мета-команди psql
В інтерактивному терміналі PostgreSQL (psql) мета-команди починаються зі зворотного слешу (\):
\l— Показати список усіх баз даних.\c database_name— Підключитися до бази даних.\dt— Показати список таблиць у поточній схемі.\d table_name— Описати структуру таблиці.\du— Показати список усіх ролей (користувачів).\q— Вийти зpsql.
2. Керування користувачами та ролями
Створення користувачів/ролей
- MariaDB/MySQL:
- PostgreSQL:
Примітка: У PostgreSQL "роль" може діяти як користувач і як група. Додавання WITH LOGIN дозволяє ролі входити в систему.
Надання привілеїв
- MariaDB/MySQL:
- PostgreSQL:
3. Керування базами даних
Створення та видалення баз даних
- Створення бази даних:
-
MariaDB/MySQL:
-
PostgreSQL:
-
Видалення бази даних:
-
Однаково в обох:
Список баз даних
- MariaDB/MySQL:
- PostgreSQL:
-
За допомогою мета-команди
psql: -
Або SQL-запиту:
4. Відмінності типів даних
Автоінкрементні стовпці
- MariaDB/MySQL:
- PostgreSQL:
SERIAL— це псевдотип, який створює цілочисельний стовпець з пов'язаною послідовністю.
Булевий тип
- MariaDB/MySQL:
-
Немає нативного
BOOLEAN; використовуєTINYINT(1). -
PostgreSQL:
- Нативний тип
BOOLEANзі значеннямиTRUEабоFALSE.
Строкові типи даних
- MariaDB/MySQL:
-
VARCHAR,TEXT,BLOBтощо. -
PostgreSQL:
- Схожі типи, але
TEXTчасто використовується замість великогоVARCHAR.
5. Конкатенація рядків
- MariaDB/MySQL:
- PostgreSQL:
6. Умовні вирази
IF проти CASE
- MariaDB/MySQL:
- PostgreSQL:
7. Операції Upsert
Вставка або оновлення
- MariaDB/MySQL:
- PostgreSQL:
INSERT INTO table_name (...) VALUES (...) ON CONFLICT (unique_column) DO UPDATE SET column=EXCLUDED.column;
EXCLUDEDпосилається на значення, запропоновані для вставки.
8. Limit та Offset
- MariaDB/MySQL:
- PostgreSQL:
-
Той самий синтаксис, але також підтримує
FETCH:
9. Функції дати та часу
Поточна дата та час
- MariaDB/MySQL:
- PostgreSQL:
Арифметика дат
- MariaDB/MySQL:
- PostgreSQL:
10. Регулярні вирази
- MariaDB/MySQL:
- PostgreSQL:
-
З урахуванням регістру:
-
Без урахування регістру:
11. Конфігураційні файли
Розташування конфігурації
- MariaDB/MySQL:
-
Основна конфігурація в
my.cnfабоmy.ini. -
PostgreSQL:
- Основна конфігурація в
postgresql.conf. - Автентифікація клієнтів у
pg_hba.conf.
Примітка: pg_hba.conf контролює автентифікацію на основі хоста і є критичним для налаштування безпеки.
12. Імпорт/Експорт даних
Імпорт даних
- MariaDB/MySQL:
- PostgreSQL:
Експорт даних
- MariaDB/MySQL:
- PostgreSQL:
13. Послідовності
- MariaDB/MySQL:
-
Використовує
AUTO_INCREMENTдля автоінкрементних стовпців. -
PostgreSQL:
-
Використовує послідовності, які можна створювати незалежно.
-
Може бути пов'язана зі стовпцем таблиці.
14. Чутливість до регістру в ідентифікаторах
- MariaDB/MySQL:
-
Загалом нечутливий до регістру для ідентифікаторів.
-
PostgreSQL:
- Перетворює ідентифікатори без лапок у нижній регістр.
-
Ідентифікатори в лапках чутливі до регістру.
15. Збережені процедури та функції
Визначення функцій
- MariaDB/MySQL:
DELIMITER $$
CREATE FUNCTION function_name(parameters) RETURNS return_type
BEGIN
-- тіло функції
END$$
DELIMITER ;
- PostgreSQL:
CREATE FUNCTION function_name(parameters) RETURNS return_type AS $$
BEGIN
-- тіло функції
END;
$$ LANGUAGE plpgsql;
Збережені процедури
- MariaDB/MySQL:
-
Підтримує збережені процедури.
-
PostgreSQL:
-
Ввів
CREATE PROCEDUREу версії 11.
16. Представлення та матеріалізовані представлення
Представлення
- Однаково в обох:
Матеріалізовані представлення
- MariaDB/MySQL:
-
Не підтримує матеріалізовані представлення нативно.
-
PostgreSQL:
- Оновлення матеріалізованих представлень:
17. Підтримка JSON
- MariaDB/MySQL:
-
Підтримує тип даних JSON та функції.
-
PostgreSQL:
- Пропонує розширену підтримку JSON з типами даних
jsonтаjsonb. -
JSON-функції та оператори:
18. Система розширень
- MariaDB/MySQL:
-
Використовує плагіни.
-
PostgreSQL:
-
Підтримує розширення для додавання функціональності.
-
Поширені розширення включають
hstore,uuid-ossp,pgcryptoтаPostGIS.
19. Обгортки зовнішніх даних (FDW)
- MariaDB/MySQL:
-
Обмежені можливості зовнішніх таблиць.
-
PostgreSQL:
- Підтримує FDW для запитів до зовнішніх джерел даних (наприклад, інших баз даних, файлів).
Приклад:
CREATE EXTENSION postgres_fdw;
CREATE SERVER foreign_server FOREIGN DATA WRAPPER postgres_fdw OPTIONS (host 'remote_host', dbname 'remote_db');
CREATE USER MAPPING FOR current_user SERVER foreign_server OPTIONS (user 'remote_user', password 'password');
IMPORT FOREIGN SCHEMA public FROM SERVER foreign_server INTO local_schema;
20. Керування транзакціями
-
Явні транзакції:
-
MariaDB/MySQL:
-
PostgreSQL:
-
Точки збереження:
-
Обидві підтримують:
21. Дамп та відновлення баз даних
Дамп
- MariaDB/MySQL:
- PostgreSQL:
Відновлення
- MariaDB/MySQL:
- PostgreSQL:
Висновок
Перехід з MariaDB/MySQL на PostgreSQL передбачає адаптацію до інших команд та функцій. PostgreSQL пропонує розширені можливості, такі як потужна робота з JSON, корисні розширення та більш широкий набір типів даних.
Наступні кроки:
- Практикуйтеся з
psql: Ознайомтеся з мета-командамиpsql. - Досліджуйте розширення: Вивчіть корисні розширення, що стосуються вашої роботи.
- Перегляньте офіційну документацію: Документація PostgreSQL є вичерпною та корисною.