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

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的應用程式來說格外重要。

有興趣的內容

6會員
23內容數
沙龍新手
留言0
查看全部
發表第一個留言支持創作者!
你可能也想看
爽脆的 ~ 韓式涼拌蓮藕最近蓮藕盛產,市場上常看到新鮮帶土的蓮藕,以前買蓮藕沒講究,都隨便選一根或一截,現在才發現挑選蓮藕也是一門學問,不同月份和不同部位的蓮藕,入菜的方式也不同。買蓮藕時和菜販聊聊天,常可以學到很多知識。 蓮藕季大約為每年的 5月初~10月底,5~6月蓮藕剛生長的時候,整支都很嫩,適合做涼拌或清炒,口感
Thumbnail
avatar
氣泡水
2023-08-10
火辣辣的韓式麻辣豆腐鍋🥘下雨天或者特別的日子(自己訂的) 就會特別來個熱情的韓式豆腐鍋料理 美味可口 邊吃邊流汗💦感覺很好😆 有時侯需要加油的支援 就會想到鍋🤣 無力時候 吃起來特別特別溫暖😊 這也是為自己充電的方式 每個人不一 樣 找到適合自己的方法 試試看吧 #7月的開始 大家加油喔!!!!!
Thumbnail
avatar
想飛的魚❤️
2023-07-02
2023/1/28 中壢韓舍韓式烤肉食記—很容易不小心吃到 陡然回「撐」的韓式燒烤 這次是第二次造訪韓舍,這真的是我目前最喜歡的韓式燒烤店。一直吃不覺得,只要站起來或稍微歇息,會陡然回「撐」的一間吃到飽燒肉店,大推。 年前可用google 訂位 韓舍韓式烤肉 一共有2間分店,一間在桃園一間在中壢,我去的是中壢店,坐車到中壢火車站走路五分鐘即可抵達。
Thumbnail
avatar
黑 青
2023-01-29
| The Stories of Our Kitchen|紅吱吱的韓式年糕雞正如這道紅吱吱的韓式年糕雞,甜得恰如其分,微辣得完全無害又治好了我想吃辣的癮頭。 紅吱吱只是這道年糕雞的外貌,歷經了時間與醬汁的翻炒及煨煮,我們都不一樣了!紅吱吱的年糕雞卻不會辣得嚇人,而人們身上留下的每一道疤痕,也都是他們好好活著的證據。
Thumbnail
avatar
Lily Chen
2022-12-07
又來飽吃一頓好料/我最愛的韓式"涓豆腐"可能因為韓式料理以各式各樣的豆腐鍋而著名,所以在台灣的兩大韓式餐廳取的名字都和豆腐有關?一間是豆腐村,一間就是我最愛吃的涓豆腐。
Thumbnail
avatar
宋雨桐Love Queen
2022-09-17
2022年小資族的韓式婚紗照首選│拍美照、免出國│台北婚紗│台北新秘│台北婚攝想要擁有一組唯美婚紗照,其實過程沒那麼複雜,來HelloHello 打招呼影像工作室,在舒適的禮服試衣間穿上美麗的婚紗,轉個彎開始妝髮造型,再往前走幾步進入韓風攝影棚,smile!韓式婚紗照拍好囉!
Thumbnail
avatar
HelloHello打招呼影像工作室
2022-05-17
《OMAYA春川炒雞》那些年被韓劇炒紅的韓式料理整理過往的照片,有於是相隔五年的照片,寫的是回憶也是紀念,猶記得當時《OMAYA春川炒雞》四處展店,愛評網中還拿到了兩次體驗劵,如今吃過的三間店面都已經易主,不知道現在還有哪裡有《OMAYA春川炒雞》,還是只能在記憶中回憶呢?
Thumbnail
avatar
布雷克
2021-05-31
[台北美食]擁有視頻高人氣韓國歐霸極力推薦的阿豬媽,韓國老闆親自調味醃醬肉的韓式烤肉,大口吃火鍋的雙重韓國美食極致饗宴 ​​不知道你對於韓國的料理​有甚麼樣的印象呢??豬媽一家來自正宗韓國當地的國民小吃大宗集合的阿豬媽(아줌마)韓式烤肉x火鍋吃到飽,這家店家在台灣是連鎖店。小編這次來到台北市萬華區西門店。此店家是韓國老闆親自調味醃醬肉的韓式烤肉,大口吃邊鍋的火鍋,雙重享受吃到飽的韓式料理極致饗宴。來此店家讓你
Thumbnail
avatar
bravejim
2020-08-09
想要迷人的韓式燙髮? 找pluus吧!想上台北髮廊其實多到數不清,但要找一間有品質加上有好設計的髮型師其實蠻不容易的,在與新的一位設計師做一些溝通上的交流,有時就能感覺出是否還會指定他做髮型設計了 !! 說到近年來流行的髮型,就是屬於韓系的莫屬,今天就讓pluus富有軟萌魅力的韓式髮根吧! 有時候受到韓劇以及女星的影響,但到她們的捲髮有
avatar
佳慧の美妝保養經驗談
2020-01-02
百力佳納-台北的韓式炸雞推我們一直認為百力佳納是台北最好的韓國炸雞——直到一位讀者推薦了Pelicana,一家在世界各地都有分店的韓國連鎖店。一開始我們很懷疑,因為他們在谷歌上的評分並不高,但出於好奇,我們在UberEats上試了一下。天啊,我們很高興我們做到了!親愛的讀者:非常感謝您的推薦,因為您永遠地改變了我們的生活。
Thumbnail
avatar
Hao Tu
2019-10-29