Logo

新人日誌

首頁關於我部落格

新人日誌

Logo

網站會不定期發佈技術筆記、職場心得相關的內容,歡迎關注本站!

網站
首頁關於我部落格
部落格
分類系列文

© 新人日誌. All rights reserved. 2020-present.

本文為「Hasura Migration 完全指南」系列第 3 篇

本地 Hasura vs 雲端 Console:為什麼會有兩種版本?一篇講清楚

最後更新:2025年8月6日Web API

如果你剛接觸 Hasura,可能會有這些疑問:

  • 「Hasura 是資料庫嗎?還是某種雲端服務?」
  • 「為什麼它有本地版,也有雲端 Console?我該用哪一個?」

這些疑問很正常,因為 Hasura 和我們熟悉的「資料庫」或「後端框架」都不一樣。

它本質上是一個 在資料庫上快速生成 API 的引擎,而且同時提供 「自己架設」的本地版本 和 「官方托管」的雲端版本,以滿足不同使用需求。

這篇文章會幫你從 Hasura 的定位與歷史背景 說起,讓你知道 為什麼 Hasura 會有這兩種版本、它們的設計理念是什麼,最後還會用 一張比較表,幫助你快速判斷 自己該用哪一個版本。

Hasura 是什麼?它是資料庫嗎?

為什麼大家會以為 Hasura 是資料庫?

很多初學者第一次接觸 Hasura 時,都會產生一個強烈的錯覺:

「這不就是一個資料庫後台嗎?我可以直接新增資料表、修改欄位,甚至直接插入和刪除資料,這不就是一個雲端資料庫嗎?」

這個錯覺非常合理,因為 Hasura Console(它的管理儀錶板)看起來幾乎和傳統的資料庫管理工具長得一模一樣。

為什麼會有這種錯覺?

  • 介面上像資料庫管理工具
  • 你能在左邊看到所有的 Table 名稱、欄位、Relationship,跟我們熟悉的 phpMyAdmin、pgAdmin 幾乎沒差別。
  • 功能上也像資料庫
  • 你能「建表、刪表、改欄位」→ 和傳統 DBA 的工作一模一樣
  • 你能「直接插入、更新、刪除資料」→ 看起來就是在資料庫內編輯資料
  • 你能「直接查詢資料」→ Console 的 Data 頁籤甚至就像一個 SQL Query 視窗

很多初學者看到這些功能後,自然就會把 Hasura 和 Firebase、Supabase 這種「雲端資料庫服務」畫上等號。

Hasura 的真正定位:它不是資料庫

但事實上,Hasura 並不是一個資料庫,也不取代你現有的資料庫。

Hasura 本質上是什麼?

Hasura 的本質是一個 「API 引擎」,它的核心價值是:

  1. 讀取你現有的資料庫結構 → 分析出 Table、欄位、關聯關係
  2. 自動生成 API → 讓你用 GraphQL / REST 的方式直接存取這些資料

✅ 一句話理解:Hasura 是一個「API 快速生成器」,而不是一個新的資料庫。

那 Hasura Console 為什麼能像資料庫一樣操作?

Console 做的只是「代替你發 SQL 指令」

你在 Hasura Console 上看到的所有操作,本質上只是 Hasura 幫你向底層資料庫發送 SQL 指令而已。

舉個具體例子:

你在 Console 上的動作實際上 Hasura 做了什麼
建立新資料表執行 CREATE TABLE SQL 指令
插入一筆資料執行 INSERT INTO SQL 指令
瀏覽一個 Table執行 SELECT * FROM table_name
刪除一筆資料執行 DELETE FROM SQL 指令
建立 Relationship更新 Hasura Metadata 並在底層可能新增 Foreign Key
實際上 Hasura 做了什麼執行 CREATE TABLE SQL 指令
實際上 Hasura 做了什麼執行 INSERT INTO SQL 指令
實際上 Hasura 做了什麼執行 SELECT * FROM table_name
實際上 Hasura 做了什麼執行 DELETE FROM SQL 指令
實際上 Hasura 做了什麼更新 Hasura Metadata 並在底層可能新增 Foreign Key

