Goose#
Ist ein gutes Tool für Datenbank-Migrationen. Damit ist möglich
inkrementell sql
-Files einzuspielen. Verschiedenen Migrationen bauen
also aufeinander auf. Mit Goose bildet man also die Evolution seiner
Datenbank ab. Es ist möglich mit up
und down
zwischen den
verschiedenen Evolutionsstufen zu switchen.
Normaler Use-Case#
export DB_URL=postgres://postgres:password@172.17.0.3:5432/cmdb
goose -allow-missing -dir ./migrations postgres $DB_URL up
## Wie sieht es in ./migrations aus?
## z.b. so:
# .
# ├── 00001_audit_log.sql
# ├── 00002_cmdb.sql
# ├── 00003_cables.sql
# ├── 00004_domains.sql
# ├── 00005_office.sql
# ├── 20230119114311_cmdb_add_mac_addresses.sql
# ├── 20230119160151_add_all_ips_view.sql
# ├── 20230202173045_add_comments.sql
# ├── 20230208194650_create_table_registered_domains.sql
# ├── 20230316165343_cmdb_v2_add_mac_addresses.sql
# ├── 20230320150211_cables_add_unique_constraints.sql
# ├── 20230321100754_audit_table.sql
# ├── 20230324171716_add_cables_references.sql
# ├── 20230327134036_add_vm_spec_checks.sql
# ├── 20230404161325_audit_search_path.sql
# ├── 20230511123022_cables_v1_view.sql
# ├── 20230523131012_add_shared_ip_type.sql
# ├── 20230920143845_add_datacenter_ntt_ber1.sql
# ├── 20240207104924_extract_location_functions.sql
# ├── 20240207144735_create_table_cloud_machines.sql
# ├── 20240207154335_cloud_is_label.sql
# └── 20240318172042_add_cloud_contract_columns.sql
Migration schreiben#
Dies ist eine Evolutionsstufe. Es wird definiert wie man, die Stufe
erreicht (+goose Up
) und wie man die Änderungen wieder rückgängig
(+goose Down
) macht.
-- +goose Up
-- +goose StatementBegin
ALTER TABLE cmdb DROP CONSTRAINT status_format;
ALTER TABLE cmdb ADD CONSTRAINT status_format CHECK (((status)::text ~* '^(online:.*|online:.*/.*|offline|security|ignore)$'::text));
-- +goose StatementEnd
-- +goose Down
-- +goose StatementBegin
ALTER TABLE cmdb DROP CONSTRAINT status_format;
ALTER TABLE cmdb ADD CONSTRAINT status_format CHECK (((status)::text ~* '^(online|online:.*|online:.*/.*|offline|security|ignore)$'::text));
-- +goose StatementEnd