๐Ÿ  | ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ์„ ์œ„ํ•œ Supabase Trigger ์„ค์ •

NewHaยท2024๋…„ 12์›” 30์ผ
post-thumbnail

ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ updated_at ํ•„๋“œ๋ฅผ ๊ฐฑ์‹ ํ•˜๋Š” ์ž‘์—…์„ ์ˆ˜๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋˜ ์ค‘, ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์—๋Ÿฌ๋กœ ์ธํ•ด ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ๊ธฐ๋ก์ด ์ •ํ™•ํžˆ ๋ฐ˜์˜๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ๋ฅผ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ์ž‘์—…์—์„œ ๋ฌด๊ฒฐ์„ฑ๊ณผ ์ผ๊ด€์„ฑ์„ ๋ณด์žฅํ•˜์ง€ ๋ชปํ•˜๋Š” ์น˜๋ช…์ ์ธ ์•ฝ์ ์œผ๋กœ ์ž‘์šฉํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ˆ˜์ค€์—์„œ ๋ณ€๊ฒฝ ์ž‘์—…๊ณผ ์ˆ˜์ • ๊ธฐ๋ก์„ ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์•ˆ์„ ๋ชจ์ƒ‰ํ–ˆ๊ณ , PostgreSQL ๊ธฐ๋ฐ˜์˜ Supabase์—์„œ ์ œ๊ณตํ•˜๋Š” ํŠธ๋ฆฌ๊ฑฐ(Trigger) ๊ธฐ๋Šฅ์„ ๋„์ž…ํ–ˆ์Šต๋‹ˆ๋‹ค. ํŠธ๋ฆฌ๊ฑฐ๋Š” ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ์ด๋ฒคํŠธ์™€ ๊ฒฐํ•ฉ๋˜์–ด ํ•„์š”ํ•œ ๋กœ์ง์„ ์ž๋™์œผ๋กœ ์‹คํ–‰ํ•จ์œผ๋กœ์จ, ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ์„ ๋ณด์žฅํ•˜๊ณ  ๊ฐœ๋ฐœ์ž์˜ ์ถ”๊ฐ€์ ์ธ ๊ด€๋ฆฌ ๋ถ€๋‹ด์„ ์ตœ์†Œํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.

Supabase Trigger

Trigger

PostgreSQL์˜ ํŠธ๋ฆฌ๊ฑฐ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ”์—์„œ ํ–‰์ด ์‚ฝ์ž…(INSERT), ์ˆ˜์ •(UPDATE), ์‚ญ์ œ(DELETE)๋˜๋Š” ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ, ์ž๋™์œผ๋กœ ์ง€์ •๋œ ๋กœ์ง์„ ์‹คํ–‰ํ•˜๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๋Š” ์‚ฌ์šฉ์ž ์ •์˜ ํŠธ๋ฆฌ๊ฑฐ ํ•จ์ˆ˜๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ด๋ฅผ ํŠธ๋ฆฌ๊ฑฐ์™€ ์—ฐ๊ฒฐํ•˜์—ฌ, ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ์„ ๋ณด์žฅํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž‘์—…์„ ์ž๋™ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŠธ๋ฆฌ๊ฑฐ๋Š” ์ง€์ •๋œ ์ด๋ฒคํŠธ์™€ ๋™์ผํ•œ ํŠธ๋žœ์žญ์…˜(transaction) ๋‚ด์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ํŠธ๋ฆฌ๊ฑฐ๊ฐ€ ์‹คํŒจํ•˜๋ฉด ์ „์ฒด ํŠธ๋žœ์žญ์…˜์ด ๋กค๋ฐฑ(rollback)๋˜๋ฉฐ, ๋ฐ˜๋Œ€๋กœ ํŠธ๋ฆฌ๊ฑฐ์™€ ์ž‘์—…์ด ๋ชจ๋‘ ์„ฑ๊ณตํ•ด์•ผ๋งŒ ํŠธ๋žœ์žญ์…˜์ด ์ปค๋ฐ‹(commit)๋ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋™์ž‘์€ ๋ฐ์ดํ„ฐ์˜ ์ •ํ™•์„ฑ๊ณผ ์•ˆ์ •์„ฑ์„ ๋ณด์žฅํ•˜๋Š” ๋ฐ ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“

