web-dev-qa-db-ja.com

データベース展開用のスキーマ変更/更新スクリプト

データベーススキーマを変更する必要があります。データベースの変更を追跡して更新するためのスキーマ変更および更新スクリプトを作成する予定です。私はついていきます

データベースのバージョン管理–スクリプトの変更

初めに、私は彼が得ているものの要点を得ましたが、以前にSQLスクリプトにあまり取り組んだことがないので、チュートリアルなどで始めるのが良いでしょう。私はWebでいくつかの調査を行ったところ、ほとんどの人が自動比較ツールを使用してスクリプトを生成していることを知りました。このスクリプトは、プロセスで何も学習しないという明らかな理由のため、実行したくないものです。

変更スクリプトと更新スクリプトの書き方に関するチュートリアル/リンクを探していますか?スクリプトを使用してテーブルに接続し、SchemaChangeLogテーブルを比較してスキーマを更新する方法について、単一のスクリプト/疑似コードも見つけられなかったため、特にスクリプトを更新してください...

前もって感謝します!

1
Learner

最初に、 Liquibase などの既存のソリューションを使用します。 HibernateなどのORMを使用する場合は、スキーマの移行も実行できます。

それ以外の場合は、次のようになります。

最初のデータベーススキーマスクリプトから始めて、0.0.0001.sqlなどのバージョン番号を付けます。テーブルなどを作成するためのCREATEステートメントがほとんど含まれます。

-- use me to keep track of what version the database schema is using:
create table schema_version (
  name text primary key
);

create table contact (
  id bigserial primary key,
  first_name text not null
);

insert into schema_version values ('0.0.0001');

すべての.sqlスキーマスクリプトをgitなどのソース管理に保存します。

次に、必要に応じて、0.0.0002.sqlなどのパッチファイルを追加します。通常、データベーススキーマを調整するALTERステートメントが含まれます。

alter table contact add column last_name text;

insert into schema_version values ('0.0.0002');

特定のデータベースの場合は documentation を読む必要があります。それらはしばしばわずかに異なるALTER構文を持っているためです。

次に、データベースが使用しているスキーマのバージョンを確認し、そのバージョンより大きい利用可能なパッチを適用する非SQLスクリプト(おそらくbash)を作成します。schema_versionテーブルがない場合は、最初のSQLスクリプトを適用します。

この本はAmazonで高く評価されています:

データベースのリファクタリング:進化的データベース設計

2
Neil McGuigan