Supabase的觸發器功能介紹 | Trigger in Supabase

閱讀時間約 6 分鐘
Supabase的觸發器功能介紹 | Trigger in Supabase封面圖片

Supabase的觸發器功能介紹 | Trigger in Supabase封面圖片

本篇文章主要介紹Supabase裡的Trigger的功能,詳細說明什麼是Trigger和使用時機,以及如何在後台瀏覽和設定Trigger,此外,文章中會提供一個常用的Trigger功能範例。

嗨歡迎閱讀我的文章!這是關於Supabase的系列文章,內容包含介紹Supabase是什麼、基本功能應用,深入了解Supabase的進階功能應用。

什麼是觸發器(Trigger)?

觸發器(Trigger)是一個在資料庫中自動執行任務的功能,而這個觸發器可以劃分成兩個部分,第一個是觸發的條件,第二個則是執行的內容。

觸發條件

觸發條件就是在資料庫的表格發生新增更新刪除資料等時間點,可以設定是要在執行表格任務的前或後執行函式或任務。

執行的內容

當指定的觸發條件發生時,就會執行設定好的函式或任務,並將此次執行所需的資料傳遞至該函式。通常,這可以用於驗證資料格式、進行邏輯處理、記錄等功能。當然,也可用於執行大量重複的資料表格操作。

後台觸發器(Trigger)的位置

由後台面板新增

supabase中,直接進入後台介面後選擇Database頁籤,選擇Triggers,就可以看到目前這個資料庫裡面的所有觸發器。

Trigger的頁籤

Trigger的頁籤

首次進入頁面可以看到很多預設的觸發器,點擊右上角的Create a new trigger可以開啟新增觸發器的介面。

新增觸發器面板

新增觸發器面板

supabase非常友善於不太會撰寫SQL的人提供這個面板,可以根據想要的觸發器功能依照欄位填寫,最下方再把基本的SQL填入新增即可。

由SQL Editor新增

對於PostgreSQL相當熟悉的人依舊可以選擇由SQL Editor直接撰寫想要的觸發器功能,甚至可以連同需要執行的函式功能一起新增綁定。

當然在現今版本中有Supabase AI的協助之下也能夠產生出觸發器基本的語法,再根據內容做微調或是修改就可以。

新增首個觸發器

設定觸發器的目標

延續前面文章的內容,我希望在我的待辦清單表格中新增一個名為updated_at的欄位。每當我更新按讚數字時,這個欄位的值都會被更新為當前的時間。

updated_at是很多表格都會具備的欄位。

設定這個觸發器的目的是為了減輕前端執行重複的工作負擔。否則,如果在前端更新資料後再重新更新欄位時間,這個過程將變得更加複雜。

新增觸發器的函式

去前面幾篇提到的新增函式的頁面,直接新增一個全新的函式。

新增函式

新增函式

名字叫做update_timeReture type的欄位要設定成trigger才能在等一下觸發器的頁面選擇這個函式,下方Definition的內容如下。

BEGIN
NEW.updated_at = NOW();
RETURN NEW;
END;

大致上內容和上一篇文章提到的內容差不多,只是這次是在UI介面中設定,不用撰寫sql。

Supabase的函式功能介紹與實作 | Functions with Supabase

而這段sql中有用到環境變數NEW,實際上還有很多個環境變數可以使用,詳細的內容可以參考官方文件。

官方文件

成功新增完成,在Functions的列表就可以看到剛剛的那個函式,Return type是寫trigger

觸發器的函式新增完成

觸發器的函式新增完成

到這裡已經完成新增函式的動作,接下來要去新增觸發器。

套用觸發器

把頁籤切回觸發器的地方,點擊右上角新增觸發器。

新增觸發器(Trigger)面板

新增觸發器(Trigger)面板

命名的部分就取個名字,我這裡是取叫做handle_updated_at,細項如下:

  • Table:選擇表格todos
  • Events:這裡可以選擇觸發的事件名稱,因為是更新時間所以把Update勾選。
  • Trigger type: 選擇Before the event在更新前就把時間更新完成。
  • Orientation:這個問題是,如果多筆資料同時滿足條件,是希望每筆資料都觸發一次事件,還是只在整筆資料觸發一次,這裡的情境下,希望每一筆資料在更新時都能夠被更新,因此選擇Row

把選項都填入以後按下新增,第一個觸發器就完成囉!接著進入測試的時間。

前端實測