ํŠธ๋žœ์žญ์…˜(transaction)

  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ํ•˜๋‚˜์˜ ์ž‘์—… ๋‹จ์œ„๋กœ ๊ฐ„์ฃผ๋˜๋Š” ์—ฐ์‚ฐ๋“ค์˜ ์ง‘ํ•ฉ์ž…๋‹ˆ๋‹ค.
  • ํŠธ๋žœ์žญ์…˜์€ ๋ชจ๋‘ ์„ฑ๊ณต์ ์œผ๋กœ ์‹คํ–‰(commit)๋˜๊ฑฐ๋‚˜, ํ•˜๋‚˜๋ผ๋„ ์‹คํŒจํ•˜๋ฉด ์ „์ฒด๊ฐ€ ์ทจ์†Œ(rollback)๋ฉ๋‹ˆ๋‹ค.

Trigger SQL ๊ตฌ๋ฌธ

ํŠธ๋ฆฌ๊ฑฐ๋Š” ํŠธ๋ฆฌ๊ฑฐ ํ•จ์ˆ˜์™€ ์ด๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ํŠธ๋ฆฌ๊ฑฐ ์„ค์ •์œผ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ํŠธ๋ฆฌ๊ฑฐ ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•œ ํ›„, ํŠธ๋ฆฌ๊ฑฐ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ํŠน์ • ์ด๋ฒคํŠธ ๋ฐœ์ƒ ์‹œ ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋˜๋„๋ก ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ํŠธ๋ฆฌ๊ฑฐ ํ•จ์ˆ˜(Trigger Function)
    ํŠธ๋ฆฌ๊ฑฐ ํ•จ์ˆ˜๋Š” PostgreSQL์˜ CREATE FUNCTION ๋ฌธ์œผ๋กœ ์ž‘์„ฑ๋ฉ๋‹ˆ๋‹ค. ํ•จ์ˆ˜ ๋ณธ๋ฌธ์€ $$ ๊ธฐํ˜ธ๋กœ ๋ฌถ์ธ ๋ฌธ์ž์—ด๋กœ ์ •์˜๋˜๋ฉฐ, ํŠธ๋ฆฌ๊ฑฐ์™€ ์—ฐ๊ฒฐ๋˜์–ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž‘์—… ์‹œ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.
-- ํ•จ์ˆ˜ ์ด๋ฆ„์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
CREATE FUNCTION {function_name}

-- ํ•จ์ˆ˜๊ฐ€ ํŠธ๋ฆฌ๊ฑฐ์šฉ ํ•จ์ˆ˜์ž„์„ ๋ช…์‹œํ•ฉ๋‹ˆ๋‹ค.
-- '$$'๋Š” (์ž‘์€๋”ฐ์˜ดํ‘œ ๋Œ€์‹ ) ์—ฌ๋Ÿฌ ์ค„๋กœ ๊ตฌ์„ฑ๋œ ์ฝ”๋“œ๋ฅผ ๋ฌธ์ž์—ด๋กœ ์ „๋‹ฌํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
RETURNS TRIGGER AS $$
BEGIN
    -- 'NEW'๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์‚ฝ์ž… ๋˜๋Š” ์ˆ˜์ •๋  ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
    NEW.{table_columns} = {value};
    
    -- ํŠธ๋ฆฌ๊ฑฐ ํ•จ์ˆ˜๋Š” ๋ฐ˜๋“œ์‹œ ๋ฐ์ดํ„ฐ ํ–‰์„ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    -- NEW๋Š” ์ˆ˜์ •๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ , OLD๋Š” ์ˆ˜์ • ์ „ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
    RETURN {NEW | OLD};
