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

更新於 發佈於 閱讀時間約 6 分鐘
Supabase的函式功能介紹與實作 | Functions with Supabase 封面

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

這篇要介紹的是Supabase裡的Functions,我不知道有沒有官方的中文譯名,我都直接稱呼為函式或程式。

Functions就是和任何程式語言裡面所認識的函式一樣,只差在這個Functions是在PostgreSQL裡面執行,沒有聽錯是在資料庫裡面執行的函式,文章會介紹新增的方式和做一個範例。

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

資料庫裡的函式?

之前到現在的文章中,我們一直在使用的supabase,它們使用的資料庫是PostgreSQL,這個函式的功能其實是PostgreSQL提供的功能之一。

CREATE FUNCTION - PostgreSQL 正體中文使用手冊

函式的功能可以在我們需要對資料庫進行複雜操作時提供幫助,或者加速常用的SQL指令的執行速度。

這表示在前端和supabase之間進行資料統計時,無需將所有資料從表格中拉出來進行計算和處理,然後再重新放回資料庫。在函式的協助之下,可以直接在資料庫內完成這些操作,並返回我們所需的資料。

函式事前處理

功能設定

新增一個函式之前先設定這個函式要處理的事情,我想要讓函式幫我執行按讚的記數的功能,每個在前端畫面點擊按讚的按鈕,就在資料庫裡面likes的數字加一。

表格欄位新增

為了更清楚地展示這個函式的功能,我決定在現有的待辦事項表格中新增一個欄位,用來記錄按讚數(?)。當然,在現實應用中,這個功能可能適用在貼文之類的表格上。

todos裡面用來記錄按讚的欄位(?)

todos裡面用來記錄按讚的欄位(?)

直接點擊表格欄位最右邊的加號新增一個欄位,命名為likes,資料格式這裡就直接選int2,直接給個預設值0,按儲存以後就可以看到新增完成。

新增按讚數欄位完成

新增按讚數欄位完成

新增一個supabase函式

supabase裡要新增函式有兩種方式可以新增。

從面板新增

後台裡面Functions頁面

後台裡面Functions頁面

第一種方式是從專案後台Database的頁籤進入,選擇Functions,點擊右上角的按鈕新增一個函式。

新增函式面板

新增函式面板

在這個頁面可以按照每個位子填寫函式的各種設定,例如名稱,返回資料格式,還有定義函式主要執行的sql。

對於PostgreSQL資料庫語法不熟悉的人可以用這個面板快速上手,把基礎的sql指令寫在下面Definition的裡面就可以,不過小可惜的地方是撰寫指令的同時並不會提示拼字,建議先在別的地方把指令寫完再貼過來執行,或是參考從SQL Editor面板撰寫。

直接SQL Editor新增

新增函式的另一種方式就是從SQL Editor這裡直接全部下PostgreSQL資料庫的語法來新增函式,如果沒辦法從0開始直接寫出sql的話可以參考supabase官方的介紹。

完成函式

先提供完整內容後再講解。

create or replace function increselike (todo_id bigint)
returns void as $$
update todos
set likes = likes + 1
where id = todo_id
$$ language sql volatile;
  • create or replate: 是說明要新增或是取代一個現有的函式,這樣開頭比較適合重複修改函式,免得修改第二次執行sql的時候會說此函式名稱重複的問題。
  • increselike(todo_id bigint):是我的函式名稱,接受一個參數命名為todo_id,資料格式是bigint,對應我的表格裡面的id欄位。
  • returns void:說明我這個函式不會返回任何東西,在前端執行的時候不會收到返回值。
  • $$:這個符號以內的文字就是主要讓函式執行的sql,我會把表格todos裡面id正確的那筆資料拿出來,把likes欄位的值加一以後寫回去。
  • language sql volatile:指定語法的格式。

直接把這段sql複製貼上後按執行,下方沒有錯誤訊息的話就代表新增完成囉。

回到面板新增function的頁面就可以看到剛剛新增的函式,右邊的三個點按鈕可以隨時修改這段函式內容,也可以回到剛剛sql編輯頁面來繼續修改函式。

剛剛新增的函式

剛剛新增的函式

前端執行函式

延續之前的畫面,現在每一筆資料都有likes的欄位,把畫面空出一個位置來顯示likes的值。

新增一個位子顯示likes值

新增一個位子顯示likes值

新增一個按鈕來負責執行按讚的動作。

新增一個按鈕新增按讚數

新增一個按鈕新增按讚數

接著把執行函式的事件綁在這個按鈕上面。

supabase-js裡面,使用rpc來直接執行supabase函式。

  • 第一個參數:supabase函式名稱。
  • 第二個參數:函數需要帶入的值。
  • 第三個參數:一些附加的選項,需要的話可以參考官方文件。
const likeTodo = async (id) => {
loading.value = true
await supabase.rpc('increselike', {
todo_id: id
})
await getTodos()
loading.value = false
}