新增完成觸發器的設定,接著就可以回到前端實測到底更新資料的時候會不會把updated_at的欄位一起更新至最新時間。

修改成讓畫面顯示最後更新時間

修改成讓畫面顯示最後更新時間

我把我的測試頁面挖一個表格空間給updated_at欄位顯示,所以現在只要對我的資料點讚發生更新,最後更新時間也會一起被更新到目前時間。

更新按讚數後時間也隨著更新

更新按讚數後時間也隨著更新

可以看到,當按讚ID 8的資料時,該筆資料的likes更新操作觸發了之前設定的函式,因此連帶著updated_at也同時被更新到最新的時間,這個觸發器設定成功生效。

直接使用插件更新時間

最後更新時間在實務上很常被使用,所以PostgreSQL有提供一個插件可以使用,直接提供整段sql一鍵開啟並且套用在表格上。

create extension if not exists moddatetime schema extensions;

create trigger
handle_updated_at before update
on <表格名稱>
for each row execute
procedure moddatetime(updated_at);

這段就是直接開啟這個插件,並且新增一個觸發器套用在表格上,當然先決條件是這個表格要有updated_at的欄位。

結語

善用觸發器(Trigger)的話,能夠幫助開發者減少重複執行的工作,提高資料庫效能和安全性,可以說是一個強大而且實用的功能。

有興趣的內容

