CATRUSTDB

Safe schema evolution pour equipes PostgreSQL
Refactorez des schemas critiques sans perte de donnees, bloquez les migrations destructives plus tot, et gardez un parcours de deploiement defendable.

Le probleme : les migrations complexes restent trop fragiles

Les outils classiques gerent les changements de schema comme une suite de scripts SQL. Ils aident a deployer une version, mais beaucoup moins a savoir si une refonte de modele est vraiment sure avant execution.

CATRUSTDB transforme la migration en mapping explicite entre schemas. Vous pouvez valider, expliquer, tester et derouler un changement critique avec moins de scripts fragiles et plus de garde-fous.

La promesse v1 reste concrete : migrations plus sures, drift detection, rollback, CI/CD guardrails et parcours PostgreSQL-first.

Trois garanties concretes

Migration preparee

Le changement cible est decrit explicitement avant execution, avec un mapping lisible entre l'ancien schema et le nouveau.

{"cmd": "plan_migration",
 "from": "Company",
 "to": "Organisation"}

Retour arriere fiable

Si un changement doit etre annule, l'equipe dispose d'un retour arriere guide plutot que d'un script de secours improvise.

{"cmd": "rollback_preview",
 "schema": "Company",
 "migration": "RenameCompanyToOrg"}

Controle avant deploiement

Les incoherences et les risques sur les contraintes sont detectes avant le passage en production.

{"cmd": "validate_migration",
 "target_schema": "Organisation",
 "checks": ["fk", "shape", "drift"]}

Comparaison

FonctionnaliteCATRUSTDBFlywayLiquibasedbt
ParadigmeMapping de schemas verifiableScripts SQL versionnesChangelogs XML/YAMLModeles SQL Jinja
RollbackRetour exact guide par le mappingScript SQL undo manuelrollback changeSetNon natif
ValidationPre-validation formelleAucune avant executionHash + checksumTests post-execution
Dependance SQLZero SQL100 % SQL100 % SQL100 % SQL
SemantiqueTransformations explicites et composablesAucuneAucuneAucune
IncrementalCheckpoint et repriseVia script manuelVia contextsVia incremental models
Snapshot 1M lignes93 ms (13.5x)---
Chargement 1M lignes~5 ms (~700x)---
Lignage automatiqueJournal des transformationsNonChangelogDAG de modeles

Exemple : renommage de schema

Schema source: Company

Entities
- Employee(name, salary)
- Department(dept_name)
- works_in: Employee -> Department

Schema cible: Org

Entities
- Staff(full_name, pay)
- Team(team_name)
- member_of: Staff -> Team

Correspondances
- Employee -> Staff
- Department -> Team
- emp_name -> full_name
- salary -> pay
- dept_name -> team_name
- works_in -> member_of
# Chargement + migration en une commande
echo '{"cmd":"load","schema":"Company","dataset":"snapshot-prod-2026-04"}' | nc localhost 7474
echo '{"cmd":"run_migration","target_schema":"Org","migration":"RenameCompanyToOrg"}' | nc localhost 7474
-> {"ok":true,"schema":"Org","entities":[{"name":"Staff","rows":3},{"name":"Team","rows":2}]}

# Rollback : retour guide vers Company
echo '{"cmd":"rollback_preview","source_schema":"Company","migration":"RenameCompanyToOrg"}' | nc localhost 7474

4 protocoles, un seul moteur

TCP NDJSON - API native pgwire - Compatible PostgreSQL Arrow Flight - pandas, Polars, DuckDB HTTP - Catrust Studio

TCP NDJSON

API native pour microservices et scripts. Client Python inclus (zero dependance).

from catrustdb import connect
db = connect(port=7474)
db.load(schema="company_v1", dataset=payload)
rows = db.query("employees.limit(10)")

pgwire

Compatible psql, JDBC, SQLAlchemy. Utilisez vos outils SQL habituels.

psql -h localhost -p 5433
SELECT * FROM Employee
 LIMIT 10;

Arrow Flight

Transfert haute performance pour l'analytique. Zero-copy vers pandas et Polars.

import pyarrow.flight as fl
client = fl.connect("grpc://localhost:32100")
df = client.do_get(
  fl.Ticket(b'{"entity":"Employee"}')
).read_all().to_pandas()

Demarrage rapide

Docker (recommande)

docker run -p 7878:7878 catrustdb/catrust:latest

Telechargements

Les releases publiques sont temporairement retirees. Voir la page de statut des telechargements.

catrust serve --project mon_schema
# -> Studio web sur http://localhost:7878

Python

pip install catrustdb
from catrustdb import connect
with connect(port=7474) as db:
    db.load(schema="company_v1", dataset=open("employees.ndjson").read())
    db.apply_migration("RenameCompanyToOrg")
    print(db.query("employees.limit(10)"))

Pourquoi pas Flyway ?

Flyway suppose que vous savez ecrire du SQL correct. CATRUSTDB suppose que vous voulez prouver que votre migration est correcte.

SituationFlywayCATRUSTDB
Va-t-elle casser des FKs ?Decouverte en prodvalidate_migration avant execution
Puis-je revenir en arriere ?Script undo manuelRetour exact garanti
Mes migrations composent-elles ?Pas de garantieOui, avec transformations explicites
Quelle est la lignee ?Logs manuelsJournal des transformations automatique