Skip to main content

Changelog

Table of Contents

Highlights of each release, grouped by minor version. The upstream CHANGELOG.md carries the complete, detailed history — including the analysis behind each fix — and every tagged release is listed on the GitHub releases page.

  1. 0.16.0

    August 2026

    Informix overhaul and a JDBC shutdown fix

    • JDBC connectors no longer hang on exit. Worker threads now detach from the JVM together with their connection, so a migration that used to hang indefinitely after printing its summary finishes in under a second.
    • Informix: system catalog no longer migrated. Discovery now separates user objects from the server’s own — one test database went from 534 routines and 89 tables down to the 17 routines and 24 tables the schema actually defines.
    • Informix: many object types now migrate at all. Fixes for BSON/JSON columns, collection and row types, INTERVAL columns, descending and function-based indexes, check constraints, MERGE statements, global variables, and triggers — several of which previously failed the whole planning phase.
    • Informix: MONEY migrates as NUMERIC with its precision and scale preserved, rather than as PostgreSQL’s very different MONEY type.
  2. 0.15.0

    July 2026

    T-SQL parser and validation depth

    • Validation compares structure, not just data. Column, index and constraint counts are now extracted from both sides, persisted in the validation_indexes and validation_constraints protocol tables, and rendered as side-by-side grids in the Markdown report. Any mismatch fails the table validation.
    • Sybase ASE / T-SQL parser hardening. Temporary # tables map to pg_temp, EXEC @id = func(...) becomes a proper PL/pgSQL assignment, legacy transaction directives and GOTO labels are neutralised, and cursor definitions spanning multiple lines are parsed correctly.
    • Oracle moved to python-oracledb, replacing the outdated cx_Oracle. Thin mode is the default, so the Oracle Instant Client is no longer required.
    • Validation connection exhaustion fixed — checksum engines no longer sever the validator’s long-lived connections mid-loop.
  3. 0.14.0

    May 2026

    Conflict resolution and a Sybase SQL parser

    • data_conflict_action added to table_settings — choose replace, merge_keep_target, merge_keep_source or skip when data exists in both source and target. Implemented across all connectors.
    • table_name accepts lists and regular expressions, so one directive can now cover many tables at once — uniformly across batch size overrides, chunking and selective migration toggles.
    • Sybase ASE gained a real SQL parser for stored procedures, the same one previously used only for views — with a long list of T-SQL conversion fixes covering IF/ELSE nesting, UNION, PRINT, CONVERT datetime styles and inline conditionals.
  4. 0.12.x

    March – April 2026

    Parallel view migration and DB2 z/OS aliases

    • Views migrate in parallel via a thread pool, with alias views deliberately processed only after all standard views finish to avoid dependency collisions.
    • DB2 alias resolution now labels an alias target as TABLE or VIEW in the catalog, preventing view-to-alias circular dependencies.
    • CSV ingestion handles comma decimal separators, merging fields only where the target column is a scaled NUMERIC/DECIMAL/FLOAT.
    • Fixes for check constraints (#57), sequence fetching on Informix, MySQL and Sybase (#63), view migration across most connectors (#65) and PostgreSQL-to-PostgreSQL data type substitution (#67).
  5. 0.11.x

    November 2025 – March 2026

    Offline DDL connectivity and IBM DB2 z/OS

    • New ddl connectivity type — database objects can be read from DDL files instead of a live connection, configured via ddl.directory.
    • IBM DB2 z/OS support added through the new ibm_db2_zos connector; the existing DB2 connector was renamed to ibm_db2_luw.
    • Sybase ASE conversion rewritten with a SQL parser for control flow, cursors and data types, plus support for legacy outer join syntax (*= / =*), user-defined types, OUTPUT to INOUT parameters and @@rowcount via GET DIAGNOSTICS.
    • MS SQL Server gained view conversion with correct data types, user-defined type conversion and a first, usable version of trigger/function/procedure conversion.
    • First version of the user documentation added to the docs/ directory.
  6. 0.10.x

    October – November 2025

    Informix LOB import at scale

    • Parallel LOB import for Informix. Informix exports each CLOB/BLOB into its own file (max 2 GB), referenced by pointers in the main UNL file. Sequential processing was workable up to about ten files; a configurable number of parallel workers now handles the hundreds of files that real tables produce.
    • Multiple LOB columns per table are supported, and NULL LOB values are recognised whether they appear as the 0,0,0 placeholder or as a literal NULL.
    • UNL to CSV conversion hardened against trailing backslashes, Windows \r\n line endings and escaped delimiters.
    • MySQL gained ODBC and JDBC connectivity alongside the existing native driver.
  7. 0.9.x

    June 2025

    PyPI distribution and sqlglot-based view conversion

    • Published to PyPI via pyproject.toml, making pip install credativ-pg-migrator the standard installation route.
    • sqlglot adopted for view conversion, starting with Sybase ASE, which significantly raised the view migration success rate.
    • names_case_handling (lower, upper, preserve) is now honoured when generating CREATE statements — legacy engines disagree about identifier casing, and users need to choose.
    • Data is selected by explicit column list instead of SELECT *, so awkward types (geometry, sets, LOBs, user-defined types) can be cast or transformed in the source query.
    • Pre-migration analysis started — automating the questions that otherwise get asked of every client about their source database.
  8. 0.8.0

    June 2025

    First public release

    • The initial public release of credativ-pg-migrator, with connectors moved into their own module directory.

Older releases
#

Versions before 0.8.0 predate the public release. Their history is preserved in the full changelog.