END;
-- ํŠธ๋ฆฌ๊ฑฐ ํ•จ์ˆ˜์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์–ธ์–ด๋ฅผ ์ง€์ •ํ•œ ๊ฒƒ์œผ๋กœ, PostgreSQL์˜ ํ”„๋กœ์‹œ์ € ์–ธ์–ด๋ฅผ ๋Œ€๊ฐœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
$$ LANGUAGE plpgsql;
  1. ํŠธ๋ฆฌ๊ฑฐ ์„ค์ •(Trigger)
    ํŠธ๋ฆฌ๊ฑฐ๋Š” CREATE TRIGGER ๋ฌธ์„ ํ†ตํ•ด ์ƒ์„ฑ๋˜๋ฉฐ, ํŠน์ • ์ด๋ฒคํŠธ ๋ฐœ์ƒ ์‹œ ์‹คํ–‰๋  ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.
-- CREATE TRIGGER๋ฅผ ํ†ตํ•ด ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
CREATE TRIGGER {trigger_name} 

-- ์‹คํ–‰ ์œ ํ˜•์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
-- AFTER๋Š” ํŠธ๋ฆฌ๊ฑฐ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋œ ์ดํ›„์— ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
-- BEFORE๋Š” ํŠธ๋ฆฌ๊ฑฐ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜๊ธฐ ์ด์ „์— ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
{AFTER|BEFORE} {INSERT|UPDATE|DELETE} ON {table_name} 

-- ์‹คํ–‰๋นˆ๋„๋ฅผ ์ •ํ•˜๋Š” ์˜ต์…˜์ž…๋‹ˆ๋‹ค. 
-- row๋ผ๋ฉด ๊ฐ ํ–‰์— ํ•œ ๋ฒˆ์”ฉ ์‹คํ–‰๋˜์–ด์•ผ ํ•˜๊ณ , 
-- statement๋Š” ์ „์ฒด ์‚ฝ์ž… ์‹œ ํ•œ ๋ฒˆ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
FOR EACH {ROW|STATEMENT} 

-- ํ˜ธ์ถœํ•  ๋™์ž‘ ํ•จ์ˆ˜๋ฅผ ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค.
EXECUTE FUNTION {trigger_function()}

