CATRUSTDB

Safe schema evolution pour équipes PostgreSQL
Refactorez des schémas critiques sans perte de données, bloquez les migrations destructives plus tôt, et gardez un parcours de déploiement défendable.

Le problème : les migrations complexes restent trop fragiles

Les outils classiques gèrent les changements de schéma comme une suite de scripts SQL. Ils aident à déployer une version, mais beaucoup moins à savoir si une refonte de modèle est vraiment sûre avant exécution.

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

La promesse v1 reste concrète : migrations plus sûres, drift detection, rollback, CI/CD guardrails et parcours PostgreSQL-first.

Trois garanties concrètes

Migration préparée

Le changement cible est décrit explicitement avant exécution, avec un mapping lisible entre l'ancien schéma et le nouveau.

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

Retour arrière fiable

Si un changement doit être annulé, l'équipe dispose d'un retour arrière guidé plutôt que d'un script de secours improvisé.

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

Contrôle avant déploiement

Les incohérences et les risques sur les contraintes sont détectés avant le passage en production.

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

Comparaison

FonctionnalitéCATRUSTDBFlywayLiquibasedbt
ParadigmeMapping de schémas vérifiableScripts SQL versionnésChangelogs XML/YAMLModèles SQL Jinja
RollbackRetour exact guidé par le mappingScript SQL undo manuelrollback changeSetNon natif
ValidationPré-validation formelleAucune avant exécutionHash + checksumTests post-exécution
Dépendance SQLZéro SQL100 % SQL100 % SQL100 % SQL
SémantiqueTransformations explicites et composablesAucuneAucuneAucune
IncrémentalCheckpoint et repriseVia script manuelVia contextsVia incremental models
Snapshot 1M lignes93 ms (13.5x)---
Chargement 1M lignes~5 ms (~700x)---
Lignage automatiqueJournal des transformationsNonChangelogDAG de modèles

Exemple : renommage de schéma

Schéma source: Company

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

Schéma 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 guidé 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 (zéro dépendance).

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. Zéro-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()

Démarrage rapide

Docker (recommandé)

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

Téléchargements

Les releases publiques sont temporairement retirées. Voir la page de statut des téléchargements.

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 écrire du SQL correct. CATRUSTDB suppose que vous voulez prouver que votre migration est correcte.

SituationFlywayCATRUSTDB
Va-t-elle casser des FKs ?Découverte en prodvalidate_migration avant exécution
Puis-je revenir en arrière ?Script undo manuelRetour exact garanti
Mes migrations composent-elles ?Pas de garantieOui, avec transformations explicites
Quelle est la lignée ?Logs manuelsJournal des transformations automatique