所以當你在 Console 上「新增一筆資料」時,資料實際是存進你自己連接的 PostgreSQL / MySQL 資料庫裡,而不是 Hasura 自己維護的某個獨立儲存系統。

✅ Hasura 自己沒有資料庫,它只是你和資料庫之間的「代理人」。

Hasura 的運作邏輯:它在系統中的角色

你可以把 Hasura 想像成一個「聰明的服務生」:

  • 你給它一張菜單(資料庫結構) → 它自動看懂每道菜是什麼(哪些 Table、哪些欄位)
  • 你告訴它想吃什麼(GraphQL / REST 請求) → 它幫你到廚房(資料庫)拿正確的菜(資料)
  • 它本身不煮菜(不存資料) → 它只負責「幫你拿、幫你送」

在技術層面,Hasura 主要做了三件事:

  1. 翻譯請求
  • 你給它 GraphQL Query,它會幫你翻譯成底層的 SQL 查詢
  1. 執行請求
  • 它向資料庫發送 SQL,取得結果後回傳給你
  1. 加上額外能力
  • 例如自動生成角色權限檢查、支援即時訂閱(Subscription)、事件觸發器(Event Trigger)等。

這就是為什麼,Hasura 的價值不在於「存資料」,而在於「幫你省下後端開發的時間」。

那為什麼不直接用資料庫,還要多一層 Hasura?

很多人會問:「既然 Hasura 只是幫我下 SQL,那我直接操作資料庫不就好了?」

但 Hasura 的價值在於:它讓你省下手寫後端 API 的時間,並提供大量進階功能:

自己寫 API用 Hasura
需要自己撰寫 Controller、SQL Query、驗證邏輯自動生成 CRUD API,直接使用
要額外實作角色權限內建角色權限管理
要自己處理即時更新內建 GraphQL Subscription
要自己寫 Webhook 邏輯內建 Event Trigger
用 Hasura自動生成 CRUD API,直接使用
用 Hasura內建角色權限管理
用 Hasura內建 GraphQL Subscription
用 Hasura內建 Event Trigger

對於需要快速開發原型或維護大量業務資料的團隊來說,這是極大的優勢。

為什麼需要 Migration?

Hasura 除了生成 API,還需要幫你管理兩大類變更:

  1. Database Migration(資料庫結構的變更)
  • 新增 / 修改資料表、欄位、索引
  1. Metadata Migration(API 設定的變更)
  • 權限、Relationship、事件觸發器(Event Trigger)

如果只是單機開發,你可以隨便改;但在團隊合作或跨環境部署時,你就需要一套能「記錄、回滾、同步」的機制,這就是 Migration 存在的原因。

為什麼會有「本地」與「雲端」兩種版本?

Hasura 的歷史背景

初期:完全開源,只提供本地版

Hasura 2018 年以開源專案的形式問世,目標非常明確:

「讓開發者能在自己擁有的資料庫上,快速生成 GraphQL / REST API。」

在那個時候,Hasura 完全是給 技術團隊與開發者用的工具,典型的使用方式是:

  1. 在自己的伺服器或本地環境,透過 Hasura CLI 搭配 Docker / Kubernetes 啟動 Hasura。
  2. 把 Hasura 連接到自家資料庫(多為 PostgreSQL)。
  3. 在開發過程中,Hasura 會自動幫你生成 Migration 檔案(up.sql、down.sql、metadata.yaml),方便你用 Git 做版本控制,並在 CI/CD 流程中自動同步到測試站、正式站。

這樣的工作流非常適合大型團隊與嚴謹的專案開發,因為它高度可控、可追蹤、可回滾。

但問題也很明顯——這對初學者來說太複雜了。

用戶需求的變化:大家想要「更快、更省事」

