Databases are the heart of every information system. And yet in 2026, most Czech enterprise organizations run on architectures designed in the nineties — single-node Oracle, monolithic SQL Server, MySQL without sharding. Database layer modernization isn’t a sexy topic, but it’s the most critical infrastructure decision you’ll make in the next three years.
Why Modernize Now¶
Three convergent pressures are forcing organizations to act:
Regulatory requirements. NIS2 and DORA require demonstrable resilience of critical systems. Single-node databases with manual failover don’t meet RPO/RTO requirements that regulators have been enforcing since 2025. Banks, insurance companies, and energy companies must demonstrate automatic failover with RPO < 1 second.
Data volume. IoT, AI/ML pipelines, real-time analytics — data volume is growing exponentially. Traditional vertical scaling (bigger server, more RAM) hits physical limits and astronomical costs. Oracle RAC licenses costing tens of millions of crowns annually are unsustainable for medium-sized companies.
Cloud-native architecture. Microservices, Kubernetes, multi-region deployment — modern application architecture requires databases that can scale horizontally, replicate automatically, and work across regions. A monolithic database on one server in one data center is a single point of failure you can’t afford.
Database Technology Landscape in 2026¶
PostgreSQL 17 — Open-Source King¶
PostgreSQL continues its dominance in the open-source relational world. Version 17 (September 2025) brought:
- Incremental backup:
pg_basebackup --incremental— only changed blocks are backed up since last full backup. Dramatically reduces storage and backup time for multi-TB databases. - Logical replication improvements: Failover logical replication slots. Subscriber can continue replication after primary failover. Critical for zero-downtime migrations and CDC pipelines.
- JSON_TABLE: SQL/JSON standard for querying JSON data as relational tables. Finally full parity with Oracle 23ai JSON functionality.
- Performance: Improved query planner for partitioned tables. Bulk inserts 2× faster thanks to stream I/O for
COPY. Vacuum 2× more efficient for large tables.
PostgreSQL with extensions (Citus for distributed queries, pgvector for embeddings, TimescaleDB for time-series) covers 90% of use cases that previously required specialized databases. It’s our default recommendation for new projects.
CockroachDB — Distributed SQL for Global Applications¶
CockroachDB is a NewSQL database — combines ACID transactions of relational databases with horizontal scalability of NoSQL. Architecture inspired by Google Spanner, but without dependency on atomic clocks.
Key features: - Automatic sharding and rebalancing: Data is automatically distributed across nodes. Add a node → data rebalances. No manual sharding. - Multi-region deployment: Configurable replication zones. You can pin data to specific regions (GDPR compliance — EU citizen data stays in EU). - Serializable isolation: Strongest isolation level by default. No phantom reads, no write skew. Critical for financial applications. - PostgreSQL wire protocol: Compatible with PostgreSQL client libraries. Existing PostgreSQL applications can migrate with minimal changes. - Survivability: Survives entire region outages without manual intervention. Automatic leader election, automatic re-replication.
When to use: Globally distributed applications, multi-region deployment, financial systems requiring serializable transactions, systems where downtime = regulatory problem.
When not to use: Single-region deployment with < 1 TB data (overkill), analytical workloads (OLAP), systems with extremely low latency < 1 ms (distributed consensus adds latency).
License: Core version is open-source (BSL → Apache 2.0 after 3 years). Enterprise features (CDC, backup to S3, RBAC) require license.
YugabyteDB — PostgreSQL-Compatible Distributed SQL¶
YugabyteDB is a direct competitor to CockroachDB with one crucial difference: full PostgreSQL compatibility at the query engine level. Not just wire protocol, but complete PostgreSQL parser and executor (fork of PostgreSQL 11.2, gradually updated).
Differences from CockroachDB: - Better PostgreSQL compatibility (extensions, PL/pgSQL, triggers) - Support for YSQL (distributed PostgreSQL) and YCQL (Cassandra-compatible API) - Weaker multi-region automation (requires more manual configuration) - Open-source under Apache 2.0 (no BSL restrictions)
When to use: Migration from PostgreSQL where you need distribution. Workloads combining OLTP + light OLAP. Organizations preferring fully open-source solutions.
TiDB — MySQL-Compatible Distributed SQL¶
TiDB from PingCAP is MySQL-compatible distributed database. For organizations with existing MySQL stack, it’s the most natural path to distributed architecture.
Architecture: - TiDB Server: Stateless SQL layer (MySQL protocol). Horizontally scalable. - TiKV: Distributed key-value storage (Rust, Raft consensus). CNCF graduated project. - TiFlash: Columnar engine for analytical queries. Real-time HTAP — one system for both OLTP and OLAP.
Killer feature: HTAP (Hybrid Transactional/Analytical Processing). Transactional data is automatically replicated to columnar TiFlash engine. Analytical queries run on TiFlash without impact on transactional performance. No ETL, no separate data warehouse for operational analytics.
When to use: MySQL migration, HTAP workloads, organizations needing real-time analytics over transactional data.
Vitess — Scaling MySQL Without Rewrite¶
Vitess (CNCF graduated) isn’t a new database — it’s middleware layer over MySQL that adds horizontal scaling. Originally developed at YouTube for scaling MySQL to billions of rows.
How it works: - VTGate: Query router, parses SQL, routes to correct shard - VTTablet: Agent on each MySQL instance, health checking, failover - Topology Service: etcd/ZooKeeper for metadata and coordination
Advantage: Existing MySQL applications migrate with minimal changes. MySQL engine remains — Vitess adds sharding, connection pooling, online schema changes (gh-ost/pt-osc integrated).
Limitations: Cross-shard transactions are expensive. JOINs across shards limited. Requires understanding of sharding key design.
When to use: Existing large MySQL deployments that need horizontal scaling. Organizations that don’t want to migrate from MySQL to new database.
AlloyDB and Aurora — Managed Distributed Variants¶
Google AlloyDB: PostgreSQL-compatible managed database. Storage separated from compute (disaggregated architecture). 4× faster than vanilla PostgreSQL on transactional workloads (Google benchmarks). Columnar engine for analytics. AI-driven adaptive storage. Fully managed — zero ops.
Amazon Aurora: MySQL/PostgreSQL compatible managed database. 6-way replication across AZs. Storage auto-scaling up to 128 TB. Aurora Serverless v2 for variable workloads. Aurora Machine Learning for in-database ML inference.
When to use: Organizations fully committed to specific cloud (GCP resp. AWS), where vendor lock-in isn’t a problem and zero ops overhead is priority.
Migration from Legacy Databases — Practical Guide¶
Oracle → PostgreSQL¶
Most common migration in Czech enterprise. Oracle licenses cost hundreds of thousands to millions annually. PostgreSQL is free and functionally equivalent for 95% of workloads.
Migration steps:
-
Assessment: Inventory Oracle-specific features. PL/SQL procedures, materialized views, Oracle Text, spatial, partitioning, RAC. Tool:
ora2pg(open-source) generates assessment report with complexity score. -
Schema conversion:
ora2pgconverts DDL, PL/SQL → PL/pgSQL, triggers, sequences. Automatically handles ~70% of conversion. Remaining 30% requires manual work — Oracle-specific functions (DECODE, NVL, ROWNUM, hierarchical queries with CONNECT BY). -
Data migration:
ora2pgfor batch export. For large tables (100M+ rows) use parallel export with--jobs. Foreign Data Wrapper (oracle_fdw) for incremental sync during dual-run period. -
Application layer: ORM-based applications (Hibernate, SQLAlchemy) typically require minimal changes — dialect changes. Raw SQL requires audit — Oracle-specific syntax (MERGE, analytic functions syntax, outer join
(+)syntax). -
Testing: Comparative tests on production data. Query plan analysis — PostgreSQL optimizer behaves differently from Oracle CBO. Indexing strategies may require reconsideration.
-
Dual-run: Both databases run in parallel. Writes go to both, reads gradually move. Monitor discrepancies. Typically 2-4 weeks.
Time estimate: Simple database (< 100 tables, no PL/SQL) = 2-4 weeks. Complex (500+ tables, PL/SQL, RAC) = 3-6 months.
SQL Server → PostgreSQL¶
Easier than Oracle migration due to closer SQL compatibility. Main differences:
- T-SQL → PL/pgSQL (different syntax for IF/WHILE/CURSOR, error handling TRY/CATCH → BEGIN/EXCEPTION)
- IDENTITY → GENERATED ALWAYS AS IDENTITY
- TOP → LIMIT
- CROSS APPLY → LATERAL JOIN
- SQL Server Agent jobs → pg_cron or OS-level scheduling
- SSRS → Grafana/Metabase/Apache Superset
Tool: pgloader (open-source) for schema + data migration from MSSQL. sqlserver_fdw for incremental sync.
MySQL → PostgreSQL (or vice versa)¶
Transition between MySQL and PostgreSQL is relatively straightforward due to SQL standard. Main pain points:
- AUTO_INCREMENT → SERIAL/GENERATED
- ENUM handling (MySQL native, PostgreSQL custom type)
- Case sensitivity (MySQL default case-insensitive collation)
- GROUP BY strict mode (PostgreSQL strict, MySQL lax)
- JSON functions (different syntax)
pgloader handles automatic migration including type mapping.
Decision Framework¶
How to choose the right database for your use case? Go through this decision tree:
1. What is the primary workload? - OLTP (transactions, CRUD) → relational databases - OLAP (analytics, reporting) → columnar (ClickHouse, DuckDB, BigQuery) - HTAP (both) → TiDB, AlloyDB, CockroachDB + analytical engine - Time-series → TimescaleDB (PostgreSQL extension), InfluxDB - Document store → MongoDB, PostgreSQL JSONB - Graph → Neo4j, Apache AGE (PostgreSQL extension) - Vector search → pgvector, Milvus, Qdrant
2. What is data volume and growth? - < 100 GB, stable → single-node PostgreSQL/MySQL - 100 GB – 1 TB, growing → PostgreSQL with read replicas, partitioning - 1 – 10 TB → Citus (distributed PostgreSQL), Vitess (MySQL), CockroachDB - 10+ TB → CockroachDB, YugabyteDB, TiDB, cloud-native (Aurora, AlloyDB)
3. What are availability requirements? - 99.9% (8.7h downtime/year) → primary-standby with automatic failover (Patroni) - 99.99% (52 min/year) → multi-node cluster (CockroachDB, YugabyteDB) - 99.999% (5.2 min/year) → multi-region deployment, distributed consensus
4. What are regulatory requirements? - Data residency (GDPR) → geo-partitioning (CockroachDB, YugabyteDB) - Audit trail → PostgreSQL pgaudit, CockroachDB SQL audit logging - Encryption at rest → TDE (Transparent Data Encryption) or filesystem encryption - DORA/NIS2 compliance → demonstrable RPO < 1s, automated failover, DR testing
5. What is the budget? - Zero license cost → PostgreSQL, MySQL, MariaDB, CockroachDB Core - Managed service → Aurora, AlloyDB, Cloud SQL, Azure Database - Enterprise support → CockroachDB Enterprise, YugabyteDB Anywhere, EDB PostgreSQL
PostgreSQL High Availability — Production-Ready Setup¶
For organizations that don’t need distributed database but require high availability, PostgreSQL with Patroni is gold standard:
Architecture: - 3 PostgreSQL nodes (1 primary, 2 replicas) - Patroni on each node (cluster management, automatic failover) - etcd cluster (3 nodes) for distributed consensus (leader election) - HAProxy or PgBouncer for connection routing - Barman or pgBackRest for continuous backup
Failover scenario: 1. Primary node dies (hardware failure, kernel panic, network partition) 2. Patroni detects outage (health checks every 10s) 3. etcd leader election — remaining replicas elect new primary 4. Patroni promotes replica with smallest replication lag to primary 5. HAProxy automatically redirects traffic to new primary 6. Entire failover < 30 seconds, RPO ≈ 0 (synchronous replication)
Monitoring: - Prometheus + postgres_exporter for metrics (connections, replication lag, transaction rate, cache hit ratio) - Grafana dashboard with alerting on replication lag > 1s, connections > 80% max, WAL archiving delay - PgHero for query performance analysis and index recommendations
Observability for Databases¶
Modernization without observability is flying blind. Key metrics:
- Query performance: p50/p95/p99 latency per query type.
pg_stat_statementsfor PostgreSQL. Slow query log with threshold 100ms. - Connection management: Active/idle/waiting connections. Connection pool utilization. PgBouncer stats.
- Replication health: Replication lag in bytes and seconds. WAL sender/receiver stats.
- Storage: Table/index bloat (dead tuples). Disk usage trend. Vacuum effectiveness.
- Lock contention: Lock waits > 1s. Deadlock frequency. pg_stat_activity for blocked queries.
Most Common Modernization Mistakes¶
-
Lift and shift without optimization. Transferring Oracle schema 1:1 to PostgreSQL without reconsidering indexing strategy, partitioning and query patterns. PostgreSQL optimizer works differently — what was fast in Oracle may be slow in PostgreSQL and vice versa.
-
Underestimated testing. Functional tests aren’t enough. You need performance tests on production data — not on 1% sample. Query that runs 10 ms on 1M rows may run 10 minutes on 100M rows with missing index.
-
Ignoring connection management. PostgreSQL creates new process per connection (fork model). 1000 connections = 1000 processes. Without connection pooler (PgBouncer, Odyssey) PostgreSQL will collapse under load. Set up PgBouncer ALWAYS.
-
Big bang migration. Switching everything Friday evening. Instead: strangler fig pattern — new features on new database, gradual migration of existing ones. Dual-write period for validation.
-
Neglecting backup strategy. “We have replication, we don’t need backup.” Replication protects against hardware failure. Backup protects against logical errors — DROP TABLE, corrupted data, ransomware. PITR (Point-in-Time Recovery) with WAL archiving. Test restore regularly (quarterly).
-
Cloud vendor lock-in. Aurora and AlloyDB are excellent products, but migration from them is painful. If there’s a chance of multi-cloud or on-prem return, stick with vanilla PostgreSQL/MySQL compatibility.
The Future: Where We’re Heading¶
Serverless databases are becoming mainstream. Neon (serverless PostgreSQL), CockroachDB Serverless, PlanetScale (serverless MySQL/Vitess) — you pay for consumption, not provisioned capacity. Ideal for variable workloads and development/staging environments.
AI-native databases integrate vector search, embedding generation, and ML inference directly into database engine. PostgreSQL with pgvector + pgml allows running embedding search and model inference in SQL query. AlloyDB integrates Vertex AI directly into query engine.
Disaggregated storage separates compute from storage. Neon, Aurora, AlloyDB — storage is distributed and shared, compute scales independently. Branching (Neon) allows creating copy of entire database in seconds for testing or development.
Conclusion¶
Database modernization isn’t a one-time project — it’s a strategic decision with impact for the next 10 years. The right choice today will save millions on licenses, reduce operational burden, and enable scaling your applications will need.
Our recommendations for Czech enterprise in 2026:
- Default choice: PostgreSQL 17 with Patroni HA. Covers 90% of use cases. Zero license cost, huge community, enterprise-grade stability.
- Distributed need: CockroachDB for global applications, YugabyteDB for maximum PostgreSQL compatibility, TiDB for MySQL ecosystem.
- Oracle migration: ora2pg + dual-run strategy. ROI typically 12-18 months (license savings).
- Cloud-native: Consider Neon (serverless PostgreSQL) for development and variable workloads. Aurora/AlloyDB for maximum managed experience (with lock-in awareness).
Most important step? Start assessment. Map your databases, their dependencies, Oracle/MSSQL-specific features and regulatory requirements. Without assessment, any decision is blind shooting. CORE SYSTEMS will gladly help you with that.
Need help with implementation?
Our experts can help with design, implementation, and operations. From architecture to production.
Contact us