Trigger ์„ค์ •์‹œ ์ฃผ์˜์‚ฌํ•ญ

  • ํŠธ๋ฆฌ๊ฑฐ๋Š” ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ์ด๋ฒคํŠธ๋งˆ๋‹ค ์‹คํ–‰๋˜๋ฏ€๋กœ, ํŠธ๋ฆฌ๊ฑฐ ๋กœ์ง์— ๊ณผ๋„ํ•œ ๊ณ„์‚ฐ์ด๋‚˜ ๋ณต์žกํ•œ ์—ฐ์‚ฐ์ด ํฌํ•จ๋  ๊ฒฝ์šฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋กœ์ง์€ ์ตœ์†Œํ•œ์˜ ์—ฐ์‚ฐ์œผ๋กœ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ํŠธ๋ฆฌ๊ฑฐ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋‚ด๋ถ€์—์„œ ๋น„๋™๊ธฐ์ ์œผ๋กœ ์‹คํ–‰๋˜์ง€ ์•Š๊ณ , ํŠธ๋žœ์žญ์…˜ ๋‚ด์—์„œ ์ฆ‰์‹œ ์‹คํ–‰๋˜๋ฏ€๋กœ, ์‹คํŒจ ์‹œ ์ „์ฒด ํŠธ๋žœ์žญ์…˜์ด ๋กค๋ฐฑ๋ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํŠน์„ฑ์œผ๋กœ ์ธํ•ด ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ๋™์ž‘์ด๋‚˜ ์˜ค๋ฅ˜๋ฅผ ๋””๋ฒ„๊น…ํ•˜๊ธฐ๊ฐ€ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

  • ํŠธ๋ฆฌ๊ฑฐ๋Š” ํ…Œ์ด๋ธ” ์ˆ˜์ค€์—์„œ ์„ค์ •๋˜๋ฏ€๋กœ, ์˜๋„ํ•˜์ง€ ์•Š์€ ๋ถ€์ž‘์šฉ(์˜ˆ: ๋ฌดํ•œ ๋ฃจํ”„ ํŠธ๋ฆฌ๊ฑฐ ํ˜ธ์ถœ)์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๋„๋ก ์„ค๊ณ„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํŠธ๋ฆฌ๊ฑฐ ์‹คํ–‰ ์กฐ๊ฑด๊ณผ ์ ์šฉ ๋ฒ”์œ„๋ฅผ ๋ช…ํ™•ํžˆ ์ •์˜ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

  • ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ์ด ์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” ํ…Œ์ด๋ธ”์— ํŠธ๋ฆฌ๊ฑฐ๋ฅผ ์„ค์ •ํ•  ๊ฒฝ์šฐ, ์ด๋ฒคํŠธ ๋นˆ๋„์™€ ํŠธ๋ฆฌ๊ฑฐ ์‹คํ–‰ ์‹œ๊ฐ„์ด ์ฟผ๋ฆฌ ์‘๋‹ต ์†๋„์— ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์ตœ์†Œํ™”ํ•˜๊ธฐ ์œ„ํ•ด ํŠธ๋ฆฌ๊ฑฐ ๋กœ์ง์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž‘์—…(์˜ˆ: UPDATE, INSERT) ์™ธ๋ถ€์—์„œ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์—ฐ์‚ฐ์„ ๋ฐฐ์ œํ•˜๊ณ , ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋‚ด์—์„œ๋งŒ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅํ•œ ์ž‘์—…์— ์ง‘์ค‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


updated_at trigger SQL (ํ”„๋กœ์ ํŠธ ์‚ฌ์šฉ๋ก€)

์œ„ ๊ตฌ๋ฌธ ๋ฐฉ์‹์— ๋”ฐ๋ผ updated_at์„ ์ž๋™์œผ๋กœ ์—…๋ฐ์ดํŠธ ํ•˜๋Š” ํŠธ๋ฆฌ๊ฑฐ ํ•จ์ˆ˜ ๋ฐ ํŠธ๋ฆฌ๊ฑฐ๋ฅผ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ Supabase Dashboard > SQL Editor ์—์„œ ์‹คํ–‰ํ•˜์—ฌ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

# trigger function
CREATE OR REPLACE FUNCTION update_timestamp()
RETURNS TRIGGER AS $$
BEGIN
    NEW.updated_at = NOW();
    RETURN NEW;
END;
$$ LANGUAGE plpgsql;

# trigger
CREATE TRIGGER update_house_trigger
BEFORE INSERT OR UPDATE ON house
FOR EACH ROW
EXECUTE FUNCTION update_timestamp();

CREATE TRIGGER update_profile_trigger
BEFORE INSERT OR UPDATE ON user_profile
FOR EACH ROW
EXECUTE FUNCTION update_timestamp();

