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)的話,能夠幫助開發者減少重複執行的工作,提高資料庫效能和安全性,可以說是一個強大而且實用的功能。

有興趣的內容

avatar-img
6會員
23內容數
沙龍新手
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
技術叢林 的其他內容
這篇要介紹的是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
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
※ 為什麼我們需要 Transaction? 當我們談到 Transaction(交易)時,指的是一組不可分割的 SQL 操作。這些操作結果只能成功或失敗,以確保資料庫的一致性和完整性。Transaction 是資料庫操作中的一個「邏輯單位」,包含多個操作步驟。如果其中任何一個步驟失敗,整個 Tr
Thumbnail
已經存在在table裡面的那些record做更新。 ※ 語法 UPDATE [LOW_PRIORITY] [IGNORE] table_name SET column_name1 = expr1, column_name2 = expr2, … [WHERE
Thumbnail
※ 把record加到table有兩種方式: VALUES • SELECT ※ 語法 INSERT INTO VALUES 語法: Record 代表一組值的集合,每個值對應到表格中的一個欄位(column)。 INSERT INTO 語法用來指定要插入資料的表格。 需要提供一個
Thumbnail
※ 為什麼需要 Subquery? 當⼀個任務需要多個 Query 完成任務,可以使⽤ Subquery 把多個 Query 合併成⼀個 Query。 當我們在進行SQL查詢時,每次查詢都需要在Web Server和資料庫之間來回傳遞資料。這個過程會產生網路延遲,特別是當兩者之間的物理距離較遠時
Thumbnail
※ 關聯式資料庫(RDBMS)是什麼? 關聯式資料庫(RDBMS)是一種傳統的資料庫系統,以結構化查詢語言(SQL)為基礎,將資料儲存於預定義的表格中。這些表格包括行和列,彼此之間存在明確的關聯性。 ※ 關聯式資料庫(RDBMS)有兩個重要元素: 關聯(Relational): 關聯式資料庫
Thumbnail
  在上篇我們介紹了 SageMaker 中 Pipeline 的使用方法,其中的 TuningStep 功能,能夠讓我們能夠指定一連串參數組合進行實驗比對,最終找出最適合的參數組合
Teradata SQL Assistant調整選項Submit only the selected query text, when highlighted
Thumbnail
在POWER QUERY從0到1 #9 樞紐資料行的功能是將長資料轉換成寬資料,使數據可以快速分析。 而所謂的取消資料行樞紐,就是把寬資料轉換成長資料的一個過程,也就是資料的正規化。 如下圖所示,左邊的圖為二維結構,屬於寬資料,每列可能包含多筆數據(1.2.3月),右邊的圖屬於長資料,每列都
Thumbnail
※ 基本操作:SQL 語法,SELECT, WHERE, CREATE, UPDATE, DELETE。 SELECT:從資料庫中或資料表中指定要選擇的欄位中取得資料,稱之為查詢 (query)。 ※ 語法:要由兩部分構成,第一部分是要 "拿什麼" 資料 (若有多項用逗號隔開);第二部分則為
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
※ 為什麼我們需要 Transaction? 當我們談到 Transaction(交易)時,指的是一組不可分割的 SQL 操作。這些操作結果只能成功或失敗,以確保資料庫的一致性和完整性。Transaction 是資料庫操作中的一個「邏輯單位」,包含多個操作步驟。如果其中任何一個步驟失敗,整個 Tr
Thumbnail
已經存在在table裡面的那些record做更新。 ※ 語法 UPDATE [LOW_PRIORITY] [IGNORE] table_name SET column_name1 = expr1, column_name2 = expr2, … [WHERE
Thumbnail
※ 把record加到table有兩種方式: VALUES • SELECT ※ 語法 INSERT INTO VALUES 語法: Record 代表一組值的集合,每個值對應到表格中的一個欄位(column)。 INSERT INTO 語法用來指定要插入資料的表格。 需要提供一個
Thumbnail
※ 為什麼需要 Subquery? 當⼀個任務需要多個 Query 完成任務,可以使⽤ Subquery 把多個 Query 合併成⼀個 Query。 當我們在進行SQL查詢時,每次查詢都需要在Web Server和資料庫之間來回傳遞資料。這個過程會產生網路延遲,特別是當兩者之間的物理距離較遠時
Thumbnail
※ 關聯式資料庫(RDBMS)是什麼? 關聯式資料庫(RDBMS)是一種傳統的資料庫系統,以結構化查詢語言(SQL)為基礎,將資料儲存於預定義的表格中。這些表格包括行和列,彼此之間存在明確的關聯性。 ※ 關聯式資料庫(RDBMS)有兩個重要元素: 關聯(Relational): 關聯式資料庫
Thumbnail
  在上篇我們介紹了 SageMaker 中 Pipeline 的使用方法,其中的 TuningStep 功能,能夠讓我們能夠指定一連串參數組合進行實驗比對,最終找出最適合的參數組合
Teradata SQL Assistant調整選項Submit only the selected query text, when highlighted
Thumbnail
在POWER QUERY從0到1 #9 樞紐資料行的功能是將長資料轉換成寬資料,使數據可以快速分析。 而所謂的取消資料行樞紐,就是把寬資料轉換成長資料的一個過程,也就是資料的正規化。 如下圖所示,左邊的圖為二維結構,屬於寬資料,每列可能包含多筆數據(1.2.3月),右邊的圖屬於長資料,每列都
Thumbnail
※ 基本操作:SQL 語法,SELECT, WHERE, CREATE, UPDATE, DELETE。 SELECT:從資料庫中或資料表中指定要選擇的欄位中取得資料,稱之為查詢 (query)。 ※ 語法:要由兩部分構成,第一部分是要 "拿什麼" 資料 (若有多項用逗號隔開);第二部分則為