Database / Liquibase interview questions
What is a Liquibase snapshot and what commands use it?
A snapshot in Liquibase is a serialised representation of a database's schema state captured at a specific point in time. It records tables, columns, indexes, foreign keys, views, sequences, and other schema objects as a JSON or YAML file. Unlike a database backup, it captures structure — not data.
Creating a snapshot:
liquibase snapshot --snapshot-format=json --output-file=prod-snapshot-2024-01-15.json \ --url=jdbc:postgresql://prod-db:5432/myapp \ --username=admin --password=secret
Snapshots are used in several commands:
- diff with a snapshot — Compare the current live database against a saved snapshot to see what changed between the snapshot timestamp and now, without needing two live databases available simultaneously. This is useful for scheduled drift detection in CI.
- diffChangeLog with a snapshot — Generate changeSets that represent the delta between a saved snapshot and the current database, useful for creating a changeLog that captures schema evolution over time.
- Baseline documentation — Archive snapshots as part of each release process to have a historical record of what the schema looked like at each release boundary.
Snapshots can also be used as the reference in a diff, pointing --reference-url to a local snapshot file rather than a live database:
liquibase diff \ --url=jdbc:postgresql://staging-db:5432/myapp \ --reference-url=offline:postgresql?snapshot=prod-snapshot-2024-01-15.json
This offline diff capability is particularly useful in environments where direct connections to production databases from CI are not permitted for security reasons.
More Related questions...