trigger function description

  • CREATE OR REPLACE: ํ•จ์ˆ˜๊ฐ€ ์ด๋ฏธ ์กด์žฌํ•˜๋ฉด ๋ฎ์–ด์“ฐ๊ณ , ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด ์ƒˆ๋กœ ์ƒ์„ฑํ•˜๋Š” ๋ช…๋ น์–ด์ž…๋‹ˆ๋‹ค.
  • RETURNS TRIGGER : ์ด ํ•จ์ˆ˜๋Š” ํŠธ๋ฆฌ๊ฑฐ ํ•จ์ˆ˜์ž„์„ ์•Œ๋ ค์ค๋‹ˆ๋‹ค. ์ฆ‰, ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ ์ž๋™์œผ๋กœ ํ˜ธ์ถœ๋  ํ•จ์ˆ˜์ž„์„ ์•Œ๋ ค์ค๋‹ˆ๋‹ค.
  • AS $$ ... $$ : ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•˜๋Š” ๊ตฌ๊ฐ„์œผ๋กœ $$ ๋Š” ํ•จ์ˆ˜ ๋ณธ๋ฌธ์„ ๋‘˜๋Ÿฌ์‹ธ๋Š” ๊ตฌ๋ถ„์ž์ž…๋‹ˆ๋‹ค.(์ผ์ข…์˜ ' '(๋”ฐ์˜ดํ‘œ)์™€ ๊ฐ™์€ ๊ฒ๋‹ˆ๋‹ค. ' '๋กœ๋„ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ ๋”ฐ์˜ดํ‘œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ \๋ฅผ ๋ถ™์—ฌ์„œ ์‚ฌ์šฉํ•˜๋Š” ๋“ฑ ๋ถˆํŽธํ•จ์ด ๋งŽ์•„ $$๋กœ ๊ฐ์‹ธ์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ž…๋‹ˆ๋‹ค.)
  • BEGIN ... END : ํ•จ์ˆ˜ ์‹คํ–‰ ๊ตฌ๊ฐ„ ์‹œ์ž‘๊ณผ ๋์„ ์•Œ๋ ค์ค๋‹ˆ๋‹ค. ํ•จ์ˆ˜ ๋ณธ๋ฌธ์€ ์‚ฌ์ด์— ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • NEW : ํŠธ๋ฆฌ๊ฑฐ๊ฐ€ ๋™์ž‘ํ•˜๋Š” ๋™์•ˆ ์ƒ์„ฑใƒป์ˆ˜์ •๋˜๋Š” ๋ฐ์ดํ„ฐ์˜ ์ƒˆ ๊ฐ’์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์ฆ‰, ํ•ด๋‹น ํ–‰(column)์˜ ์ƒˆ ๋ฐ์ดํ„ฐ๋ฅผ ์ฐธ์กฐํ•ฉ๋‹ˆ๋‹ค.
    • NEW.updated_at ์€ ์ƒˆ๋กœ ์ƒ์„ฑ๋˜๊ฑฐ๋‚˜ ์ˆ˜์ •๋˜๋Š” ๋ฐ์ดํ„ฐ ํ–‰์˜ updated_at ์—ด์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
    • NOW() : ํ˜„์žฌ ๋‚ ์งœ์™€ ์‹œ๊ฐ„์„ ๋ฐ˜ํ™˜ํ•˜๋Š” supabase postgreSQL์˜ ๋‚ด์žฅ ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.
  • RETURN NEW : ํŠธ๋ฆฌ๊ฑฐ ํ•จ์ˆ˜๋Š” ํ•ญ์ƒ ์ƒ์„ฑใƒป์ˆ˜์ •๋˜๋Š” ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ ํ–‰์„ ๋ฐ˜ํ™˜ ๊ฐ’์œผ๋กœ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฐ˜ํ™˜๋˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.

trigger function with supabase dashboard

SQL๋กœ ์ž‘์„ฑํ•˜์ง€ ์•Š๊ณ  supabase dashboard๋ฅผ ํ†ตํ•ด์„œ๋„ ์œ„์™€ ๋˜‘๊ฐ™์€ ํŠธ๋ฆฌ๊ฑฐ ํ•จ์ˆ˜๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋Œ€์‰ฌ๋ณด๋“œ์—์„œ Database > functions > Create a new function ์„ ํ†ตํ•ด ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜ํƒ€๋‚œ ์‚ฌ์ด๋“œ ๋ฐ”์— ํ•จ์ˆ˜ ๋ช…๊ณผ, ํŠธ๋ฆฌ๊ฑฐ๋ฅผ ์„ค์ •ํ•˜๊ณ , ํ•จ์ˆ˜ ๋‚ด์šฉ์„ ์ž‘์„ฑํ•˜๋ฉด ๋์ž…๋‹ˆ๋‹ค.

