SQL - PostgreSQL - SET search_path = ''๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ?

2026. 7. 13. 10:27ยท๐Ÿงฉ SQL

PostgreSQL

 

 

โœ… SET search_path = ''๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ?


CREATE FUNCTION public.notify_follow()
RETURNS TRIGGER
SECURITY DEFINER SET search_path = ''
LANGUAGE plpgsql
AS $$
BEGIN
    INSERT INTO public.notifications (type, source_id, target_id)
    VALUES ('follow', NEW.follower_id, NEW.following_id);
    RETURN NEW;
END;
$$;

CREATE TRIGGER notify_follow_trigger
AFTER INSERT ON public.follows
FOR EACH ROW
EXECUTE FUNCTION public.notify_follow();

์šฐ์„  SECURITY DEFINER๋ฅผ ์ž‘์„ฑํ•œ ์ด์œ ๋Š” ๋ญ˜๊นŒ?

INSERT INTO notifications ๊ถŒํ•œ์„ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ฃผ๊ณ  ์‹ถ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์‚ฌ์šฉ์ž๊ฐ€ ๊ฐ€์งœ notifications์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

ํ•˜์ง€๋งŒ Trigger๊ฐ€ ์ƒ์„ฑํ•˜๋Š” notifications๋Š” ํ—ˆ์šฉํ•˜๊ณ  ์‹ถ๋‹ค.

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— SECURITY DEFINER๋ฅผ ์‚ฌ์šฉํ•ด์„œ

Trigger ํ•จ์ˆ˜ ์•ˆ์—์„œ๋งŒ Owner ๊ถŒํ•œ์œผ๋กœ notifications์— INSERT ํ•˜๋„๋ก ๋งŒ๋“  ๊ฒƒ์ด๋‹ค.

 

๊ทธ๋ ‡๋‹ค๋ฉด SET search_path = ''์€ ์™œ ํ•„์š”ํ•œ๊ฑธ๊นŒ?

SECURITY DEFINER๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ณด์•ˆ ์ทจ์•ฝ์ ์ด ์ƒ๊ธธ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ๊ทธ ์ทจ์•ฝ์ ์„ ๋ง‰๊ธฐ ์œ„ํ•ด SET search_path = ''๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

์ด๊ฒŒ ๋ฌด์Šจ ๋ง์ด๋ƒ๋ฉด

CREATE FUNCTION track_event(...)
LANGUAGE plpgsql;

๋งŒ์•ฝ ์ด๋Ÿฐ FUNCTION์ด ์žˆ์„ ๋•Œ ์ด FUNCTION์€ ๊ธฐ๋ณธ์ ์œผ๋กœ SECURITY๊ฐ€ INVOKER๋‹ค.

์‚ฌ์šฉ์ž ๊ถŒํ•œ์œผ๋กœ ์‹คํ–‰๋œ๋‹ค๋Š” ๋œป์ด๋‹ค.

 

๊ทธ๋ž˜์„œ

INSERT INTO events ...

๊ฐ€ ์ž˜๋ชป๋œ ํ…Œ์ด๋ธ”์„ ์ฐธ์กฐํ•˜๋”๋ผ๋„

ํ”ผํ•ด๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์›๋ž˜ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ถŒํ•œ ๋ฒ”์œ„ ์•ˆ์—์„œ๋งŒ ๋ฐœ์ƒํ•œ๋‹ค.

์ฆ‰ ํฐ ๋ณด์•ˆ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€๋Š” ์•Š๋Š”๋‹ค.

 

ํ•˜์ง€๋งŒ

CREATE FUNCTION ...
SECURITY DEFINER

๊ฐ€ ๋˜๋ฉด Owner(postgres)๊ถŒํ•œ์œผ๋กœ ์‹คํ–‰๋œ๋‹ค.

 

์ด ์ƒํƒœ์—์„œ

UPDATE posts

์ฒ˜๋Ÿผ schema๋ฅผ ์ƒ๋žตํ•˜๋ฉด

PostgreSQL์€ search_path๋ฅผ ๋”ฐ๋ผ๊ฐ€๋ฉด์„œ posts๋ฅผ ์ฐพ๊ฒŒ ๋œ๋‹ค.

 

๋งŒ์•ฝ ์•…์˜์ ์œผ๋กœ ๋‹ค๋ฅธ schema์— posts๋‚˜ some_function() ๋งŒ๋“ค์–ด ๋†“๊ณ 

search_path๋ฅผ ์ด์šฉํ•˜๋„๋ก ์œ ๋„ํ•˜๋ฉด

Owner ๊ถŒํ•œ์œผ๋กœ ๊ทธ ๊ฐ์ฒด๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ณด์•ˆ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๊ทธ๋ž˜์„œ

SECURITY DEFINER
SET search_path = ''

