0Pricing
SQL Academy · บทเรียน

เครื่องมือ: 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 failure

Liquibase

ชุดการเปลี่ยนแปลงที่ใช้ 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 1

Sqitch

ใช้ 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

เปรียบเทียบทั้งสามเครื่องมือ

FlywayLiquibaseSqitch
รูปแบบSQLXML/YAML/JSONSQL
การกำหนดเวอร์ชันตามลำดับตามลำดับDAG
การย้อนกลับจำกัดในตัวในตัว
ขั้นตอนตรวจสอบไม่มีไม่บังคับมีในตัว

เครื่องมือเฉพาะของเฟรมเวิร์ก

เฟรมเวิร์กเว็บจำนวนมากมีเครื่องมือของตนเอง:

  • Rails: การปรับเปลี่ยนฐานข้อมูลของ ActiveRecord
  • Django: การปรับเปลี่ยนฐานข้อมูลในตัว
  • Node: knex, sequelize, prisma migrate
  • NestJS: การปรับเปลี่ยนฐานข้อมูลของ TypeORM

กระบวนการทำงานของ CI

pipeline มาตรฐาน:

  1. PR มีไฟล์การปรับเปลี่ยนฐานข้อมูลใหม่
  2. CI เริ่มต้น Postgres ที่ว่างเปล่าและเรียกใช้การปรับเปลี่ยนฐานข้อมูลทั้งหมด
  3. เรียกใช้การทดสอบอัตโนมัติกับสคีมาที่ปรับเปลี่ยนแล้ว
  4. เมื่อรวมการเปลี่ยนแปลงแล้ว ให้นำไปใช้และเรียกใช้การปรับเปลี่ยนฐานข้อมูลกับสภาพแวดล้อมทดสอบ จากนั้นจึงทำกับระบบจริง

การปรับเปลี่ยนฐานข้อมูลที่ทำซ้ำได้

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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การย้ายข้อมูลแบบออนไลน์: เหตุผลที่ ALTER TABLE ล็อกตาราง
  2. ดัชนีแบบทำงานพร้อมกัน (CREATE INDEX CONCURRENTLY)
  3. การเปลี่ยนชื่อคอลัมน์โดยไม่หยุดให้บริการ
  4. เครื่องมือ: Flyway, Liquibase, Sqitch
← กลับไปที่ SQL Academy