sql >> Database teknologi >  >> RDS >> Oracle

Hvordan udvider man Liquibase til at generere ændringslogfiler med lagrede procedurer, funktioner og triggere?

Du har ret i, at den generelle strategi er at skabe en ny klasse, der implementerer SnapshotGenerator, men der er et par andre trin, du også skal gøre. Den generelle snapshot-proces er:

  1. Liquibase søger efter SnapshotGenerator-implementeringer og kalder addsTo() for hvert objekt, den finder i databasen. For dine typer vil du sandsynligvis have en hurtig "hvis bestået objektforekomst af Schema", fordi de er typer, der er en del af et skema.
  2. Du skal oprette nye pakke-, StoredProcedure-objekter osv., der implementerer DatabaseObject. De vil være som en liquibase.structure.core.Table-klasse og fange objektets tilstand. De oprettes i din SnapshotGenerator.addsTo()-metode til det punkt, at de kan identificeres (navn, skema osv. sæt)
  3. Alle objekter, der tilføjes af addsTo()-metoden, køres derefter gennem din SnapshotGenerator.snapshotObject()-metode, som vil trække yderligere metadata, som du ikke fik oprindeligt, såsom lagret proceduretekst osv.
  4. Når liquibase har et øjebliksbillede, der indeholder dine objekter, sammenligner det øjebliksbilledet med et andet (i generationChangeLog tilfælde et tomt snapshot) for at bestemme, hvilke objekter der mangler, uventede og ændrede i det andet snapshot. Den leder derefter efter implementeringer af MissingObjectChangeGenerator, UnexpectedObjectChangeGenerator og ChangedObjectChangeGenerator. For generChangeLog vil der kun være "manglende" objekter, så du ville implementere MissingTriggerChangeGenerator, MissingPackagedChangeGenerator osv. Deres opgave er at oprette Change-instanser for at skabe de manglende objekter
  5. Msising*ChangeGenerator-klasserne kunne returnere RawSqlChange-forekomster, eller du kan oprette nye implementeringer af Change, såsom CreateTriggerChange.



  1. Hvornår skal man bruge nedarvede tabeller i PostgreSQL?

  2. Gruppér kun de tilstødende rækker

  3. mysql:Hvad er den rigtige syntaks for NOT LIKE?

  4. MySQL langtekst analog i Microsoft SQL?