Sql-Server

用於數據庫部署的架構更改/更新腳本

  • August 20, 2013

我需要更改數據庫架構。我打算編寫模式更改和更新腳本來跟踪數據庫更改並更新它們。我跟著

版本控制數據庫 - 更改腳本

首先,我大致了解了他正在做什麼,但是因為我之前沒有在 SQL 腳本上做過很多工作,所以一個教程或其他東西會很好。我在網上做了一些研究,發現大多數人使用自動比較工具來生成我不想做的腳本,原因很明顯,我不會在這個過程中學到任何東西。

我正在尋找一些關於如何編寫更改腳本和更新腳本的教程/連結?特別是更新腳本,因為我什至找不到關於如何通過比較 SchemaChangeLog 表、使用腳本連接到表來更新模式的單個腳本/虛擬碼……

提前致謝!

首先,我會使用現有的解決方案,例如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');

您可能需要閱讀特定數據庫的文件,因為它們的 ALTER 語法通常略有不同。

然後,您將擁有一個非 sql 腳本(可能是 bash),它將檢查數據庫正在使用的架構版本並應用任何大於該版本的可用更新檔,或者如果沒有 schema_version 表,則應用第一個 sql 腳本。

這本書在亞馬遜上的評價很高:

重構數據庫:進化數據庫設計

引用自:https://dba.stackexchange.com/questions/48378