Oracle Database nás provází od roku 2003. Spolehlivý, výkonný, prověřený. Ale taky drahý. Když jsme spočítali licenční náklady za posledních deset let, číslo nás vyděsilo. Začali jsme hledat alternativu.
Proč PostgreSQL¶
Na seznamu kandidátů bylo několik databází: MySQL, MariaDB, PostgreSQL. MySQL jsme vyřadili kvůli nejistotě kolem Oracle vlastnictví. PostgreSQL nás přesvědčil svou enterprise-grade sadou funkcí — window functions, CTE, partial indexes, JSONB podpora. PostgreSQL 9.3 přinesl materialized views a zlepšený JSON support. Komunita kolem PostgreSQL je aktivní a profesionální.
Co jsme migrovali¶
Vybrali jsme interní systém pro správu projektů — přibližně 120 tabulek, 50 stored procedures, desítky views. Ne náš největší systém, ale dostatečně komplexní na ověření proveditelnosti.
Nástroje a přechod datových typů¶
Použili jsme Ora2Pg pro export schématu a dat. Ruční opravy: NUMBER → NUMERIC, VARCHAR2 → VARCHAR, trigger-based auto-increment → SERIAL.
-- Oracle
CREATE TABLE projects (
id NUMBER GENERATED BY DEFAULT AS IDENTITY,
name VARCHAR2(200) NOT NULL,
created_date DATE DEFAULT SYSDATE
);
-- PostgreSQL
CREATE TABLE projects (
id SERIAL PRIMARY KEY,
name VARCHAR(200) NOT NULL,
created_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
PL/SQL → PL/pgSQL¶
Největší práce. Oracle-specifické funkce (NVL, DECODE, ROWNUM) jsme přepsali na COALESCE, CASE, ROW_NUMBER. Balíky (packages) nahrazeny schématy. Některé procedury jsme při přepisu zjednodušili — Oracle workaroundy už nebyly potřeba.
Výkon a monitoring¶
Na většině dotazů PostgreSQL srovnatelný s Oracle. EXPLAIN ANALYZE je fantastický nástroj — víc informací než Oracle EXPLAIN PLAN. Chybí nám Oracle Enterprise Manager a RAC clustering. pgAdmin je solidní, ale nedosahuje úrovně OEM.
Co je lepší v PostgreSQL¶
Cena: Nula korun za licence. Jednoduchost: Instalace za minuty, konfigurace v jednom souboru. JSONB: Ukládání a dotazování JSON dokumentů přímo v relační databázi.
Migrace se vyplatila¶
Po třech měsících práce běží náš projektový systém na PostgreSQL. Výkon je srovnatelný, provozní náklady výrazně nižší. Oracle zůstane pro nejkritičtější systémy, ale PostgreSQL je plnohodnotná enterprise databáze.