6會員
23內容數
沙龍新手
留言0
查看全部
發表第一個留言支持創作者!
技術叢林 的其他內容
這篇要介紹的是Supabase裡的Functions,我不知道有沒有官方的中文譯名,我都直接稱呼為函式或程式。Functions就是和任何程式語言裡面所認識的函式一樣,只差在這個Functions是在PostgreSQL裡面執行,沒有聽錯是在資料庫裡面執行的函式,文章會介紹新增的方式和做一個範例。
在前面的文章中已經在supabase中完成了基本的操作,甚至已經完成訂閱即時更新的功能,接著本篇文章要介紹的是如何在supabase裡設定與使用外來鍵,包含如何在客戶端撰寫查詢外鍵的SQL,馬上開始。如果還沒有閱讀實時更新功能文章的話可以點擊這裡去閱讀。 嗨歡迎閱讀我的文章!這是關於Supabase
在網頁裡直接監聽資料庫的變化吧! 這個聽起來需要複雜工程的事情,在supabase的幫助之下就可以解決,串接好後只要資料庫中的資料發生變化,supabase會自動把最新資料發送到前端頁面,可以讓使用者即時收到最新資訊,省去重複刷新頁面,提供使用者體驗。 在supabase中的實時更新總共有3種事件
在supabase裡可以直接從客戶端讀取資料庫中的資料,在設定好RLS的前提之下,更可以對資料庫直接進行新增、修改、刪除等操作。 先進到後台選擇SQL Editor,可以來到SQL編輯器的頁面,如果是本身會寫資料庫相關的SQL內容可以直接點擊上方的New query按鈕,可以開啟一個空白頁面開始編輯
在上篇文章中Supabase的JavaScript Client Library串接實作我們實際安裝並且使用了supabase-js連接我們的supabase資料庫,並且已經測試成功。本篇文章就來導覽一下supabase-js的文件,還有在頁面裡面示範會員管理系統的登入和登出,以及在客戶端的操作。嗨
Supabase的串接方式很多元,其中在網頁前端中使用起來最簡單也最推薦的方式就是使用官方提供的supabase-js套件,該套件已經把所有REST和REALTIME的API功能包好,可以方便的在網頁中提取使用。嗨歡迎閱讀我的文章!這是關於Supabase的系列文章,內容包含介紹Supabase是什
這篇要介紹的是Supabase裡的Functions,我不知道有沒有官方的中文譯名,我都直接稱呼為函式或程式。Functions就是和任何程式語言裡面所認識的函式一樣,只差在這個Functions是在PostgreSQL裡面執行,沒有聽錯是在資料庫裡面執行的函式,文章會介紹新增的方式和做一個範例。
在前面的文章中已經在supabase中完成了基本的操作,甚至已經完成訂閱即時更新的功能,接著本篇文章要介紹的是如何在supabase裡設定與使用外來鍵,包含如何在客戶端撰寫查詢外鍵的SQL,馬上開始。如果還沒有閱讀實時更新功能文章的話可以點擊這裡去閱讀。 嗨歡迎閱讀我的文章!這是關於Supabase
在網頁裡直接監聽資料庫的變化吧! 這個聽起來需要複雜工程的事情,在supabase的幫助之下就可以解決,串接好後只要資料庫中的資料發生變化,supabase會自動把最新資料發送到前端頁面,可以讓使用者即時收到最新資訊,省去重複刷新頁面,提供使用者體驗。 在supabase中的實時更新總共有3種事件
在supabase裡可以直接從客戶端讀取資料庫中的資料,在設定好RLS的前提之下,更可以對資料庫直接進行新增、修改、刪除等操作。 先進到後台選擇SQL Editor,可以來到SQL編輯器的頁面,如果是本身會寫資料庫相關的SQL內容可以直接點擊上方的New query按鈕,可以開啟一個空白頁面開始編輯
在上篇文章中Supabase的JavaScript Client Library串接實作我們實際安裝並且使用了supabase-js連接我們的supabase資料庫,並且已經測試成功。本篇文章就來導覽一下supabase-js的文件,還有在頁面裡面示範會員管理系統的登入和登出,以及在客戶端的操作。嗨
Supabase的串接方式很多元,其中在網頁前端中使用起來最簡單也最推薦的方式就是使用官方提供的supabase-js套件,該套件已經把所有REST和REALTIME的API功能包好,可以方便的在網頁中提取使用。嗨歡迎閱讀我的文章!這是關於Supabase的系列文章,內容包含介紹Supabase是什
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
Thumbnail
接受治療後,醫生和心理師就開始教我如何分辨自己的正常及創傷反應間的差異,以及辨識創傷觸發點。 說當能知道觸發點是什麼時,一部分是我在平時就能先減少接觸,降低些處在反應期的高壓狀態,一部份是醫事人員就能針對觸發點及對應的創傷慢慢進行一些脫敏處理
Thumbnail
前面文章有說明過訂閱資料庫的更新事件,讓前端畫面能夠收到更新資訊即時反應在用戶面前,那接下來要介紹Supabase的Webhooks則是能讓其他server端收到資料庫事件的通知。 這裡簡單說明一下Webhooks,一般來說是由前端主動呼叫後端API,取回資料,Webhooks則是由後端伺服器觸發某
Thumbnail
本篇文章又要介紹Supabase好用的實時更新功能,叫做Presence。Presence是 Supabase 提供的一項實時更新功能,讓開發者能夠輕鬆實現用戶之間的實 嗨歡迎閱讀我的文章!這是關於Supabase的系列文章,內容包含介紹Supabase是什麼、基本功能應用,深入了解Supa
Thumbnail
Supabase是使用PostgreSQL作為資料庫,所以當然也具有Storage的功能,能夠儲存用戶的圖片或是檔案,一樣可以設定讀取權限相當方便,一起瞭解如何操作。 從後台的大頁籤就可以進去Storage頁面,頁面和資料庫表格有點類似,如果有新增任何buckets就會顯示在All buckets的
Thumbnail
本篇文章主要介紹Supabase裡的Trigger的功能,詳細說明什麼是Trigger和使用時機,以及如何在後台瀏覽和設定Trigger,此外,文章中會提供一個常用的Trigger功能範例。 善用觸發器(Trigger)的話,能夠幫助開發者減少重複執行的工作,提高資料庫效能和安全性,可以說是一個強大
Thumbnail
這和股價位階、股市的行情發展與熱絡程度有關,股市過熱、籌碼凌亂、累積漲幅過大的情況下,不必是利空也會讓股價下跌,出現利空訊息只是一個觸發股價下跌的事件,在利空事件出現之前已經潛藏危機。
Thumbnail
【有些事不是不明白,而是還沒有到達那時間點的觸發,而這開關得由自己從人生經歷當中去尋找】 生命中有些事不是永遠不明白而時間點還沒到,也有些人是因為現實而被逼迫學著成長的。 還記得小時候總被大人們念著罵著,但自己就是不覺得哪裡有問題,甚至不認為是自己的錯,心中也許充滿著對周邊的人不諒解也聽不進去任何話
Thumbnail
阿里巴巴(NYSE:BABA)的業務涵蓋電子商務、金融科技、串流媒體、國際物流(如上圖)。在從歷史最高點經歷了一段慘烈而持續的下跌後,BABA的股價位階逐漸彰顯真實價值且兼具安全邊際。
Thumbnail
金融術語裡的四大神獸,包括掌控多方的金牛,看壞市場的空方棕熊,小概率極端意外事件的黑天鵝,與眼睜睜看著大概率發生極端事件的灰犀牛。 《灰犀牛》一書作者Michele Wucker解釋,灰犀牛跟黑天鵝很像,都會產生劇烈的影響,但兩者相反之處在於,前者機率大、可預期,後者機率小、不可預期。
Thumbnail
因為想徹底除去房內小角落的溼氣,連兩夜打開、整理好久沒動過的舊書抽屜。 翻出其中一本書。書背貼上"160元X0.85"的價格標籤一張。正方型標籤紙已泛黃、從未被撕下來過,經年累月、順理成章地長成一塊黏著度滿滿的實體記憶--黏在書身、亦長駐我心...
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
Thumbnail
接受治療後,醫生和心理師就開始教我如何分辨自己的正常及創傷反應間的差異,以及辨識創傷觸發點。 說當能知道觸發點是什麼時,一部分是我在平時就能先減少接觸,降低些處在反應期的高壓狀態,一部份是醫事人員就能針對觸發點及對應的創傷慢慢進行一些脫敏處理
Thumbnail
前面文章有說明過訂閱資料庫的更新事件,讓前端畫面能夠收到更新資訊即時反應在用戶面前,那接下來要介紹Supabase的Webhooks則是能讓其他server端收到資料庫事件的通知。 這裡簡單說明一下Webhooks,一般來說是由前端主動呼叫後端API,取回資料,Webhooks則是由後端伺服器觸發某
Thumbnail
本篇文章又要介紹Supabase好用的實時更新功能,叫做Presence。Presence是 Supabase 提供的一項實時更新功能,讓開發者能夠輕鬆實現用戶之間的實 嗨歡迎閱讀我的文章!這是關於Supabase的系列文章,內容包含介紹Supabase是什麼、基本功能應用,深入了解Supa
Thumbnail
Supabase是使用PostgreSQL作為資料庫,所以當然也具有Storage的功能,能夠儲存用戶的圖片或是檔案,一樣可以設定讀取權限相當方便,一起瞭解如何操作。 從後台的大頁籤就可以進去Storage頁面,頁面和資料庫表格有點類似,如果有新增任何buckets就會顯示在All buckets的
Thumbnail
本篇文章主要介紹Supabase裡的Trigger的功能,詳細說明什麼是Trigger和使用時機,以及如何在後台瀏覽和設定Trigger,此外,文章中會提供一個常用的Trigger功能範例。 善用觸發器(Trigger)的話,能夠幫助開發者減少重複執行的工作,提高資料庫效能和安全性,可以說是一個強大
Thumbnail
這和股價位階、股市的行情發展與熱絡程度有關,股市過熱、籌碼凌亂、累積漲幅過大的情況下,不必是利空也會讓股價下跌,出現利空訊息只是一個觸發股價下跌的事件,在利空事件出現之前已經潛藏危機。
Thumbnail
【有些事不是不明白,而是還沒有到達那時間點的觸發,而這開關得由自己從人生經歷當中去尋找】 生命中有些事不是永遠不明白而時間點還沒到,也有些人是因為現實而被逼迫學著成長的。 還記得小時候總被大人們念著罵著,但自己就是不覺得哪裡有問題,甚至不認為是自己的錯,心中也許充滿著對周邊的人不諒解也聽不進去任何話
Thumbnail
阿里巴巴(NYSE:BABA)的業務涵蓋電子商務、金融科技、串流媒體、國際物流(如上圖)。在從歷史最高點經歷了一段慘烈而持續的下跌後,BABA的股價位階逐漸彰顯真實價值且兼具安全邊際。
Thumbnail
金融術語裡的四大神獸,包括掌控多方的金牛,看壞市場的空方棕熊,小概率極端意外事件的黑天鵝,與眼睜睜看著大概率發生極端事件的灰犀牛。 《灰犀牛》一書作者Michele Wucker解釋,灰犀牛跟黑天鵝很像,都會產生劇烈的影響,但兩者相反之處在於,前者機率大、可預期,後者機率小、不可預期。
Thumbnail
因為想徹底除去房內小角落的溼氣,連兩夜打開、整理好久沒動過的舊書抽屜。 翻出其中一本書。書背貼上"160元X0.85"的價格標籤一張。正方型標籤紙已泛黃、從未被撕下來過,經年累月、順理成章地長成一塊黏著度滿滿的實體記憶--黏在書身、亦長駐我心...