隨著 Hasura 開源社群的成長,許多新用戶不是專業後端工程師,而是:

  • 想要快速做出產品雛型的前端工程師或獨立開發者
  • 不想花時間維護伺服器的小型團隊或創業團隊

他們的需求跟企業用戶完全不同:

  • 「我不想自己架設 Docker,也不想研究 Migration,只要能直接用就好。」
  • 「我希望像 Firebase 一樣,打開瀏覽器就能操作。」

為了滿足這群「只求快速上線」的用戶,Hasura 官方在 2020 年左右推出了 Hasura Cloud(雲端 Console)。

雲端版的誕生

Hasura Cloud 的設計理念是:

「幫你托管好所有基礎設施,你只要專注在 API 與資料操作。」

因此:

  • 不需要自己部署伺服器 → 官方已幫你托管
  • 不需要關心 Migration → 所有操作都直接寫入資料庫與 Hasura Metadata
  • 打開瀏覽器就能開始用 → 非常適合新手與快速驗證想法(MVP 開發)

這使得 Hasura 不再只是一個給專業後端用的工具,而是大幅降低了入門門檻。

設計理念的不同

Hasura 之所以同時保留 本地版與雲端版,是因為兩者面向的用戶需求完全不同。

本地版 (開源)

  • 設計理念:以 Git 與自動化為中心
  • 核心目標:適合嚴謹的專案開發,特別是多環境、多人的團隊
  • 特點:
  • 所有操作都會被檔案化(Migration 檔案、Metadata)
  • 可進行版本控制與回滾
  • 適合搭配 CI/CD,在多個環境保持一致
  • 代價:需要自己部署與維護伺服器,學習成本較高

雲端版 (Hasura Cloud / Console)

  • 設計理念:以快速體驗為中心
  • 核心目標:適合快速開發、原型驗證、初學者
  • 特點:
  • 免部署、免維護 → 開箱即用
  • 所有操作立即生效 → 不需要學習 Migration 工作流
  • 非常適合短期專案或個人專案
  • 代價:
  • 缺乏版本控制 → 多人協作或跨環境同步困難
  • 長期維護大型專案風險高

兩種版本的對比

項目本地版 (開源)雲端版 (Hasura Cloud)
設計理念以 Git 與自動化為中心以快速體驗為中心
適用對象中大型團隊、正式專案初學者、個人專案、MVP
部署與維護需自行部署與維護官方托管,開箱即用
版本控制✅ 支援(Migration + Git)❌ 不支援
環境一致性✅ 可保證(CI/CD)❌ 容易出現不同步
改動生效時間手動執行 hasura migrate apply立即生效
學習門檻較高(需懂 CLI 與 Docker)較低
本地版 (開源)以 Git 與自動化為中心
雲端版 (Hasura Cloud)以快速體驗為中心
本地版 (開源)中大型團隊、正式專案
雲端版 (Hasura Cloud)初學者、個人專案、MVP
本地版 (開源)需自行部署與維護
雲端版 (Hasura Cloud)官方托管,開箱即用
本地版 (開源)✅ 支援(Migration + Git)
雲端版 (Hasura Cloud)❌ 不支援
本地版 (開源)✅ 可保證(CI/CD)
雲端版 (Hasura Cloud)❌ 容易出現不同步
本地版 (開源)手動執行 hasura migrate apply
雲端版 (Hasura Cloud)立即生效
本地版 (開源)較高(需懂 CLI 與 Docker)
雲端版 (Hasura Cloud)較低

本地 Hasura 環境:與檔案系統高度整合

什麼是 Hasura CLI?為什麼本地一定要用它?

Hasura CLI 是什麼?

Hasura CLI(Command Line Interface) 是 Hasura 官方提供的一套命令列工具,用來在本地開發環境中管理 Hasura 的各種操作。

你可以把它想像成 Hasura 的「遙控器」與「工作流管理員」,負責幫你:

  1. 控制 Hasura
  • 例如啟動本地的管理介面(Console UI)、連接資料庫、執行 Migration。
  1. 生成檔案
  • 自動幫你把所有資料庫結構變更、Metadata 設定,寫成 SQL 或 YAML 檔案,方便追蹤。
  1. 部署同步
  • 一鍵把本地變更套用到其他環境(例如測試站、正式站)。