์ด ๋‘ ๊ฐœ๋ฅผ ๊ฐ™์ด ์‚ฌ์šฉํ•œ๋‹ค.

๊ทธ๋Ÿฌ๋ฉด ์ž๋™์œผ๋กœ schema๋ฅผ ์ฐพ์ง€ ์•Š๋Š”๋‹ค.

 

์ฆ‰

UPDATE posts

๋Š” ์‹คํŒจํ•˜๊ณ 

 

๋ฐ˜๋“œ์‹œ

UPDATE public.posts

์ฒ˜๋Ÿผ schema๋ฅผ ๋ช…์‹œํ•ด์•ผ ํ•œ๋‹ค.

 

โœ… ๊ฒฐ๋ก 


SECURITY DEFINER
        ↓
Owner ๊ถŒํ•œ์œผ๋กœ ์‹คํ–‰
        ↓
search_path ์•…์šฉ ๊ฐ€๋Šฅ์„ฑ ๋ฐœ์ƒ
        ↓
SET search_path = ''๋กœ ๋ฐฉ์ง€

 

'๐Ÿงฉ SQL' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

SQL - PostgreSQL - RLS(Row Level Security)  (0) 2026.07.15
SQL - PostgreSQL - CREATE OR REPLACE๊ฐ€ ๊ฐ€๋Šฅํ•  ๋•Œ์™€ ๋ถˆ๊ฐ€๋Šฅํ•  ๋•Œ  (0) 2026.07.13
SQL - PostgreSQL - RETURNS TRIGGER๋Š” Trigger๋ฅผ returnํ•œ๋‹ค๋Š” ๋œป์ผ๊นŒ?  (0) 2026.07.13
SQL - Drizzle Self Reference  (0) 2026.05.26
SQL - Supabase & Drizzle  (0) 2026.05.22
'๐Ÿงฉ SQL' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • SQL - PostgreSQL - RLS(Row Level Security)
  • SQL - PostgreSQL - CREATE OR REPLACE๊ฐ€ ๊ฐ€๋Šฅํ•  ๋•Œ์™€ ๋ถˆ๊ฐ€๋Šฅํ•  ๋•Œ
  • SQL - PostgreSQL - RETURNS TRIGGER๋Š” Trigger๋ฅผ returnํ•œ๋‹ค๋Š” ๋œป์ผ๊นŒ?
  • SQL - Drizzle Self Reference
j2yonghwa
j2yonghwa
Trying to be a fullstack developer ๐Ÿš€
  • j2yonghwa
    j2yonghwa
    j2yonghwa
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (179)
      • โฐ Daily WakaTime (1)
      • ๐Ÿ–๏ธ ๋…ธ๋งˆ๋“œ์ฝ”๋” (2)
      • ๐Ÿบ Dev Setup (4)
      • ๐Ÿ”ญ Tech Info (1)
      • ๐Ÿ” Security (1)
      • ๐Ÿšซ Error (1)
      • ๐Ÿค– AI (4)
      • ๐Ÿ“‚ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ (29)
      • ♣๏ธ Next.js 14 (10)
      • ♠๏ธ Next.js 12 (20)
      • ๐Ÿ›ธ React Native (12)
      • ๐Ÿฆ‹ TypeScript (2)
      • ๐Ÿ Python (2)
      • ๐ŸŒŠ TailwindCSS (4)
      • ๐Ÿงฉ SQL (32)
      • ๐Ÿ’Ž Prisma (5)
      • ๐ŸŒฑ MongoDB (4)
      • ๐ŸŽฏ Redis (1)
      • ๐Ÿงฌ GraphQL (2)
      • ๐Ÿ”ฅ Firebase (7)
      • ๐Ÿ’ธ Third-Party Services (5)
      • ๐Ÿ•ธ๏ธ Web (1)
      • ๐Ÿ† ์ฝ”๋”ฉํ…Œ์ŠคํŠธ (23)
      • ๐Ÿ“™ ๋ชจ๋”ฅ๋‹ค (5)
      • ๐Ÿ“— ์ฝ”ํ…Œ ํ•ฉ๊ฒฉ์ž ๋˜๊ธฐ -JS- (0)
      • ๐Ÿ“˜ ํด๋ฆฐ์ฝ”๋“œ (0)
      • ๐Ÿฏ ๊ฟ€ํŒ ๐Ÿ (1)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
  • ๋งํฌ

    • ๊นƒํ—™
  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    SQL
    ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์ž…๋ฌธ
    MySQL
    Next.js
    ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
    Python
    dev setup
    database
    react router
    React Native
    Prisma
    next.js 14
    API
    next.js 12
    ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ
    PostgreSQL
    Firebase
    mongoDB
    0๋ ˆ๋ฒจ
    third-party services
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
j2yonghwa
SQL - PostgreSQL - SET search_path = ''๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ?
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”