เครื่องมือ: Flyway, Liquibase, Sqitch
เปรียบเทียบเครื่องมือย้ายโครงสร้างข้อมูลยอดนิยม รูปแบบการกำหนดเวอร์ชัน และการผสานเข้ากับ CI
เครื่องมือ: Flyway, Liquibase, Sqitch เป็นบทเรียน SQL Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน SQL Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส SQL Academy มีบทเรียนทั้งหมด 4 บทเรียน
เหตุใดจึงต้องใช้เครื่องมือการปรับเปลี่ยนฐานข้อมูล
การเปลี่ยนแปลงสคีมาต้อง:
- กำหนดเวอร์ชันไว้ในระบบควบคุมซอร์สโค้ด
- นำไปใช้ตามลำดับที่แน่นอน
- ทำงานโดยอัตโนมัติใน CI/CD
- สามารถย้อนกลับได้ในบางกรณี
Flyway
การปรับเปลี่ยนฐานข้อมูลที่ใช้ Java และใช้ไฟล์เป็นพื้นฐาน แต่ละไฟล์ตั้งชื่อด้วยคำนำหน้าหมายเลขเวอร์ชัน:
-- V1__create_users.sql
CREATE TABLE users (id BIGSERIAL PRIMARY KEY, email TEXT NOT NULL);
-- V2__add_full_name.sql
ALTER TABLE users ADD COLUMN full_name TEXT;
-- Flyway tracks applied migrations in a flyway_schema_history table.อินเทอร์เฟซบรรทัดคำสั่งของ Flyway
นำการปรับเปลี่ยนฐานข้อมูลไปใช้:
flyway -url=jdbc:postgresql://localhost/mydb -user=app migrate
flyway info # show what would run
flyway repair # fix the history table after a failureLiquibase
ชุดการเปลี่ยนแปลงที่ใช้ XML/YAML/JSON หรือ SQL เป็นพื้นฐาน มีรายละเอียดมากกว่า Flyway แต่รองรับชั้นนามธรรมที่ทำงานข้ามฐานข้อมูล:
<!-- changeset alice:001 -->
<createTable tableName="users">
<column name="id" type="bigserial" autoIncrement="true">
<constraints primaryKey="true"/>
</column>
<column name="email" type="text"><constraints nullable="false"/></column>
</createTable>การรองรับการย้อนกลับของ Liquibase
ชุดการเปลี่ยนแปลงแต่ละชุดสามารถประกาศการดำเนินการย้อนกลับได้ Liquibase สามารถย้อนกลับการเปลี่ยนแปลงล่าสุดจำนวน N รายการ:
liquibase rollbackCount 1Sqitch
ใช้ SQL โดยตรง ไม่มีการจัดลำดับด้วยหมายเลขเวอร์ชัน แต่ใช้ DAG ของการพึ่งพาที่ระบุไว้อย่างชัดเจน การเปลี่ยนแปลงแต่ละรายการมีสคริปต์สำหรับนำไปใช้ ตรวจสอบ และย้อนกลับ:
sqitch add add_users -n 'Add users table'
# edits deploy/add_users.sql, verify/add_users.sql, revert/add_users.sql
sqitch deploy db:pg://localhost/mydbเปรียบเทียบทั้งสามเครื่องมือ
| Flyway | Liquibase | Sqitch | |
|---|---|---|---|
| รูปแบบ | SQL | XML/YAML/JSON | SQL |
| การกำหนดเวอร์ชัน | ตามลำดับ | ตามลำดับ | DAG |
| การย้อนกลับ | จำกัด | ในตัว | ในตัว |
| ขั้นตอนตรวจสอบ | ไม่มี | ไม่บังคับ | มีในตัว |
เครื่องมือเฉพาะของเฟรมเวิร์ก
เฟรมเวิร์กเว็บจำนวนมากมีเครื่องมือของตนเอง:
- Rails: การปรับเปลี่ยนฐานข้อมูลของ ActiveRecord
- Django: การปรับเปลี่ยนฐานข้อมูลในตัว
- Node: knex, sequelize, prisma migrate
- NestJS: การปรับเปลี่ยนฐานข้อมูลของ TypeORM
กระบวนการทำงานของ CI
pipeline มาตรฐาน:
- PR มีไฟล์การปรับเปลี่ยนฐานข้อมูลใหม่
- CI เริ่มต้น Postgres ที่ว่างเปล่าและเรียกใช้การปรับเปลี่ยนฐานข้อมูลทั้งหมด
- เรียกใช้การทดสอบอัตโนมัติกับสคีมาที่ปรับเปลี่ยนแล้ว
- เมื่อรวมการเปลี่ยนแปลงแล้ว ให้นำไปใช้และเรียกใช้การปรับเปลี่ยนฐานข้อมูลกับสภาพแวดล้อมทดสอบ จากนั้นจึงทำกับระบบจริง
การปรับเปลี่ยนฐานข้อมูลที่ทำซ้ำได้
Flyway มีการปรับเปลี่ยนฐานข้อมูลที่ทำซ้ำได้แบบ "R__" ซึ่งจะทำงานซ้ำทุกครั้งที่มีการเปลี่ยนแปลง เหมาะสำหรับ VIEW และกระบวนงานที่จัดเก็บไว้:
-- R__users_view.sql (re-applied whenever its checksum changes)
CREATE OR REPLACE VIEW active_users AS
SELECT id, email FROM users WHERE deleted_at IS NULL;การตรวจจับสคีมาที่คลาดเคลื่อน
ใช้ migra, schemahero หรือ pgquarrel เพื่อตรวจจับความแตกต่างระหว่างสคีมาที่คาดไว้กับสคีมาจริง
สรุป
เลือกเครื่องมือหนึ่งอย่างแล้วใช้อย่างต่อเนื่อง
- Flyway — เน้น SQL เป็นหลัก ใช้งานง่าย
- Liquibase — เชิงประกาศ มีชั้นนามธรรม
- Sqitch — การพึ่งพาแบบ DAG และให้ความสำคัญกับการย้อนกลับ
- สิ่งที่ต้องทำเสมอ: กำหนดเวอร์ชันในระบบควบคุมซอร์สโค้ดและทำให้ CI ทำงานโดยอัตโนมัติ
แบบทดสอบสั้น ๆ
เครื่องมือใดใช้ DAG ของการพึ่งพาระหว่างการปรับเปลี่ยนฐานข้อมูลโดยตรง แทนการใช้หมายเลขเวอร์ชันตามลำดับ
คำถามที่พบบ่อย
บทเรียน “เครื่องมือ: Flyway, Liquibase, Sqitch” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “เครื่องมือ: Flyway, Liquibase, Sqitch” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส SQL Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส SQL Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “เครื่องมือ: Flyway, Liquibase, Sqitch”
เปรียบเทียบเครื่องมือย้ายโครงสร้างข้อมูลยอดนิยม รูปแบบการกำหนดเวอร์ชัน และการผสานเข้ากับ CI คุณปฏิบัติ SQL Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน SQL Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน SQL Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “เครื่องมือ: Flyway, Liquibase, Sqitch” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน SQL Academy นี้ได้ไหม
ได้ บทเรียน SQL Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การย้ายข้อมูลแบบออนไลน์: เหตุผลที่ ALTER TABLE ล็อกตาราง
- ดัชนีแบบทำงานพร้อมกัน (CREATE INDEX CONCURRENTLY)
- การเปลี่ยนชื่อคอลัมน์โดยไม่หยุดให้บริการ
- เครื่องมือ: Flyway, Liquibase, Sqitch