✅ 簡單說:如果你要在本地「正式開發 Hasura 專案」,CLI 是不可或缺的核心工具。

為什麼本地一定要用 CLI?

Hasura 本地版的核心理念是:

「檔案才是真相(Files as the Source of Truth)」

這意味著任何改動都應該先寫成檔案,再同步到資料庫與 Hasura,以確保:

  • 可追蹤 → 什麼時候改了什麼一目了然
  • 可回滾 → 失敗時可用檔案快速回復
  • 可同步 → 多人協作、跨環境保持一致

而這些功能,只有 CLI 能幫你做到。

如果你直接用 Hasura 伺服器自帶的 Console(或雲端版 Console),操作會直接寫入資料庫,不會留下檔案。

Hasura CLI 能做什麼?

以下是 CLI 最常見的用途與對應指令:

用途指令說明
啟動本地 Console UIhasura console打開本地代理 UI,所有操作都會同步生成 Migration 檔案
建立 Migration 檔案hasura migrate create "name" --sql手動建立 SQL 檔案,記錄資料庫結構變更
套用 Migrationhasura migrate apply把本地的 SQL 檔案套用到目標資料庫
匯出 Metadatahasura metadata export把 Hasura 的設定(權限、關聯等)匯出成 YAML 檔
套用 Metadatahasura metadata apply把 YAML 設定套用到目標環境
查看 Migration 狀態hasura migrate status確認本地與遠端環境是否同步
指令hasura console
說明打開本地代理 UI,所有操作都會同步生成 Migration 檔案
指令hasura migrate create "name" --sql
說明手動建立 SQL 檔案,記錄資料庫結構變更
指令hasura migrate apply
說明把本地的 SQL 檔案套用到目標資料庫
指令hasura metadata export
說明把 Hasura 的設定(權限、關聯等)匯出成 YAML 檔
指令hasura metadata apply
說明把 YAML 設定套用到目標環境
指令hasura migrate status
說明確認本地與遠端環境是否同步

什麼是 Hasura Server?

很多初學者在第一次接觸 Hasura 時,會誤以為 Hasura 本身只是個「管理介面(Console)」或「本地工具」。

其實不然,Hasura 的核心是「Hasura Server」。

Hasura Server 是什麼?

Hasura Server 是一個常駐運行的服務,負責:

  1. 連接你的資料庫(Postgres、MySQL、SQL Server…)
  2. 自動生成 API(GraphQL / REST)
  3. 處理來自前端或 CLI 的所有請求
  4. 維護 Hasura Metadata(權限、Relationship、Event Trigger 等設定)

你可以把它想像成一個「智慧型 API 服務員」:

  • 當有人發送 GraphQL 請求時,Hasura Server 會幫你把請求轉成 SQL,去資料庫抓資料再回傳結果。
  • 當你在 Console(UI)上改動資料表或設定權限時,也是 Server 在後台執行對應的 SQL 或更新 Metadata。

✅ 一句話理解:Hasura Server 才是整個系統的「大腦」,而 CLI / Console 只是跟它互動的工具。

Hasura Server 跟 CLI 的關係是什麼?

  • Hasura Server:
    • 持續運行,負責「真正執行操作」。
    • 當你要新增一個 Table、設定權限,最後還是要 Server 幫你執行。
  • Hasura CLI:
    • 更像一個「中介人 & 秘書」。
    • 它會先幫你把所有操作記錄成檔案,再把請求轉給 Hasura Server執行。

✅ 比喻:

  • Server = 廚師 → 真正煮菜(執行 SQL / GraphQL)。
  • CLI = 負責點菜 & 記錄訂單的服務生 → 確保每道菜(操作)都有紀錄(檔案)。

Hasura Server 跟 Console(UI)的關係