trigger with supabase dashboard

ํŠธ๋ฆฌ๊ฑฐ ์„ค์ • ๋˜ํ•œ supabase dash board๋ฅผ ์‚ฌ์šฉํ•ด์„œ๋„ ์‰ฝ๊ฒŒ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋Œ€์‰ฌ๋ณด๋“œ์—์„œ Database > triggers > Create a new trigger ๋ฅผ ํ†ตํ•ด ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜ํƒ€๋‚œ ์‚ฌ์ด๋“œ ๋ฐ”์— ํŠธ๋ฆฌ๊ฑฐ ๋ช…๊ณผ, ์ ์šฉํ•  ํ…Œ์ด๋ธ”, ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ์ด๋ฒคํŠธ์™€ ์‹คํ–‰ ์‹œ๊ธฐ ๋“ฑ์˜ ์˜ต์…˜์„ ์„ ํƒํ•˜๊ณ  ๋งŒ๋“  ํŠธ๋ฆฌ๊ฑฐ ํ•จ์ˆ˜๋ฅผ ์—ฐ๊ฒฐํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.


๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ’ป ส€แด‡๊œฑแดœสŸแด›๊œฑ

์ด๋ ‡๊ฒŒ ์ˆ˜๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋˜ updated_at ํ•„๋“œ ๊ฐฑ์‹  ๋กœ์ง์„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํŠธ๋ฆฌ๊ฑฐ๋กœ ๋Œ€์ฒดํ•˜์—ฌ, ๋ฐ์ดํ„ฐ ์ˆ˜์ • ์‹œ updated_at์ด ์ž๋™์œผ๋กœ ๊ฐฑ์‹ ๋˜๋„๋ก ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด์ œ๋Š” update ํ•จ์ˆ˜๋ฅผ ๋ถˆ๋Ÿฌ์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋„˜๊ธธ ๋•Œ, new Date()๋กœ ๋ถˆ๋Ÿฌ์˜จ ํ˜„์žฌ ์‹œ๊ฐ์„ ์ •์ œํ•ด์„œ ๋„˜๊ธธ ํ•„์š”๊ฐ€ ์—†์–ด์กŒ์Šต๋‹ˆ๋‹ค. supabase์—์„œ ์ž๋™์œผ๋กœ ์—…๋ฐ์ดํŠธ ๋˜๋Š” ์‹œ๊ฐ„์˜ ํƒ€์ž„์Šคํƒญํ”„๋ฅผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ๊ธฐ๋ก์˜ ์ •ํ™•์„ฑ์„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ˆ˜์ค€์—์„œ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์œผ๋ฉฐ, ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ์—์„œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐฑ์‹  ๋กœ์ง์˜ ๋ˆ„๋ฝ์ด๋‚˜ ์‹ค์ˆ˜๋ฅผ ์›์ฒœ์ ์œผ๋กœ ๋ฐฉ์ง€ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์ง์ ‘ updated_at ๊ฐฑ์‹ ์„ ์ฒ˜๋ฆฌํ•จ์œผ๋กœ์จ ์„œ๋ฒ„-ํด๋ผ์ด์–ธํŠธ ๊ฐ„์˜ ๋ถˆํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ ๋ฐ ์ฝ”๋“œ ์ค‘๋ณต์„ ์ œ๊ฑฐํ•˜์—ฌ ์ „๋ฐ˜์ ์ธ ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ๊ฐ„๊ฒฐํ•˜๊ณ  ์œ ์ง€๋ณด์ˆ˜ํ•˜๊ธฐ ์‰ฝ๊ฒŒ ๊ฐœ์„ ํ–ˆ์Šต๋‹ˆ๋‹ค.


profile
๋ฐฑ ๋ฒˆ์„ ๋ณด๋ฉด ํ•œ ๊ฐ€์ง€๋Š” ์•ˆ๋‹ค ๐Ÿ‘€

0๊ฐœ์˜ ๋Œ“๊ธ€