The release of IvorySQL 5.0 has been published, developing a PostgreSQL database edition that provides compatibility with applications designed for Oracle databases. IvorySQL claims the ability to work as a transparent replacement for the latest version of PostgreSQL, with the main difference being the inclusion of the "compatible_db" setting that enables compatibility mode with Oracle. The code is written in C and is distributed under the Apache 2.0 license.
IvorySQL implements the PL/iSQL procedural language, mirroring the PL/SQL syntax in Oracle, supports Oracle-style packages and operations with packages such as "CREATE PACKAGE." A compatible set of functions and types is provided, along with support for Oracle-specific syntax for operations, expressions, and operators such as ALTER TABLE, DELETE, UPDATE, CONNECT BY (hierarchical queries), GROUP BY, UNION, and MINUS.
In the new version:
- Migration to the PostgreSQL 18 codebase has been completed.
- Compatibility with Oracle databases has been improved: support for nested subprograms, ROWID, NLS and OUT parameters, translation of empty strings to NULL, session-bound parser changes, GB18030 encoding, and functions SYS_GUID, SYS_CONTEXT, and USERENV has been implemented.
- Oracle-compatible operators INSTR, FORCE VIEW, and LIKE have been added.
- PL/iSQL capabilities have been expanded: support for CALL syntax, %ROWTYPE, and %TYPE has been added.
- Full support for Docker Compose, Docker Swarm, and Kubernetes has been implemented, along with a package manager Helm. IvorySQL Operator 5.0 and IvorySQL Cloud 5.0 include tools for visual lifecycle management.
- Support for ten extensions to PostgreSQL has been provided: pg_cron, pgAudit, PostGIS, pgRouting, PGroonga, ddlx, pgsql-http, system_stats, plpgsql_check, and pgvector.
- Installation packages have been formed for X86_64, ARM64, MIPS, and LoongArch architectures.
- An online environment has been prepared for working with IvorySQL from a browser, allowing users to operate without installing IvorySQL on their systems.
Additionally, the release of the SynchDB 1.3 extension can be noted, designed for replicating data from one or more external databases, such as MySQL, MS SQL Server, and Oracle, into PostgreSQL. Such external databases serve as data sources that are directly transferred into a single target database based on PostgreSQL, without the use of additional layers for orchestrating the data synchronization process (all synchronization operations are handled by the SynchDB extension). The project code is written in C and Java and is distributed under the Apache 2.0 license.
The system includes the following components:
- Debezium Runner Engine — a Java engine that provides modules for processing data change streams from various databases (MySQL, MS SQLServer, and Oracle) and translating the received data into a universal JSON format.
- SynchDB Worker — launches instances of Debezium Runner Engine for data replication from specific databases, accepts changes from them in JSON format, and passes it to the Format Converter module.
- SynchDB Launcher — creates and terminates SynchDB handlers using the PostgreSQL API to start background processes.
- Format Converter — parses the change stream in JSON format, transforms external data types and DDL queries into types and queries compatible with PostgreSQL.
- Replication Agent — processes output in the HeapTupleData format from the Format Converter and invokes methods to substitute data into PostgreSQL.

In SynchDB 1.3, a new snapshot generation engine based on FDW (Foreign Data Wrapper) has been implemented, supporting operation with OpenLog Replicator. Compared to the old engine based on Debezium, the new engine significantly increases performance and reduces latency when replicating data from large Oracle databases. Additionally, the new version offers extra views with statistics (synchdb_genstats, synchdb_snapstats, and synchdb_cdcstat), supports MODIFY and DEFAULT ON NULL expressions in OpenLog Replicator, and includes compatibility with PostgreSQL 18 and IvorySQL 5.
Source: opennet.ru