Hasura 的 Console(UI)有兩種來源,差別在於「操作是否會先被記錄成檔案」:

Console 類型提供者它怎麼跟 Server 溝通?
Server 自帶的 ConsoleHasura Server 本身操作會直接打到 Hasura Server → 不生成檔案
CLI 啟動的 ConsoleHasura CLI(本地代理)操作會先經過 CLI Proxy → CLI 生成檔案 → 再轉發給 Hasura Server
提供者Hasura Server 本身
它怎麼跟 Server 溝通?操作會直接打到 Hasura Server → 不生成檔案
提供者Hasura CLI(本地代理)
它怎麼跟 Server 溝通?操作會先經過 CLI Proxy → CLI 生成檔案 → 再轉發給 Hasura Server

所以,如果你要在本地進行正式開發、希望每一次變更都有 Migration / Metadata 紀錄,就必須用 CLI 啟動的 Console。

接下來我們深入看看 「為什麼 CLI Console 能做到這件事?」

用 CLI 開啟的 Console,才會生成檔案

CLI 為什麼能生成檔案?

當你在專案目錄執行 hasura console 時,CLI 會啟動一個本地代理服務(Proxy),用來「攔截」並「加工」你在 UI 上的每一個操作。流程如下:

  1. 攔截請求
  • 例如你在 UI 點「Add Table」時,這個請求不會直接送到 Hasura Server,而是先被 CLI Proxy 接收。
  1. 生成檔案
  • CLI 會在 migrations/ 資料夾中自動生成 up.sql / down.sql,並在 metadata/ 更新相應的 YAML。
  1. 再轉發給 Hasura Server
  • 檔案生成後,CLI 才會將請求送給 Hasura Server,讓資料庫和 Hasura Metadata 實際更新。

✅ 流程示意圖:

graph TD
    A[在 Console UI 點 Add Table] --> B[CLI Proxy 攔截請求]
    B --> C[生成檔案<br/>migrations/*.sql<br/>metadata/*.yaml]
    B --> D[寫入檔案系統]
    D --> E[轉發給 Hasura Server]
    E --> F[資料庫 & Metadata 更新]

    style A fill:#e3f2fd
    style B fill:#fff3e0
    style C fill:#f1f8e9
    style D fill:#e8f5e8
    style E fill:#fff3e0
    style F fill:#e1f5fe

操作步驟:完整流程

以下是本地開發的標準步驟:

  1. 啟動 Hasura 專案
   docker-compose up -d

(確保 Postgres / Hasura Server 正常運行)

  1. 啟動 CLI Console
   hasura console

預設會開啟 http://localhost:9695(CLI Proxy)。

  1. 在 Console UI 上操作
  • 新增 Table、欄位
  • 設定 Relationship / 權限
  1. 檢查檔案是否生成
  • migrations/ 資料夾中應出現新的 <timestamp>_<name> 子資料夾
  • metadata/ 會更新相關設定
  1. 將檔案推送到 Git,便於版本控制
   git add migrations/ metadata/
   git commit -m "add user table"

新手常見問題

  1. 「我明明用 localhost 的 UI 改了東西,為什麼沒生成檔案?」
  • 檢查你是不是直接用 Server 自帶的 Console (8080/console)
  • 正確做法是:執行 hasura console → 用 CLI Proxy 的 9695 端口
  1. 「為什麼 up.sql 是空的?」
  • 如果你改的是 Metadata(例如新增 Relationship、設定權限),就只會生成 YAML,不會有 SQL。
  1. 「檔案名稱亂七八糟,看不懂?」
  • CLI 會用「時間戳 + 操作名稱」自動生成,例如: migrations/ 1721891234567_create_user_table/ up.sql down.sql

CLI 會生成什麼檔案?

在本地開發時,Hasura CLI 的最大特點,就是會把所有「結構或設定的變更」自動轉換成檔案,存放在專案中,方便後續進行 版本控制、回滾、跨環境部署。

Hasura CLI 主要會生成兩種類型的檔案:

類型檔案存放路徑主要用途
Database Migrationup.sql / down.sqlmigrations/<timestamp>_<name>/記錄 資料庫結構 的新增、修改或刪除。用於在不同環境自動同步 DB 結構,也支援回滾。
Metadata Migration多個 .yaml 檔metadata/記錄 Hasura 特有的設定,例如:權限(Permissions)、Relationship、事件觸發器(Event Triggers)等,確保多環境 Hasura 設定一致。
檔案up.sql / down.sql
存放路徑migrations/<timestamp>_<name>/
主要用途記錄 資料庫結構 的新增、修改或刪除。用於在不同環境自動同步 DB 結構,也支援回滾。
檔案多個 .yaml 檔
存放路徑metadata/
主要用途記錄 Hasura 特有的設定,例如:權限(Permissions)、Relationship、事件觸發器(Event Triggers)等,確保多環境 Hasura 設定一致。

Database Migration 檔案

這是用來記錄資料庫層級的結構變更。

每當你對資料表或欄位結構做操作,例如:新增 Table、增加欄位、刪除索引,CLI 都會生成一組新的 Migration 資料夾。

檔案組成:

  • up.sql → 做變更的 SQL 腳本
  • down.sql → 回滾變更的 SQL 腳本(例如 DROP Table、刪除欄位)

資料夾命名規則:

migrations/
  <timestamp>_<name>/
    up.sql
    down.sql
  • timestamp:13 位數的 UNIX 時間戳(精確到毫秒),確保順序性
  • name:你執行操作時 CLI 自動生成的名稱(或你手動輸入)

範例:

migrations/
  1721887654321_create_user_table/
    up.sql        # CREATE TABLE user (id UUID PRIMARY KEY, name TEXT, ...)
    down.sql      # DROP TABLE user

常見的 SQL 內容:

  • 新增 Table → CREATE TABLE ...
  • 新增欄位 → ALTER TABLE ... ADD COLUMN ...
  • 新增索引 → CREATE INDEX ...

Metadata Migration 檔案

Hasura 除了管理資料庫結構,還會自動維護 Hasura 特有的設定,這些設定與 SQL 無關,因此會以 YAML 檔案形式存放。

會被記錄的設定包括:

  • 權限(Permissions) → 哪個角色可以查詢/新增/更新/刪除哪些欄位
  • Relationship → Hasura 自動生成的關聯設定
  • Event Triggers → 當資料變動時,觸發 Webhook 的設定
  • Remote Schema / Actions → 與其他 API 整合的設定

檔案結構:

metadata/
  databases/
    default/
      tables/
        public_user.yaml   # 記錄 user 表的所有 Metadata,如權限 & Relationship
  actions.yaml
  cron_triggers.yaml
  version.yaml

範例(public_user.yaml 可能包含的設定):

table:
  schema: public
  name: user
select_permissions:
  - role: user
    permission:
      columns: ["id", "name"]
      filter: {}
object_relationships:
  - name: profile
    using:
      foreign_key_constraint_on: profile_id

檔案生成的時機

Hasura CLI 會在以下情況下生成檔案:

操作會生成什麼?
新增 Table / 欄位生成新的 migrations/<timestamp>_.../up.sql & down.sql,以及更新 metadata/ 中的對應 table 設定
修改權限 / Relationship只更新 metadata/(SQL 結構未改變,不會產生 Migration 資料夾)
刪除 Table生成一組新的 Migration 資料夾,並更新 Metadata
會生成什麼?生成新的 migrations/<timestamp>_.../up.sql & down.sql,以及更新 metadata/ 中的對應 table 設定
會生成什麼?只更新 metadata/(SQL 結構未改變,不會產生 Migration 資料夾)
會生成什麼?生成一組新的 Migration 資料夾,並更新 Metadata

✅ 小結:

  • SQL 結構變更 → migrations/
  • Hasura 設定變更 → metadata/
  • 兩者同時發生 → 兩個資料夾都會更新

檔案的實際用途

這些檔案的存在,讓你可以:

  1. 版本控制
  • Git 追蹤每一次變更,誰改了什麼一目了然
  1. 回滾
  • 透過 CLI 執行 hasura migrate apply --down 1 就能回到上一個版本
  1. 跨環境同步
  • 在 CI/CD 中一鍵部署 hasura migrate apply --endpoint=$PROD_URL hasura metadata apply --endpoint=$PROD_URL

檔案結構完整範例

假設你在 UI 上新增一張 user 表並設定基本權限,專案會多出以下結構:

migrations/
  1721887654321_create_user_table/
    up.sql        # CREATE TABLE user (id UUID PRIMARY KEY, name TEXT)
    down.sql      # DROP TABLE user

metadata/
  databases/
    default/
      tables/
        public_user.yaml     # Hasura 設定:權限、Relationship
  version.yaml

適用場景

因為本地 Hasura 強調「版本控制」與「跨環境一致性」,它非常適合正式專案與多人協作。

多人協作開發

  • Git 追蹤:所有 Migration 與 Metadata 檔案都能被 Git 追蹤,團隊成員可以透過 Pull Request 清楚檢視彼此的改動。
  • 避免衝突:因為所有改動都以檔案形式存在,不會出現「某個同事在資料庫直接改了欄位,導致其他人環境不一致」的情況。

跨環境部署

  • 典型流程:
  1. 在本地開發 → Hasura CLI 生成 Migration 檔案
  2. 推送到 Git → CI/CD 會讀取這些檔案
  3. 在測試站或正式站執行 hasura migrate apply → 自動同步相同變更
  • 環境一致性保障:每個環境都使用同一套 Migration,避免測試環境與正式環境的 Schema 不一致。

不適用的場景

反過來,如果只是想快速試驗或是個人短期專案,本地 Hasura 反而顯得「太重」。

因為:

  • 你必須學會 CLI、Docker 的基礎操作
  • 每次改動都需要生成檔案再套用,無法像雲端 Console 那樣即改即用

雲端 Console:直接操作即時生效

運作機制

雲端 Console 是什麼?

Hasura Cloud Console(通常簡稱 雲端 Console)是一個由 Hasura 官方托管的管理後台。

你不需要自己部署 Hasura Server,只要註冊帳號、綁定資料庫,打開瀏覽器就能直接使用。

✅ 一句話理解:它更像 Firebase 這類雲端後台服務,重點是「即時方便」而不是「可版本控制」。

運作邏輯:為什麼不會生成檔案?

在雲端 Console 中,你的所有操作都是直接呼叫雲端上的 Hasura Server API,例如 /v1/metadata 或 /v2/query,因此:

  1. 直接修改資料庫 / Metadata
  • 例如你在 UI 上新增 Table,Hasura Server 會立刻對底層資料庫執行 CREATE TABLE SQL。
  1. 不會經過 CLI Proxy
  • 因為沒有 CLI,「檔案生成」這個步驟完全被省略。
  • 你在本地專案資料夾裡也不會看到任何 migrations/ 或 metadata/ 的更新。
  1. 操作即時生效
  • 改完立刻生效,無需額外執行 hasura migrate apply。

✅ 流程示意圖:

graph TD
    A[在 Console UI 點 Add Table] --> B[直接打到 Hasura Server]
    B --> C[資料庫 & Metadata 更新]
    B --> D[不生成任何檔案]

    style A fill:#e3f2fd
    style B fill:#ffcdd2
    style C fill:#e1f5fe
    style D fill:#ffebee

這種即時操作很方便,但長期來看,會讓環境之間難以保持一致。

雲端 Console vs 本地 CLI:核心差異

項目雲端 Console本地 CLI Console
變更傳遞路徑UI → Hasura Server(直接更新)UI → CLI Proxy → Hasura Server
檔案生成❌ 不會生成檔案✅ 自動生成 Migration / Metadata
改動生效時間立即生效需執行 hasura migrate apply
適用對象初學者、快速上線需求正式專案、多人協作
跨環境同步❌ 無法自動同步,需人工複製操作✅ 透過 Git + CLI 輕鬆同步
版本控制❌ 無法追蹤,改動紀錄全在雲端✅ 完全可追蹤(檔案即真相)
雲端 ConsoleUI → Hasura Server(直接更新)
本地 CLI ConsoleUI → CLI Proxy → Hasura Server
雲端 Console❌ 不會生成檔案
本地 CLI Console✅ 自動生成 Migration / Metadata
雲端 Console立即生效
本地 CLI Console需執行 hasura migrate apply
雲端 Console初學者、快速上線需求
本地 CLI Console正式專案、多人協作
雲端 Console❌ 無法自動同步,需人工複製操作
本地 CLI Console✅ 透過 Git + CLI 輕鬆同步
雲端 Console❌ 無法追蹤,改動紀錄全在雲端
本地 CLI Console✅ 完全可追蹤(檔案即真相)

適用場景

雲端 Console 的定位是**「快速、簡單」**,適合以下場景:

原型開發與快速驗證(MVP)

  • 你可以直接在雲端 Console 中幾分鐘內就完成一個 API 的建置,非常適合:
  • 初期測試產品概念
  • Hackathon 或快速交付原型

臨時調整正式環境的小問題

  • 例如:
  • 緊急開放某個角色的權限
  • 快速增加一個臨時使用的 Table
  • 在無法等候完整 CI/CD 流程時,雲端 Console 是最快的解決方案。

不適用的場景 & 風險

雲端 Console 不適合用於長期維護的正式專案,原因如下:

  1. 無法保證環境一致性
  • 你在雲端直接操作後,本地或測試環境無法自動同步。
  • 團隊成員需要手動「複製操作」,非常容易出錯。
  1. 缺乏版本控制
  • 改動不會以檔案形式保留下來,無法使用 Git 追蹤,也無法回滾到舊版本。
  1. 多人協作困難
  • 團隊成員無法在 Pull Request 中 review 你的 Schema 變更。

✅ 結論:雲端 Console 適合短期與單人開發,但如果專案需要長期維護,一定要盡早轉向本地 CLI 版工作流。

總結

  • 本地 Hasura 是一個以「版本控制與跨環境部署」為核心設計的工作流,所有操作都會轉化為檔案,方便追蹤與自動化。
  • 雲端 Console 則像是一個「管理後台」,適合快速測試與臨時修改,但不適合長期團隊協作。

如果你要開始正式的 Hasura 專案,建議盡早熟悉本地 Migration 流程,讓你的專案更穩定、更容易維護。

上一篇Hasura Migration 的三種類型一次搞懂:初學者也能快速判斷
下一篇Hasura Database Migration:從 0 到 1 的基礎操作
目前還沒有留言,成為第一個留言的人吧!

發表留言

留言將在審核後顯示。

Web API

目錄

  • Hasura 是什麼?它是資料庫嗎?
  • 為什麼大家會以為 Hasura 是資料庫?
  • Hasura 的真正定位:它不是資料庫
  • 那 Hasura Console 為什麼能像資料庫一樣操作?
  • Hasura 的運作邏輯:它在系統中的角色
  • 那為什麼不直接用資料庫,還要多一層 Hasura?
  • 為什麼需要 Migration?
  • 為什麼會有「本地」與「雲端」兩種版本?
  • Hasura 的歷史背景
  • 設計理念的不同
  • 兩種版本的對比
  • 本地 Hasura 環境:與檔案系統高度整合
  • 什麼是 Hasura CLI?為什麼本地一定要用它?
  • 什麼是 Hasura Server?
  • 用 CLI 開啟的 Console,才會生成檔案
  • CLI 會生成什麼檔案?
  • 檔案結構完整範例
  • 適用場景
  • 雲端 Console:直接操作即時生效
  • 運作機制
  • 適用場景
  • 不適用的場景 & 風險
  • 總結