在新增這個函式的時候是沒有設定返回值的,所以在js裡面也沒有接收任何返回值,這段就是等待函式執行完畢後再重新撈一次資料刷新畫面。

按讚後數字刷新

按讚後數字刷新

實際在畫面中點擊測試,可以看到點擊完成以後數字自動加一,畫面也更新完成。

總結

在這篇文章中認識到supabase中的函式功能,函式這項功能能夠代替後端程式對資料庫做複雜的操作,更高效率提升用戶體驗,對於只有前端和supabase的應用程式來說格外重要。

有興趣的內容

avatar-img
6會員
23內容數
沙龍新手
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
技術叢林 的其他內容
在前面的文章中已經在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裡的每個專案都自帶一組開箱即用的會員系統和身份認證系統,只需要使用Supabase提供的SDK,不管是身份認證、登入、登出、會員管理,處理TOKEN等功能都包在裡面處理到好,相當實用。 嗨歡迎閱讀我的文章!這是關於Supabase的系列文章,內容包含介紹Supabase是什麼、基本功
在前面的文章中已經在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裡的每個專案都自帶一組開箱即用的會員系統和身份認證系統,只需要使用Supabase提供的SDK,不管是身份認證、登入、登出、會員管理,處理TOKEN等功能都包在裡面處理到好,相當實用。 嗨歡迎閱讀我的文章!這是關於Supabase的系列文章,內容包含介紹Supabase是什麼、基本功
你可能也想看
Google News 追蹤
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
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
今天來介紹python的函式 函式在python中是非常重要的一環,因為到了後期,程式會越來越複雜。 而函式可以想成是容易管理的小程式,當我們需要使用時,只需呼叫即可。
※ MySQL是什麼? MySQL是一種開源(免費)的關聯式資料庫管理系統,所以任何人都可以免費使用,是Web開發中最常用的資料庫之一。MySQL 會將資料儲存在由資料列與資料欄組成的資料表中。使用者可使用結構化查詢語言 (通常稱為 SQL) 來定義、操控、控管及查詢資料。  簡單來說,資料
Thumbnail
本文介紹了在 SQL Server 中 Store Procedure 的使用與執行,以及學習 Store Procedure 的心得與建議。
Thumbnail
本篇說明如何利用Kubernetes特色,將PostgreSQL DB以HA的架構來提供服務,並說明相關的實作流程與說明。
Thumbnail
今天來聊聊一個新手必學的兩個函式:SUMIF 跟 SUMIFS! 簡單來說,SUMIF 跟 SUMIFS 都是用條件來篩選值、再做加總的函式,你可以看成是 SUM 跟 IF / IFS 的結合。
Thumbnail
本篇主要是設計,當【沒有任何數值】與【原本就有數值】這兩種情況結合在一起時的 VBA 解決方案。分享內容包括張忍大師的函數解決方法。文章中包含影片檔案下載以及參考文獻連結。
Thumbnail
※ 基本操作:SQL 語法,SELECT, WHERE, CREATE, UPDATE, DELETE。 SELECT:從資料庫中或資料表中指定要選擇的欄位中取得資料,稱之為查詢 (query)。 ※ 語法:要由兩部分構成,第一部分是要 "拿什麼" 資料 (若有多項用逗號隔開);第二部分則為
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
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
今天來介紹python的函式 函式在python中是非常重要的一環,因為到了後期,程式會越來越複雜。 而函式可以想成是容易管理的小程式,當我們需要使用時,只需呼叫即可。
※ MySQL是什麼? MySQL是一種開源(免費)的關聯式資料庫管理系統,所以任何人都可以免費使用,是Web開發中最常用的資料庫之一。MySQL 會將資料儲存在由資料列與資料欄組成的資料表中。使用者可使用結構化查詢語言 (通常稱為 SQL) 來定義、操控、控管及查詢資料。  簡單來說,資料
Thumbnail
本文介紹了在 SQL Server 中 Store Procedure 的使用與執行,以及學習 Store Procedure 的心得與建議。
Thumbnail
本篇說明如何利用Kubernetes特色,將PostgreSQL DB以HA的架構來提供服務,並說明相關的實作流程與說明。
Thumbnail
今天來聊聊一個新手必學的兩個函式:SUMIF 跟 SUMIFS! 簡單來說,SUMIF 跟 SUMIFS 都是用條件來篩選值、再做加總的函式,你可以看成是 SUM 跟 IF / IFS 的結合。
Thumbnail
本篇主要是設計,當【沒有任何數值】與【原本就有數值】這兩種情況結合在一起時的 VBA 解決方案。分享內容包括張忍大師的函數解決方法。文章中包含影片檔案下載以及參考文獻連結。
Thumbnail
※ 基本操作:SQL 語法,SELECT, WHERE, CREATE, UPDATE, DELETE。 SELECT:從資料庫中或資料表中指定要選擇的欄位中取得資料,稱之為查詢 (query)。 ※ 語法:要由兩部分構成,第一部分是要 "拿什麼" 資料 (若有多項用逗號隔開);第二部分則為